Forwarded from мне не нравится реальность
Там кстати Rust 1.63 вышел. TL;DR интересного (по моему мнению):
— из компилятора выкинули старый borrowck (я так и не понял что это меняет)
—
— турборыбу можно использовать для дженериков в функциях с APIT [1]
—
— std теперь поддерживает nintendo 3DS 👀
—
—
—
— Стабилизорована / const-ифицирована куча функций (мне лень их все перечислять) (кстати к некоторым я приложил лапки), в том числе стабилизировали scoped треды (!!!), более безопасные типы для работы с платформо зависимым IO и
— Добавили в документацию заметку про то, что safety гарантии раста никак не защищают от
[blog] [github release]
[1]: это позволяет делать такое:
[2]: Termination это трейт для типов, которые можно вернуть из
— из компилятора выкинули старый borrowck (я так и не понял что это меняет)
—
[x; 0]
теперь дропает x
(ранее был баг из-за которого это было эквивалентно mem::forget
)— турборыбу можно использовать для дженериков в функциях с APIT [1]
—
null
и null_mut
теперь работают с extern типами— std теперь поддерживает nintendo 3DS 👀
—
write!
/print!
теперь дропают tmp раньше—
Layout
теперь реализует Hash
— needs_drop
теперь работает для не Sized
типов—
Termination
теперь реализован для большего количества типов [2]— Стабилизорована / const-ифицирована куча функций (мне лень их все перечислять) (кстати к некоторым я приложил лапки), в том числе стабилизировали scoped треды (!!!), более безопасные типы для работы с платформо зависимым IO и
Mutex::new
в const
контексте— Добавили в документацию заметку про то, что safety гарантии раста никак не защищают от
/proc/self/mem
— У коллекций улучшена документация на счёт того, что происходит при логических ошибках (например в реализации Ord
)[blog] [github release]
[1]: это позволяет делать такое:
fn f<T>(f: impl FnOnce() -> T) { ... }
f::<u32>(|| 0);
раньше ::<u32>
было нельзя писать из-за impl Trait
в аргументах. сам APIT
явно задать нельзя, но это может быть и плюсом, когда явно хочется задать только другие параметры.[2]: Termination это трейт для типов, которые можно вернуть из
main
. В этом релизе добавили реализации для Infallible
и Result<impl Termination, impl Debug>
(ранее можно было возвращать только Result<(), _>
, Result<!, _>
и Result<Infallible, _>
).🎉6
Forwarded from мне не нравится реальность
хочу миленькое лёгенькое платьице с клубничным паттерном а не вот это вот всё
👍2🤮2
мне не нравится реальность
Там кстати 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.