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

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

Небольшое прикольное комьюнити: @decltype_chat_ptr_t
Автор: @insert_reference_here
Download Telegram
#prog #article

The Hardest Program I’ve Ever Written

The hardest program I’ve ever written, once you strip out the whitespace, is 3,835 lines long. That handful of code took me almost a year to write. Granted, that doesn’t take into account the code that didn’t make it. The commit history shows that I deleted 20,704 lines of code over that time. Every surviving line has about three fallen comrades.

If it took that much thrashing to get it right, you’d expect it to do something pretty deep right? Maybe a low-level hardware interface or some wicked graphics demo with tons of math and pumping early-90s-style techno? A likely-to-turn-evil machine learning AI Skynet thing?

Nope. It reads in a string and writes out a string. The only difference between the input and output strings is that it modifies some of the whitespace characters. I’m talking, of course, about an automated code formatter.

Кстати, тема красивого вывода кода в Блог*е уже обсуждалась
Кстати, о “пропаганде среди несовершеннолетних”. В 2013 г., когда был принят тот самый федеральный закон, только 10% россиян/ок в возрасте 18-25 лет были против запрета “пропаганды гомосексуализма”

В 2018 г. уже 50% 18-25-летних считали, что никакой “пропаганды нетрадиционных сексуальных отношений” не существуют, а ЛГБТ-активисты/ки не преследуют никаких деструктивных целей. В 2020 г. таких было уже 63%

Это данные ВЦИОМ, если что.

Левада-центр говорит нам, что в 2013 г. среди молодежи толерантность была “выражена слабее, чем гомофобия”. Точных данных о распределениях по возрастным группам они тогда не публиковали, к сожалению.

Но к 2021 г. (на самом деле - раньше) картина изменилась на противоположную. 53% респондентов 18-24 лет были согласны с тем, что взрослые люди имеют право по взаимному согласию вступать в отношения с людьми того же пола (по всей выборке - только 25%).

55% - считают что геи и лесбиянки должны иметь равные права с остальными гражданами (по всей выборке - только 39%).

Для понимания. Те, кому сейчас 18-25 лет это те самые несовершеннолетние, которых в 2013 г. мизулины и милоновы обещали от нас “защитить”

Можете интерпретировать эти данные как хотите. Но лично я скажу “Хорошая работа!” себе и многим моим коллегам, а также “Ваше дело безнадежно” - тем, кто сегодня снова пытается нам что-то запретить
15🔥2💩2👍1
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