1.83K subscribers
3.23K photos
126 videos
15 files
3.51K links
Блог со звёздочкой.

Много репостов, немножко программирования.

Небольшое прикольное комьюнити: @decltype_chat_ptr_t
Автор: @insert_reference_here
Download Telegram
👍13😁5😢1🎉1
#prog #rust #article

"Why is the Rust compiler so slow?"

Чел погрузился в кроличью нору с твиками флагов LLVM, чтобы ускорить сборку в докере сервера для своего сайта.

Спойлер: из всех средств наиболее эффективным оказалось то, что подсказали автору уже после публикации. Именно, замена базового образа с Alpine на Debian (-69% времени сборки).
😁33👌5
#prog #rust #haskell #article

Reflections on Haskell and Rust

For most of my professional experience, I have been writing production code in both Haskell and Rust, primarily focusing on web services, APIs, and HTTP stack development. My journey started with Haskell, followed by working with Rust, and most recently returning to the Haskell ecosystem.

This experience has given me perspective on both languages' strengths and limitations in real-world applications. Each language has aspects that I appreciate and miss when working with the other. This post examines the features and characteristics that stand out to me in each language.

TL;DR: оба языка хороши, но на текущий момент автор считает Rust более прагматичным выбором.
👍21👎1
#prog #rust #article

Unsoundness and accidental features in the #[target_feature] attribute

Researching the SemVer hazards of the #[target_feature] attribute led to finding unexpected unsoundness, discovering an "accidental feature" in Rust, finding bugs in rustdoc, the creation of an RFC that evolves the Rust language, and the addition of a dozen new SemVer lints. My work on cargo-semver-checks benefits the Rust ecosystem in more ways than just preventing breakage!
👍3
#prog #rust #article

Alternative Blanket Implementations for a Single Rust Trait

Или как решить проблему с кодом вида

impl<T: TraitA> MyTrait for T { ... }
impl<T: TraitB> MyTrait for T { ... }
1🌚1🤨1
#prog #rust #article

A Newbie's First Contribution to (Rust for) Linux

Статья о написании драйвера для Linux с использованием R4L вкупе с написанием вспомогательных абстракций для него. Спойлер: написание кода, даже со скидкой на то, что это рерайт, было далеко не самой сложной вещью из того, что нужно было сделать для добавления кода в ядро.
👍6👎1
#prog #rust #article

The scary and surprisingly deep rabbit hole of Rust's temporaries

After learning so much about the niche Rust topic of temporaries, I'm determined to also burden you with this unholy knowledge, if you're just willing to read a few thousand words on it.


Пара замечаний по статье.

Во-первых, хотя информация в статье и познавательна, знать всё это совершенно необязательно. На практике достаточно просто писать код и вставлять let в местах, где расширения времени жизни не происходит, и для этого даже не нужно, как правило, думать, потому что компилятор сам предлагает нужные изменения.

Во-вторых, как справедливо заметили в обсуждении статьи на r/rust, в примерах, где отсутствует расширение времени жизни, используется Some(&expr), и на nightly эти примеры компилируются из-за расширения соответствующих правил на случай кортежных конструкторов.
#prog #rust #article

Variadic Generics ideas that won't work for Rust

The discussion is long-running enough that I’ve seen some arguments show up again and again in various forms from various people, over a span of a decade.

<...>

Today, I’ll focus on three proposals that people bring up a lot in associated discussions, and try to explain why these proposals wouldn’t work for the Rust language.
🙏1
#rust #article

Remark on Rust's 10th anniversary.

<...>

Which leads us to Rust 1.87, which came out 3654 days after that date, which, through the magic of off-by-one errors, happens to be precisely 10 years after the release of Rust 1.0.
😁28🌚5💯5
Вроде #prog #rust #meme, но говорят, что объявление реальное.

Source
🤡21😁14
#prog #rust #article

The borrowchecker is what I like the least about Rust

Не со всем согласен, но большинство аргументов здравые.

In this post, I want to make two arguments:

1. That the borrowchecker causes serious ergonomic problems for Rust.

2. That the role of the borrowchecker in Rust's safety is overstated.


Perversely, because Rust's lifetime riddles are challenging, they are sort of fun. I believe that partly explains why so many people don't seem to mind them. Instead of thinking about how to write my code to solve the scientific problems I'm being paid to solve, I have to think about how to write it to please the borrowchecker. The latter is usually more tractable, limited in scope, have clearer requirements and is more 'puzzle-like'. In that sense, Rust enables escapism: When writing Rust, you get to solve lots of 'problems' - not real problems, mind you, but fun problems.
👍10🤡5👎1😐1
#prog #rust #rustreleasenotes

