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

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

Небольшое прикольное комьюнити: @decltype_chat_ptr_t
Автор: @insert_reference_here
Download Telegram
Forwarded from Санечка Ъысь
🔥15😁5
Forwarded from Sova 36.9℃
лол
5👍2
#prog #rust #article

Predrag Gruevski написал интересную серию статей и намеревается её продолжить. Материал базируется на задаче 24 дня из Advent of Code 2021. В этой задаче описывается очень простой процессор с небольшим набором команд — без ветвлений и переходов. Целью же задачи является найти наибольший вход (четырнадцатизначное число), для которого приведённая программа, будучи выполненной на этом входе, оставляет ноль в одном из регистров. Не смотря на то, что интерпретатор для такого процессора написать весьма несложно, большое пространство для поиска не даёт шансов использовать брутфорс — слишком уж медленно это будет работать.

На примере этого процессора автор рассказывает в доступной форме об оптимизациях, которые используются в реальных компиляторах. В настоящий момент написано три части, но автор планирует написать ещё. А, и автор для иллюстрации использует Rust.

Compiler Adventures, part 1: No-op Instructions — dead code elimination

Compiler Adventures, part 2: Constant Propagation

Compiler Adventures, part 3: Value Numbering

Ссылки на новые части я буду оставлять тут.
🔥4👍1
> 4 года в инсте
> 7 постов
👍2
Игроки в настолки такие
7🤔3😁1
— ...И вообще, пока ты живёшь один, ты уже давно мог бы свою комнату превратить в конфетку.
— Но я не хочу, чтобы моя комната липла к рукам!
Мне нужен алиас на
cargo fmt && git add . && git commit --amend --no-edit && git push

#трудовыебудни
😁8👍1
Forwarded from Чудин белоглазый wrote
Самая противная иллюзия, которую положили мне в голову в детстве, заключается в том, что если кто-то что-то не понимает, значит ты недостаточно хорошо объяснил.

К себе, понятно, этот критерий ни родители, ни учителя никогда не применяли. А я поверил и взял его, как базовый. И вот только пару лет назад начало доходить, что нет, это работает не так. И если человек чего-то не понимает, настойчиво и упорно, то он и не хочет понимать. И никогда не захочет.

И действовать исходя из этого знания куда полезнее, чем ломиться в закрытые ворота человека, который не намерен уточнять свои знания об окружающем мире.
🕊149🐳2🌭2💩1🌚1
#prog #rust

Кажется, что такой код должен работать:

trait Super {}
trait Sub: Super {}

fn upcast(x: &dyn Sub) -> &dyn Super {
x as &dyn Super
}

Но нет, он валится с ошибкой. Такой, казалось бы, очевидный функционал был описан в RFC от 2013 (!) года и при этом до сих пор не реализован. Почему? Ну, его начали было реализовывать — и натолкнулись на непонятки с кастами сырых указателей на трейт-объекты: просто добавление функционала апкаста может вызвать UB в safe Rust, поскольку этот апкаст должен каким-то образом поменять vtable-составляющую, а эта часть сырого указателя может быть просто мусором.

Как именно решать эту проблему — непонятно, равно как и решить, как именно нужно запилить vtable так, чтобы они работали с такими кастами и при этом не жрали кучу места. Отдельной пикантности добавляет тот факт, что unsize-касты сырых указателей уже есть и разрешены в safe-коде.

А что делать, пока нужный функционал не реализовали нативно? Явно внедрить метод для апкаста:

trait Super {}
trait AsSuper {
fn as_super(&self) -> &dyn Super;
}
trait Sub: Super + AsSuper {}

fn upcast(x: &dyn Sub) -> &dyn Super {
x.as_super()
}

Да, при это добавляется неприятный бойлерплейт вида

impl AsSuper for Type {
fn as_super(&self) -> &dyn Super {
self
}
}

, но так оно хотя бы работает. Аналогично можно сделать методы для каста между уникальными ссылками и умными указателями. И нет, blanket impl тут сделать нельзя, потому что тип для избежания каста между трейт-объектами должен быть Sized, что ломает весь смысл в данной конструкции.

Подробности.
👍5
#prog #rust #rustlib

rustversion

This crate provides macros for conditional compilation according to rustc compiler version, analogous to #[cfg(...)] and #[cfg_attr(...)].
Forwarded from micky
9
👎1
async uses a different drop checker, so rustc considers var to be dropped after .await
playground
issue