#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% разрыва по производительности.