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

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

Небольшое прикольное комьюнити: @decltype_chat_ptr_t
Автор: @insert_reference_here
Download Telegram
Forwarded from Segment@tion fault
R&D все-таки штука неблагодарная. Выбегаешь такой к коллегам - пацаны, работает! Rust запускает питоновские concurrent.futures параллельно в GIL-треде и получает await'ом результат через tokio!

А они тебя поздравляют, из вежливости. И догадываются, что раз tokio, значит это что-то с Японией.
Forwarded from Segment@tion fault
Собственно насчёт сумрачной технологии интегрирования питона в раст - получилось оформить в crate. Производительность "всунуть задачу в ThreadPoolExecutor и подождать" - "терпимая", но стабильность - отличная. Главное, что задачи ставятся из любого Rust-потока, в котором работает coro, GIL не мешает.

https://crates.io/crates/pime
xxx: можно же было в стд сделать одеяло-имплементацию

#quotes #трудовыебудни #justrustaceanthings
log(😅) = 💧log(😄)
Согласно мнению одного человека, я — упырь 👌😐
Посуда бьётся к счастью. А сердечки?
#prog #rust

Как вам, наверное, известно, сырые указатели *mut T и *const T не реализуют Send и Sync. Кто-то может сказать: "Но это же просто адреса, к чему эти дурацкие ограничения? К тому же, они тривиально обходятся обёртками с ручными unsafe impl Send/Sync". На это есть две причины.

Первая: Send и Sync — это авто-трейты: если все поля типа реализуют Send (Sync) и у него нету явного impl-а Send (Sync), то и сам тип реализует Send (Sync). Крайне редко сырые указателя используются как поля, которые просто передаются дальше — почти всегда из используют тем или иным способом — и при том не всегда потокобезопасным. Если бы сырые указатели реализовывали бы эти трейты, то слишком много типов автоматически считались бы Send (Sync) не смотря на то, что они таковыми не являются. Например, Rc<T> выглядит примерно так:

struct Rc<T> {
ptr: *const RcBox<T>
}


struct RcBox<T> {
strong: usize,
weak: usize,
val: T,
}



С "упрощающим" изменением Rc<T> всегда бы реализовывал бы Send и Sync, что, очевидно, неправильно — в действительности же Rc<T> не реализует ни один из этих трейтов, поскольку использует не атомарный счётчик ссылок.

Вторая: явное выделение ответственности. Если вам требуется переслать сырой указатель из одного потока в другой или расшарить его с несколькими потоками, то у вас наверняка есть некоторые соображения, почему это можно сделать. Эти соображения, очевидно, работают не для всех указателей. Обычно мы разделяем данные с одним и тем же представлением, но разной семантикой в разные типы. Так почему мы не должны делать то же самое для указателей? Мало того, что это позволяет переместить утверждения в справедливости из невидимых компилятору комментариев в проверяемые компилятором типы, так оно ещё и помогает людям видеть, где необходимые предусловия и инварианты и впрямь соблюдены. А выделение специальных конструкторов над обёртками сырых указателей позволяет на практике реализовать принцип parse, don't validate.
Дети по-античному просты.

Я стоял в очереди в зоомагазине, а передо мной семилетний (скажем) мальчик что-то объяснял матери. Ребенку приходилось кричать, так как все звери в этом зоомагазине были полны энергии. Мама, отвлеченная щебетом попугаев, что-то переспросила, и ребенок разгневался.

— Птицы, молчите! — вскрикнул он голосом персидского царя.

Я почти ожидал, что все действительно смолкнет, но, конечно же, птицы не послушались. На лице мальчика на секунду застыла гримаса брезгливой ярости.

На выходе из магазина он наступил в лужу и, клянусь, почти приказал матери ее высечь.
Forwarded from Segment@tion fault
​​​​Пошел купить лук, была очередь а касса самообслуживания зависла. От нечего делать полазил по сервисному меню, вышел в шелл. Все работает под админом. Тачскрин пашет. Дайте мне это развидеть.

In IoT S is for security. Но я человек честный, просто бутнул.
Forwarded from Segment@tion fault
Передовые разработки автоматизации
Forwarded from какография
У меня сегодня забавный паттерн получился.

&mut &[x, ref xs @ ..]

Пояснение: это был матч на &mut &[T]. x — копия первого элемента (T), xs — ссылка на последующие элементы (&[T]).