Тема: rust
-
Go или Rust для нового сервиса: процедура выбора без бенчмарков
Выбирайте Go или Rust для сервиса по документированным свойствам языков и ограничениям команды, а не по мифам о бенчмарках: модель управления памятью, стиль обработки ошибок и конкурентности, характер нагрузки, необходимые библиотеки для взаимодействия и люди, которые будут сопровождать сервис через два года.
-
Поля упакованных структур Rust: не создавайте невыровненную ссылку до приведения к сырому указателю
Разберитесь, почему даже временная ссылка уже может нарушать требования к выравниванию, и по возможности предпочитайте явное декодирование байтов.
-
Rust Pin: сохраняйте адрес объекта, не фиксируя саму переменную-указатель
Диагностируйте ошибки закрепления, определяя чувствительное к адресу значение и операцию, способную его переместить.
-
Cargo, крейты и редакции: сборка и версионирование проекта Rust
Cargo собирает крейт по Cargo.toml, разрешает зависимости в совместимых по SemVer диапазонах и записывает их в Cargo.lock. Одна сборка может включать две несовместимые основные версии крейта. Редакции — выбираемые для каждого крейта совместимые между собой версии языка; смена редакции крейта не вынуждает зависящие от него крейты делать то же самое.
-
CString на границе FFI: отличайте заимствованный указатель от передачи владения
Сохраняйте владельца CString живым при заимствующих вызовах и используйте преобразование владения в сырой указатель лишь при явном контракте возврата.
-
Кратко о владении и заимствовании в Rust
У каждого значения Rust ровно один владелец, и значение уничтожается, когда владелец выходит из области видимости. Передача перемещает значение, если тип не реализует Copy; ссылки заимствуют его по правилу: одновременно либо одна изменяемая ссылка, либо любое число разделяемых. Проверка заимствований обеспечивает это при компиляции, давая безопасность памяти без сборщика мусора.
-
Компоновка Rust FFI: repr(C) у внешней структуры не исправляет вложенные поля
Проверьте каждое поле, пересекающее границу C ABI, и подтвердите компоновку на каждой поддерживаемой целевой платформе.
-
Владение ресурсами в Rust FFI: сопоставьте внешний конструктор с соответствующим ему деструктором
Явно задайте выделение, освобождение и время жизни обратных вызовов в обёртке Rust с узким интерфейсом над внешними ресурсами.
-
How much longer does it take an engineer from a dynamic language to become productive in Rust than in Go, and which concepts account for the gap?
Open question: Go is often described as quick to pick up and Rust as demanding, and the 2024 State of Rust survey reports that around 31% of non-users cite perceived difficulty; but few sources measure time to a first merged change, time to unsupervised code review, or which concepts (ownership, lifetimes, async, traits) consume that time for engineers arriving from Python, Ruby or JavaScript.
-
Ошибки Send в Tokio: изучите состояние, сохраняемое через await
Исправляйте запускаемый future, проверяя, что переживает приостановку, а не добавляя небезопасные реализации трейтов.
-
Rust traits versus Go interfaces: explicit impl, implicit satisfaction
Both languages abstract over behaviour without class hierarchies, but a Go type satisfies an interface by merely having the methods, while a Rust type implements a trait only through an explicit impl block subject to the orphan rule; Rust additionally separates compile-time generics (monomorphised) from dyn trait objects (dynamic dispatch), a choice Go makes for the programmer.
-
Result, Option and the ? operator: error handling in Rust
Rust has no exceptions and no null: fallible operations return Result<T, E>, absent values are Option<T>, and both are enums the compiler makes you match. The ? operator returns Err or None early and converts error types through From, and an ignored Result triggers a compiler warning because the type is marked #[must_use].
-
Раскрутка стека в Rust FFI: явно определите границу паник и исключений
Разграничьте обычные возвраты ошибок, паники Rust и внешние исключения, прежде чем выбирать ABI границы.
-
For engineers new to Rust, build wait time overtakes borrow-checker errors as the main logged friction within the first two months
Hypothesis: borrow-checker errors dominate the friction that engineers new to Rust record in their first weeks, but their share falls quickly, while entries about waiting for builds (despite cargo check, which the Cargo documentation describes as skipping code generation and therefore being faster than cargo build) rise and become the largest category within two months; a proposed friction-log test, with no result claimed.
Машиночитаемо: JSON