Вышла версия Rust 1.89.0! Как всегда, тут только избранные части, остальное — в детальных заметках о релизе.

▪️Стабилизировали вывод const generics в выражениях!

pub fn all_false<const LEN: usize>() -> [bool; LEN] {
[false; _]
}


К сожалению, использовать _ для const generics в сигнатурах всё ещё нельзя.

▪️Док-тесты теперь запускаются при кросс-компиляции.

▪️Атрибуты вида #![doc(test(attr(..)))] (которые добавляют #[attr(..)] ко всем док-тестам в модуле) теперь можно использовать везде, включая корень крейта.

▪️После фиксов для согласования с существующими компиляторами C/C++ теперь можно использовать i128 и u128 в extern "C" определениях, интероп корректно работает и, как следствие, improper_ctypes_definitions более не триггерится.

▪️Как я уже писал, продление времени жизни временных значений теперь работает и с кортежными конструкторами (кортежных структур и кортежных вариантов enum-ов).

▪️Стабилизированы интринсики (и связанные с ними target feature [1], [2]) из наборов инструкций AVX512, SHA512, SM3 и SM4 для x86-64.

▪️Макро-фрагмент в декларативных макросах без указанного типа теперь является ошибкой компиляции на всех edition.

▪️Результат вычисления format_args! теперь можно сохранять в переменных! 🎉

▪️std::array::IntoIter теперь реализовывает Default. Значение по умолчанию при этом является итератором, который ничего не возвращает. Полезно, когда нужно предоставить итерацию по опциональному массиву и при этом не хочется прокидывать Option в возвращаемое значение.

▪️LazyCell и LazyLock теперь реализуют DerefMut. Одной причиной использовать once_cell меньше.

▪️К слову о локах, для File теперь есть пачка методов ({, try_}lock{, _shared} и unlock) для работы с платформо-специфичными способами блокировки файлов. Напоминаю, что на Linux эти функции требуют кооперации: коду нужно явно указывать на то, что он обращает внимание на блокировки, а по умолчанию они ничего для сторонних процессов не делают.

▪️NonNull можно безопасно создать из ссылки, поскольку ссылки в Rust обязаны не быть null. Для этого есть реализация From<&T> for NonNull<T>. К сожалению, этот способ конвертации не очень очевиден, и на практике многие писали код с NonNull::new_unchecked, в котором ссылка приводилась к сырому указателю по месту вызова. Видимо, чтобы сделать безопасный способ конвертации более видимым и очевидным в исходниках, к NonNull добавили конструктор from_reffrom_mut для конвертации из &mut T). Также этому типу добавили методы для работы с provenance (expose_provenance, with_exposed_provenance, without_provenance), которые аналогичны таковым для сырых указателей, но принимают/возвращают NonZero<usize> вместо usize.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥32
😁26💯7🤯31
#prog #rust #article

Can Rust prevent logic errors?

TL;DR: да, потому что в Rust есть для этого средства, которые отсутствуют в подавляющем большинстве мейнстримных ЯП. Автор, впрочем, сравнивает в основном с Ruby.

Предотвращаемые ошибки показаны с примерами на других ЯП.
❤‍🔥3
#rust

Vitaly Reads: #3, August 2025


I’ve just completed reading an amazingly well-written book called “Refactoring to Rust” by Lily Mara and Joel Holmes, published recently by Manning Publications. I’m pretty sure that the book was supposed to be called “Rewrite it to Rust,” but then someone realized that this is already a meme, so it’d be too much.

Yet, the goal is exactly that – to teach folks how to gradually introduce Rust components to their existing codebases written in C/C++, Java, Python, or JavaScript. Such a goal reflects the intended audience: developers in those languages with little or no knowledge of Rust. One interesting thing, though, is that even Rust professionals might find a lot of interesting details about Rust itself, especially if they are not experienced in such areas as FFI (Foreign Function Interface), Rust-Python interoperability, or WebAssembly – those are the key topics of the book.


(thanks, разумеется, @bravit)
🥰6👍4
#prog #rust #article

Fully Automated Releases for Rust Projects

Статья с очень конкретными инструкциями
🔥3
#prog #rust #suckassstory

std::process::exit is not thread-safe in combination with C code calling exit

Древний дизайн из времён, когда многопоточности не существовало, вновь наносит удар! И да, проблемы те же, что и с env::{set_var, remove_var}.
😁3