Вышел Linux 6.1, первая версия с поддержкой драйверов и модулей на Rust.
Хабр
Вышел Linux 6.1
11 декабря 2022 года Линус Торвальдс представил первый стабильный релиз ядра Linux 6.1 . Выпуск новой версии ядра Linux вышел в соответствии с графиком, но всё же с задержкой на неделю, спустя два...
❤12🔥10
This media is not supported in your browser
VIEW IN TELEGRAM
#prog #rust #rustlib
Flowistry is a tool that analyzes the information flow of Rust programs. Flowistry understands whether it's possible for one piece of code to affect another. Flowistry integrates into the IDE to provide a "focus mode" which helps you focus on the code that's related to your current task.
Flowistry is a tool that analyzes the information flow of Rust programs. Flowistry understands whether it's possible for one piece of code to affect another. Flowistry integrates into the IDE to provide a "focus mode" which helps you focus on the code that's related to your current task.
🤯12👍6❤1
Решал задачу из Advent of Code с использованием breadth first search. Получил на тестовом примере какую-то чепуху. Стал разбираться.
Оказалось, я в очередь в качестве стартового положения положил цель. 🤦♂️
Оказалось, я в очередь в качестве стартового положения положил цель. 🤦♂️
😁11
Ещё один день, ещё одно issue с метками
Даже сделали сначала линтом, а не hard error, потому что непонятно, как много кода этим охвачено.
regression-from-stable-to-stable, P-critical и I-unsound в репе #rust.Даже сделали сначала линтом, а не hard error, потому что непонятно, как много кода этим охвачено.
GitHub
Seg fault in Rust 1.65.0 if I don't create temporary variable · Issue #105295 · rust-lang/rust
I tried this code: use std::{cell::RefCell}; pub struct MessageListeners<'a> { listeners: RefCell<Vec<Box<dyn FnMut(()) + 'a>>&g...
😢5
Forwarded from dev optozorax
ААААААААА, ЭТО ОФИГЕННО!!!! 🤩 Клеточный автомат «Игра Жизнь» симулируется на самом себе бесконечно в обе стороны!!! Просто откройте!
https://oimo.io/works/life/
https://oimo.io/works/life/
oimo.io
Life Universe
🔥15
То есть за всё время существования cargo функционал по отдаче результатов тестов в машинно-читаемом формате всё ещё нестабильный?!
#rust #бомбёжкипост
#rust #бомбёжкипост
GitHub
Tracking issue for libtest JSON output · Issue #49359 · rust-lang/rust
Added in #46450 Available in nightly behind a -Z flag.
🤡2
Блог*
То есть за всё время существования cargo функционал по отдаче результатов тестов в машинно-читаемом формате всё ещё нестабильный?! #rust #бомбёжкипост
И cargo-nextest эту проблему тоже не решает
GitHub
Machine-readable output for cargo nextest run · Issue #20 · nextest-rs/nextest
The output should be similar to what cargo itself provides, complete with --message-format json and --message-format json-render-status options.
#prog #rust #rustreleasenotes
Вышла версия Rust 1.66.0! Как всегда, вычленю только интересное мне, а остальное в детальных заметках о релизе.
▪️Очень важная фича для интеропа: теперь даже для
▪️Наконец-то можно бенчмаркать код без того, чтобы оптимизатор вырезал всё подчистую для тривиальных случаев: стабилизирована функция core::hint::black_box, которая функционально эквивалентна
В документации, однако, сказано:
> Note however, that
▪️Теперь можно вызывать
▪️Изменение, о котором я говорил, докатилось до стейбла: в паттернах теперь можно использовать диапазоны с открытой нижней границей:
▪️
▪️Вопреки принятому RFC,
▪️Option::unzip 👏
▪️BTreeMap и BTreeSet обзавелись методами для доступа к первым (= минимальным) и последним (= максимальным) элементам:
Да, это правда, что технически приличную долю этих методов можно заменить на вызовы методов итераторов. Но итераторы у
▪️Примитивные числовые типы обзавелись методами для прибавления соответствующих типов противоположной знаковости (
▪️Компилятор стал побыстрее за счёт LTO для самого rustc и BOLT для LLVM (BOLT?). К сожалению, только на Linux.
Вышла версия Rust 1.66.0! Как всегда, вычленю только интересное мне, а остальное в детальных заметках о релизе.
▪️Очень важная фича для интеропа: теперь даже для
enum с данными на вариантах можно использовать явные дискриминанты. Пример:#[repr(u8)]В сочетании с
enum Foo {
A(u8) = 0,
B(i8) = 1,
C(bool) = 42,
}
#[repr(primitive_int)] и #[repr(C, primitive_int] это даёт предсказуемое представление в памяти: c #[repr(primitive_int)] enum будет union с вариантами перечисления, а с #[repr(C, primitive_int] enum будет парой из явного дискриминанта и union с вариантами без поля под дискриминант. И в том, и в другом случае дискриминант будет первым полем в представлении enum, и reference говорит, что дискриминант можно всегда можно достать путём кастования указателя на enum в указатель на типа дискриминанта. Например, в случае Foo, указанного выше:impl Foo {
fn discriminant(&self) -> u8 {
unsafe { *(self as *const Self as *const u8) }
}
}
▪️Ошибка при вычислении константного выражения наконец-то останавливает компиляцию, а не просто выдаёт предупреждение.▪️Наконец-то можно бенчмаркать код без того, чтобы оптимизатор вырезал всё подчистую для тривиальных случаев: стабилизирована функция core::hint::black_box, которая функционально эквивалентна
core::convert::identity, но при этом с точки зрения оптимизатора может сделать что угодно. В блогопосте есть пример использования.В документации, однако, сказано:
> Note however, that
black_box is only (and can only be) provided on a “best-effort” basis. The extent to which it can block optimisations may vary depending upon the platform and code-gen backend used. Programs cannot rely on black_box for correctness in any way.▪️Теперь можно вызывать
transmute между обобщёнными типами, которые отличаются лишь подставленными лайфтайм-параметрами.▪️Изменение, о котором я говорил, докатилось до стейбла: в паттернах теперь можно использовать диапазоны с открытой нижней границей:
..X и ..=X.▪️
impl Trait-типы теперь наследуют #[must_use]-аннотации от супертрейтов. В частности, теперь компилятор предупреждает о неиспользуемом impl ExactSizeIterator.▪️Вопреки принятому RFC,
#[derive(Default)] на enum добавлял баунд : Default на тИповых параметрах. Сейчас это поправили.▪️Option::unzip 👏
▪️BTreeMap и BTreeSet обзавелись методами для доступа к первым (= минимальным) и последним (= максимальным) элементам:
BTreeSet::{first,last
,pop_first
,pop_last
}first_key_value
BTreeMap::{
,last_key_value
,first_entry
,last_entry
,pop_first
,pop_last
}При этом методы
first_entry и last_entry возвращают (опционально, разумеется) OccupiedEntry, то есть ещё и дают возможность манипулировать значением in-place.Да, это правда, что технически приличную долю этих методов можно заменить на вызовы методов итераторов. Но итераторы у
BTreeMap и BTreeSet двухсторонние и потому вынуждены спускаться в по дереву в обе стороны, что является лишней работой в случае, если требуется элемент лишь с одной стороны.▪️Примитивные числовые типы обзавелись методами для прибавления соответствующих типов противоположной знаковости (
iX::*_add_unsigned и uX::*_add_signed), а знаковые типы — и методами для вычитания беззнаковых чисел. Почему-то есть checked_*, overflowing_*, saturating_* и wrapping_* варианты, но нету просто прибавления без уточнения поведения.▪️Компилятор стал побыстрее за счёт LTO для самого rustc и BOLT для LLVM (BOLT?). К сожалению, только на Linux.
blog.rust-lang.org
Announcing Rust 1.66.0 | Rust Blog
Empowering everyone to build reliable and efficient software.
🔥4👍1
Блог*
#prog #rust #rustreleasenotes Вышла версия Rust 1.66.0! Как всегда, вычленю только интересное мне, а остальное в детальных заметках о релизе. ▪️Очень важная фича для интеропа: теперь даже для enum с данными на вариантах можно использовать явные дискриминанты.…
Для тех, кто занимается процедурными макросами: у Span добавили метод source_text, который возвращает кусок исходника, на который указывает Span. Возвращает None для сгенерированного кода. В документации при этом прямо сказано, что "The observable result of a macro should only rely on the tokens and not on this source text. The result of this function is a best effort to be used for diagnostics only".
doc.rust-lang.org
Span in proc_macro - Rust
A region of source code, along with macro expansion information.