мне не нравится реальность
Там кстати Rust 1.63 вышел. TL;DR интересного (по моему мнению): — из компилятора выкинули старый borrowck (я так и не понял что это меняет) — [x; 0] теперь дропает x (ранее был баг из-за которого это было эквивалентно mem::forget) — турборыбу можно использовать…
О некоторых вещах Вафель всё же зря умолчал.
Первое — это реализация типов для IO safety. Новые типы для Unix (OwnedFd, BorrowedFd) и Windows (OwnedHandle, HandleOrNull, HandleOrInvalid, BorrowedHandle, OwnedSocket, BorrowedSocket), полезные в основном для FFI, позволяют:
* на уровне типов — а не устных соглашений — описать, как именно функция обращается с сырыми ручками от OS;
* опять-таки, на уровне типов исключить возможность забыть обработку возможных невалидных значений;
* задействовать niche optimisation, чтобы не иметь оверхед на тег для опциональных значений;
* использовать их непосредственно в FFI-сигнатурах из-за
Не та вещь, которую будешь использовать каждый день, но для написания биндингов определённо полезна.
Вторая вещь — это array::from_fn (которая, кстати, реализована в терминах array::map). Пример использования:
Первое — это реализация типов для IO safety. Новые типы для Unix (OwnedFd, BorrowedFd) и Windows (OwnedHandle, HandleOrNull, HandleOrInvalid, BorrowedHandle, OwnedSocket, BorrowedSocket), полезные в основном для FFI, позволяют:
* на уровне типов — а не устных соглашений — описать, как именно функция обращается с сырыми ручками от OS;
* опять-таки, на уровне типов исключить возможность забыть обработку возможных невалидных значений;
* задействовать niche optimisation, чтобы не иметь оверхед на тег для опциональных значений;
* использовать их непосредственно в FFI-сигнатурах из-за
#[repr(transparent)]
.Не та вещь, которую будешь использовать каждый день, но для написания биндингов определённо полезна.
Вторая вещь — это array::from_fn (которая, кстати, реализована в терминах array::map). Пример использования:
let array = core::array::from_fn(|i| i);
assert_eq!(array, [0, 1, 2, 3, 4]);
Чем примечательна эта функция? Ну... В C есть фича под названием designated initializers. Обычно её вспоминают в связи со структурами:struct A { int x; int y; int z; };
struct A a{.y = 2, .x = 1};
, но почему-то мало кто знает, что их можно использовать и с массивами:int n[5] = {[4]=5,[0]=1}; // 1,0,0,0,5
array::from_fn
позволяет (до некоторой степени) сымитировать это поведение:// look ma no types!
let arr = std::array::from_fn(|i| match i {
4 => 5,
0 => 1,
_ => 0,
});
То есть Rust вынес в библиотеку то, что в C зашито в язык!GitHub
Tracking Issue for RFC 3128: I/O Safety · Issue #87074 · rust-lang/rust
Feature gate: #![feature(io_safety)] This is a tracking issue for RFC 3128: I/O Safety. Raw OS handles such as RawFd and RawHandle have hazards similar to raw pointers; they may be bogus or may dan...
👍10
Блог*
#music youtube.com/watch?v=Ep7Ni6dtQaA (ну вы поняли, во что я играл)
#game #video
The Music Of Metal Gear Rising Is Smarter Than You Think
ВНИМАНИЕ: СОДЕРЖИТ СПОЙЛЕРЫ К ИГРЕ ДЕВЯТИЛЕТНЕЙ ДАВНОСТИ
The Music Of Metal Gear Rising Is Smarter Than You Think
ВНИМАНИЕ: СОДЕРЖИТ СПОЙЛЕРЫ К ИГРЕ ДЕВЯТИЛЕТНЕЙ ДАВНОСТИ
YouTube
The Music Of Metal Gear Rising Is Smarter Than You Think
Metal Gear Rising has a brilliant soundtrack. It's one of the best celebrated elements of the game, and with good reason-it's lightning fast and matches the exhilarating gameplay perfectly.
But something that I feel gets a bit left behind is that the music…
But something that I feel gets a bit left behind is that the music…
#prog #math
Вы когда-нибудь задумывались, как именно процессоры считают значения тригонометрических функций? Нет, не через ряды Тейлора — они слишком медленно сходятся. Через последовательное приближение половинками углов и сравнения с таблицей предвычисленных значений.
Подробнее в Википедии.
Вы когда-нибудь задумывались, как именно процессоры считают значения тригонометрических функций? Нет, не через ряды Тейлора — они слишком медленно сходятся. Через последовательное приближение половинками углов и сравнения с таблицей предвычисленных значений.
Подробнее в Википедии.
Wikipedia
CORDIC
algorithm for computing trigonometric and hyperbolic functions
👍12
assert_eq!(
Some(unsafe { std::num::NonZeroUsize::new_unchecked(0) }),
None
);
🤯11❤3💩1
мне не нравится реальность
IF LET CHAINS ARE STABILIZED IN RUST 1.64 rust-lang/rust/pull/94927#event-7007028976 > 2 years, 4 months, 3 weeks and 1 day of long nights, obstacles and headaches. > Hope stabilization won't be reverted but regardless, thanks to everyone who helped make…
GitHub
Revert let_chains stabilization by Noratrieb · Pull Request #100538 · rust-lang/rust
This reverts commit 3266460.
It was discovered in #100513 that they are not implemented correctly, which does not make them ready for stabilization.
The merge in the let parsing had a few conflicts...
It was discovered in #100513 that they are not implemented correctly, which does not make them ready for stabilization.
The merge in the let parsing had a few conflicts...
😢6
> называет себя анимешником
> не может вспомнить, когда в последний раз смотрел анимэ
> не может вспомнить, когда в последний раз смотрел анимэ
🔥3
💩3🤯2😢2
#prog #article
Soft Deletion Probably Isn't Worth It (Мягкое удаление чаще всего не нужно)
В комментариях к переводу, впрочем, навалили критики.
Soft Deletion Probably Isn't Worth It (Мягкое удаление чаще всего не нужно)
В комментариях к переводу, впрочем, навалили критики.
brandur.org
Soft Deletion Probably Isn't Worth It
The traditional soft deletion pattern using <code>deleted_at</code> columns leaks into code, curbs the usefulness of foreign keys, and makes data removal difficult. Luckily, there’s an alternative.