▪️Кстати, насчёт паник: вывод паник (по крайней мере, с panic hook по умолчанию) теперь предотвращает перемешивание вывода, если паникуют несколько потоков одновременно.
▪️Ещё касательно паник:
As argument to the
As argument to the panic hook in std context.
In situation 1, the
In situation 2, the
...
I don't see any good reasons for these to be the same type, other than historical reasons.
Как следствие,
▪️И ещё насчёт паник:
▪️Стабилизировали новые API, в том числе:
🔸 core::error. Да, само по себе это не новое API, но трейт
🔸hint::assert_unchecked — вызывает UB, если аргумент является
🔸fs::exists — фактически алиас для Path::try_exists, не переводит ошибки в
🔸AtomicBool::fetch_not
🔸Duration::abs_diff
В const-контексте теперь можно вызывать:
🔸
🔸
▪️Ещё касательно паник:
PanicInfo
разделили на два типа. Первый, в core, используется как аргумент в #[panic_handler]
(вне #![no_std]
не актуально), а второй, в std (переименованный в PanicHookInfo
) как аргумент для хука паники. Как пишет Мара Бос:
PanicInfo
is used in two ways:As argument to the
#[panic_handler]
in no_std
context.As argument to the panic hook in std context.
In situation 1, the
PanicInfo
always has a message (of type fmt::Arguments
), but never a payload (of type &dyn Any
).In situation 2, the
PanicInfo
always has a payload (which is often a String
), but not always a message....
I don't see any good reasons for these to be the same type, other than historical reasons.
Как следствие,
std::panic::PanicInfo
теперь является алиасом (с #[deprecated]
) на PanicHookInfo
.▪️И ещё насчёт паник:
PanicInfo
(который в core) обзавёлся новым методом message, который возвращает новый тип PanicMessage, реализующий Display
. Да, сейчас это тонкая обёртка над fmt::Arguments.▪️Стабилизировали новые API, в том числе:
🔸 core::error. Да, само по себе это не новое API, но трейт
Error
теперь можно использовать в #![no_std]
🔸hint::assert_unchecked — вызывает UB, если аргумент является
false
. Может быть полезно для того, чтобы сообщать оптимизатору инварианты, которые компилятор сам не выводит.🔸fs::exists — фактически алиас для Path::try_exists, не переводит ошибки в
false
.🔸AtomicBool::fetch_not
🔸Duration::abs_diff
В const-контексте теперь можно вызывать:
🔸
char::from_u32_unchecked
(и метод, и функцию в core::char
)🔸
CStr::{
count_bytes,
from_ptr}
👍3
Блог*
#prog #rust #rustreleasenotes Вышла версия Rust 1.81.0! Как всегда, котлеты детальные заметки о релизе отдельно, а мухи мои хайлайты отдельно. ▪️Компилятор теперь несколько иначе выводит лайфтаймы. Раньше при наличии self компилятор выводил время жизни из…
GitHub
`#[expect(unused_must_use)]` does not work when applied directly to statement · Issue #130142 · rust-lang/rust
I tried this code: #[must_use] pub fn important() -> i32 { 42 } pub fn foo() { #[expect(unused_must_use)] important(); } I expected #[expect] to catch unused_must_use lint and suppress it, as it...
😭7👍3😁3🤔2
#prog
Frangipanni — program to convert lines of text into beautiful tree structures.
Пример. Вход:
Вывод:
Можно также выводить в JSON и вручную задавать разделители.
Попенять можно разве что за длинные ключи с одиночными дефисами вместо удвоенных (т. е. ключи как в find, например).
Frangipanni — program to convert lines of text into beautiful tree structures.
Пример. Вход:
/etc/bluetooth/rfcomm.conf.dpkg-remove
/etc/bluetooth/serial.conf.dpkg-remove
/etc/bluetooth/input.conf
/etc/bluetooth/audio.conf.dpkg-remove
/etc/bluetooth/network.conf
/etc/bluetooth/main.conf
/etc/fish
/etc/fish/completions
/etc/fish/completions/task.fish
Вывод:
etc
bluetooth
rfcomm.conf.dpkg-remove
serial.conf.dpkg-remove
input.conf
audio.conf.dpkg-remove
network.conf
main.conf
fish/completions/task.fish
Можно также выводить в JSON и вручную задавать разделители.
Попенять можно разве что за длинные ключи с одиночными дефисами вместо удвоенных (т. е. ключи как в find, например).
🥰6👍4❤1🔥1😱1🤡1
https://cpu.land — ресурс, рассказывающий о том, как именно происходит запуск программ в компьютере. К сожалению, практически всё, что касается OS — Linux-специфично. Но даже так всё равно познавательно
Putting the "You" in CPU
Curious exactly what happens when you run a program on your computer? Learn how multiprocessing works, what system calls really are, how computers manage memory with hardware interrupts, and how Linux loads executables.
🔥15👍4👎1
Forwarded from Технологический Болт Генона
🌝
https://mailman.nginx.org/pipermail/nginx-ru/2024-September/JO5YGKLOQA6RZ43PIDOEVFOHV4ON6RCM.html
До этого NGINX жил тут
https://trac.nginx.org/
ЗЫ Какие же тёплые ностальгические чувства вызывает Trac. В своё время был отдушиной прям.
https://mailman.nginx.org/pipermail/nginx-ru/2024-September/JO5YGKLOQA6RZ43PIDOEVFOHV4ON6RCM.html
До этого NGINX жил тут
https://trac.nginx.org/
ЗЫ Какие же тёплые ностальгические чувства вызывает Trac. В своё время был отдушиной прям.
👍7👎1
Forwarded from Кресты на моей кукухе
А зачем питонячьи тулзы типа пипа и конды делают намеренно неудобными? Нормально же можно было pip install делать системно, нахера было прекращать? Предыдущий опыт работы с кондой отправил конду на свалку. Понадобилось потрогать её снова — глумится, блядь ехидная
😁10👍8❤1👎1🤡1
#prog #rust #article
Is this trait sealed, or not sealed — that is the question
В Rust есть идиома под названием sealed trait. Этим называют трейт, который обычно предназначен для использования в публичном API, но при этом имплы которого не могут быть написаны вне крейта, в котором он определён. В данной статье рассказывается о том, как новая версия cargo-semver-checks 0.35 понимает, что трейт является запечатанным. Ответ на этот вопрос не самый прямолинейный и содержит граничные случаи внутри граничных случаев внутри граничных случаев.
Is this trait sealed, or not sealed — that is the question
В Rust есть идиома под названием sealed trait. Этим называют трейт, который обычно предназначен для использования в публичном API, но при этом имплы которого не могут быть написаны вне крейта, в котором он определён. В данной статье рассказывается о том, как новая версия cargo-semver-checks 0.35 понимает, что трейт является запечатанным. Ответ на этот вопрос не самый прямолинейный и содержит граничные случаи внутри граничных случаев внутри граничных случаев.
predr.ag
Is this trait sealed, or not sealed — that is the question
Detecting sealed Rust traits allows many new SemVer lints. Why did building it take so long?
#math #video
How good is advantage in D&D?
Видео, которое со всех сторон рассматривает статистические эффекты преимущества и помехи на броски в Dungeons&Dragons — в частности, пытается прикинуть, каким модификатором их можно заменить. Если вам непонятны термины выше — спокойно, у видео есть вводная, которая это всё объясняет.
How good is advantage in D&D?
Видео, которое со всех сторон рассматривает статистические эффекты преимущества и помехи на броски в Dungeons&Dragons — в частности, пытается прикинуть, каким модификатором их можно заменить. Если вам непонятны термины выше — спокойно, у видео есть вводная, которая это всё объясняет.
YouTube
How good is Advantage in D&D?
Can we equate rolling with advantage in Dungeons and Dragons to a flat modifier? Let's ask this kenku we pulled off the street. Oh no, they're going on a long-winded tangent on probability...
(Note for commenters: I am aware that rolling a 1 is automatically…
(Note for commenters: I am aware that rolling a 1 is automatically…
🔥3
#prog #rust #rustasync #article
Async Rust can be a pleasure to work with (without Send + Sync + 'static)
<...> How? Through a combination of Structured Concurrency and thread-per-core async runtimes.
Async Rust can be a pleasure to work with (without Send + Sync + 'static)
<...> How? Through a combination of Structured Concurrency and thread-per-core async runtimes.
Evan Schwartz
Async Rust can be a pleasure to work with (without `Send + Sync + 'static`)
Async Rust is powerful. And it can be a pain to work with (and learn). Async Rust can be a pleasure to work with, though, if we can do it without `Send + Sync + 'static`.
👍7🥰1
#prog #sql #abnormalprogramming
github.com/nuno-faria/tetris-sql
Using SQL's Turing Completeness to Build Tetris
(thanks @nosingularity)
github.com/nuno-faria/tetris-sql
Using SQL's Turing Completeness to Build Tetris
(thanks @nosingularity)
GitHub
GitHub - nuno-faria/tetris-sql: Using SQL's Turing Completeness to Build Tetris
Using SQL's Turing Completeness to Build Tetris. Contribute to nuno-faria/tetris-sql development by creating an account on GitHub.
🤯5