1.83K subscribers
3.3K photos
132 videos
15 files
3.57K links
Блог со звёздочкой.

Много репостов, немножко программирования.

Небольшое прикольное комьюнити: @decltype_chat_ptr_t
Автор: @insert_reference_here
Download Telegram
Там кстати Rust 1.63 вышел. TL;DR интересного (по моему мнению):

из компилятора выкинули старый 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
хочу миленькое лёгенькое платьице с клубничным паттерном а не вот это вот всё
👍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-сигнатурах из-за #[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 зашито в язык!
👍10
#prog #math

Вы когда-нибудь задумывались, как именно процессоры считают значения тригонометрических функций? Нет, не через ряды Тейлора — они слишком медленно сходятся. Через последовательное приближение половинками углов и сравнения с таблицей предвычисленных значений.

Подробнее в Википедии.
👍12
Forwarded from _| ̄|○
Плюсы все делают лучше
assert_eq!(
Some(unsafe { std::num::NonZeroUsize::new_unchecked(0) }),
None
);
🤯113💩1
> называет себя анимешником
> не может вспомнить, когда в последний раз смотрел анимэ
🔥3
👎3
Что
🤡14🤔2❤‍🔥1