#prog #rust
Хозяйке на заметку
Если вам нужно использовать множества в качестве ключа для ассоциативного массива, то BTreeSet из стандартной библиотеки реализует Hash (как и BTreeMap)
Хозяйке на заметку
Если вам нужно использовать множества в качестве ключа для ассоциативного массива, то BTreeSet из стандартной библиотеки реализует Hash (как и BTreeMap)
doc.rust-lang.org
BTreeSet in std::collections - Rust
An ordered set based on a B-Tree.
Блог*
#prog #rust #dotnet #article Rust panics under the hood, and implementing them in .NET Или немного о том, почему наивная трансляция раскрутки стека в исключения .NET в некоторых случаях вызывала замедление на порядок.
#prog #rust #article
Implementation of Rust panics in the standard library
Реализация паник складывается из двух вещей: генерируемой компилятором информации о действиях, которые необходимо сделать при раскрутке стека, и рантайм-поддержки. Эта статья рассказывает про второе — точнее, про ту часть, которая в std, а заодно рассказывает, почему это так много кода.
Implementation of Rust panics in the standard library
Реализация паник складывается из двух вещей: генерируемой компилятором информации о действиях, которые необходимо сделать при раскрутке стека, и рантайм-поддержки. Эта статья рассказывает про второе — точнее, про ту часть, которая в std, а заодно рассказывает, почему это так много кода.
#prog #rust #article #suckassstory
The Case of the Missing Metrics: A Rust Closure Mystery
TL;DR: начиная с версии 1.56.0 (и, соответственно, edition 2021 и выше) замыкания могут захватывать только поля некоторой переменной, если в теле осуществляется только доступ к полю переменной. Как следствие, если поле является Copy-типом, то move-замыкание захватывает копию значения вместо значения, в котором лежит поле, целиком. Авторы статьи сделали RAII-обёртку над счётчиком метрик, который в дропе отсылал метрики, и из-за этого у них потерялись метрики. Ситуация была усугублена тем, что они использовали макрос для использования yield-синтаксиса, который при раскрытии использовал замыкания, поэтому проблема не была видна из исходника и cargo fix код не поменял для сохранения поведения по отношению к захватам.
The Case of the Missing Metrics: A Rust Closure Mystery
TL;DR: начиная с версии 1.56.0 (и, соответственно, edition 2021 и выше) замыкания могут захватывать только поля некоторой переменной, если в теле осуществляется только доступ к полю переменной. Как следствие, если поле является Copy-типом, то move-замыкание захватывает копию значения вместо значения, в котором лежит поле, целиком. Авторы статьи сделали RAII-обёртку над счётчиком метрик, который в дропе отсылал метрики, и из-за этого у них потерялись метрики. Ситуация была усугублена тем, что они использовали макрос для использования yield-синтаксиса, который при раскрытии использовал замыкания, поэтому проблема не была видна из исходника и cargo fix код не поменял для сохранения поведения по отношению к захватам.
Medium
The Case of the Missing Metrics: A Rust Closure Mystery
How a subtle behavior in Rust’s closure handling led to lost metrics in RisingWave, and what we learned from it
Блог*
rules for temporary lifetime extension are syntactic, not semantic playground about temporary lifetimes
#prog #rust хайлайты:
Это, судя по всем, пофиксили: lifetime extension теперь будет работать с конструкторами (кортежных структур и кортежных вариантов перечислений)
Это, судя по всем, пофиксили: lifetime extension теперь будет работать с конструкторами (кортежных структур и кортежных вариантов перечислений)
GitHub
Temporary lifetime extension through tuple struct and tuple variant constructors by m-ou-se · Pull Request #140593 · rust-lang/rust
This makes temporary lifetime extension work for tuple struct and tuple variant constructors, such as Some().
Before:
let a = &temp(); // Extended
let a = Some(&temp()); // Not exte...
Before:
let a = &temp(); // Extended
let a = Some(&temp()); // Not exte...
#prog #rust #rustasync #article
Unlocking Tokio's Hidden Gems: Determinism, Paused Time, and Local Execution
О менее известных фичах tokio
Unlocking Tokio's Hidden Gems: Determinism, Paused Time, and Local Execution
О менее известных фичах tokio
Pierre Zemb's Blog
Unlocking Tokio's Hidden Gems: Determinism, Paused Time, and Local Execution
Discover lesser-known Tokio features like current-thread runtimes for !Send futures, seeded runtimes for deterministic tests, and paused time for precise temporal control in your Rust applications.
#prog #rust #article
Making the rav1d Video Decoder 1% Faster
В качестве реакции на конкурс по ускорению rav1d. Как оказалось, есть парочка довольно простых изменений, которые закрывают 30% разрыва по производительности.
Making the rav1d Video Decoder 1% Faster
В качестве реакции на конкурс по ускорению rav1d. Как оказалось, есть парочка довольно простых изменений, которые закрывают 30% разрыва по производительности.
#prog #rust хайлайты:
Implement ptr::try_cast_aligned and NonNull::try_cast_aligned.
Эти методы кастуют указатели в указанный методом тип и при этом возвращают
Implement ptr::try_cast_aligned and NonNull::try_cast_aligned.
Эти методы кастуют указатели в указанный методом тип и при этом возвращают
None
, если указатель не выровнен для целевого типа. Как мне кажется, полезная вещь для низкоуровневого кода.#prog #rust #article
Старые (2016) статьи с говорящими названиями:
Counting Newlines Really Fast
Even quicker byte count
Примечательно, что оба варианта без явного SIMD, а в первой статье ещё и код полностью safe.
Старые (2016) статьи с говорящими названиями:
Counting Newlines Really Fast
Even quicker byte count
Примечательно, что оба варианта без явного SIMD, а в первой статье ещё и код полностью safe.
#rust #article #suckassstory
parking_lot: ffffffffffffffff...
История разбора противного бага, который в конечном счёте свёлся к логической ошибке в parking_lot. Напоминание о том, что Rust позволяет удостовериться в том, что примитивы синхронизации корректно используются, но не особо помогают с реализацией этих примитивов.
Из хороших новостей: этот баг в parking_lot в итоге пофиксили, а разработчики в процессе фикса бага построили инфраструктуру для сбора метрик об исполнении кода.
parking_lot: ffffffffffffffff...
История разбора противного бага, который в конечном счёте свёлся к логической ошибке в parking_lot. Напоминание о том, что Rust позволяет удостовериться в том, что примитивы синхронизации корректно используются, но не особо помогают с реализацией этих примитивов.
Из хороших новостей: этот баг в parking_lot в итоге пофиксили, а разработчики в процессе фикса бага построили инфраструктуру для сбора метрик об исполнении кода.
Fly
parking_lot: ffffffffffffffff...
Gnarliest Rust proxy bug yet.