мне не нравится реальность
511 subscribers
1.35K photos
57 videos
56 files
1.04K links
Мне не нравится реальность
N.B. waffle is unhinged

- кормить назад: @meowaffle
- кормить вперёд: github.com/sponsors/WaffleLapkin
- чят: https://xn--r1a.website/+5Dtuan4dVE5kYTcy
- блог: blog.ihatereality.space
Download Telegram
О чём-то подобном/связанном я говорил в ihatereality/698.

Кажется что люди (и я в их числе!) чрезмерно зациклились на романтической любви; романтизировали её до состояния абсолютной приторности; стали одержимы ей. И хоть я не вижу ничего плохого в романтической любви, такая зацикленность мне кажется вредной.
абрикосы в выпечке это прекрасно
Statement of the day: (|_, ()| ())(while true {});
Вы спросите: what???, а я отвечу:

Это MRE (minimal reproducible example) который показывает неправильную диагностику в компиляторе:

error[E0308]: `if` and `else` have incompatible types
--> ./t.rs:2:18
|
2 | (|_, ()| ())(while true {});
| ^^^^^^^^^^^--
| | |
| | expected because of this
| expected `()`, found `!`
|
= note: expected unit type `()`
found type `!`

В реальном коде ошибка ещё страннее выглядела X)

issue: #98894 (более подробное объяснения почему такое происходит в описании issue)
Ещё одно классное:

(|_, ()| ())([return, ()]);

На этот раз аж ICE (internal compiler error)!

А основная причина скорее всего всё та-же: некорректный код в диагностике неправильных аргументов функции.
Для тех, кто не знаком с синтаксисом раста, объясняю что за бред я вообще писал.

|_, ()| () — это замыкание, с двуми аргументами. аргументы это паттерны, _ игнорирует аргумент, () матчит по единственному значению юнит типа. () в конце это возврат юнита из замыкания.

Далее я это замыкание сразу же вызываю со странными аргументами.

while true {} — обычный while цикл. в расте он является выражением (типа (), юнит) поэтому его можно передать как первый аргумент (и как любой другой на самом деле).

[return, ()] — массив из двух элементов, return и (). () это всё ещё юнит, а return "имеет тип" ! который приводится к любому типу. так можно потому что после return код очевидно не выполняется и не важно какие там типы, переменные и т.д.

В обоих случаях передаётся только один аргумент из двух, что ломает компилятор из-за бага в коде который анализирует и показывает ошибку про несоответствие аргументов.

Если написать такое:
(|_, ()| ())(while true {}, ());
(|_, ()| ())([return, ()], ());

То код просто напросто скомпилируется.
Forwarded from ozkriff.games 🦀 (ozkriff🇺🇦)
# lib.rs Version Pages Now Link to Git Commits

When you publish a crate, Cargo makes a note of its git repository commit hash and includes it in the crates-io crate tarball. A few days ago Kornel announced that lib.rs started exposing this information, nice!

Also, check out https://lib.rs/stats if you haven't seen it yet, it has a bunch of cool graphs.
Хотел добавить в TWIR свой последний пост, а он уже там, жесть. Надо что-ли почаще его читать...
This media is not supported in your browser
VIEW IN TELEGRAM
никто:
абсолютно никто:
вафель: *пол часа рассказывает как нашёл баг в rustc*
начни свой день с undefined behaviour 🍵
This media is not supported in your browser
VIEW IN TELEGRAM
let buffer = alloc::alloc::alloc(layout);