мне не нравится реальность
506 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
мне не нравится реальность
?
Подробное объяснение почему эти две строки:

(if true {} else {}) - a; // 1

if true {} else {} - a; // 2

могут скомпилироваться и дают разный результат.

Начнём с того, почему это может работать. За выражения вида x - y в расте отвечает трейт Sub. Если X: Sub<Y>, то из выражения типа X можно вычесть выражение типа Y.

if/else в свою очередь является выражением с типом () aka unit (потому что блоки пустые), поэтому можно реализовать Sub<MyType> для () и вуаля!

Но, тут есть подвох. if/else может быть не только выражением, но и statement'ом. Например следующий код валиден:

if ok {
println!("ok!")
} else {
println!("not ok!")
}
let x = 0;

Несмотря на то, что после if нет ;, оно всё равно парсится как statement. И в случае

if true {} else {} - a; // 2

if
/else тоже парсится как statement, а не выражение, а - становится унарным, а не бинарным:

if true {} else {};
-a;

За унарный минус в расте отвечает трейт Neg. Если реализовать Sub<Ty> для () и Neg для Ty, то две строки из вопроса скомпилируются, но вызовут разное поведение.

Первая строка будет аналогична
<() as Sub<Ty>>::sub((if true {} else {}), a)
, а вторая будет аналогична
if true {} else {};
<Ty as Neg>::neg(a);
Посоветуйте, куда можно задонатить на помощь Украине?
привет?

Когда Россия вторглась в Украину месяц назад (какой ужас, уже целый месяц прошёл...), я не мог ничего писать, потому что про войну мне сказать было нечего, а про другие темы как-то странно писать... Да и прямо скажем у меня было слишком паршивое настроение, чтобы хоть что-то писать.

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

А я тем временем переехал в Армению, теперь вот тут пытаюсь освоиться, понять как дальше жить. У меня всё в целом хорошо (за что я чувствую небольшой стыд, как это так все страдают, а мне тут хорошо), по сравнению с Россией, чувствую себя в полной безопасности. Хотя стресса и тут хватает, чего только стоят поиски жилья. Но впрочем по сравнению с войной это кажется незначительной мелочью. Не знаю, я уже запутался ><

Вот думаю, может вернуться к написанию постов, что скажете? Будет от этого кому-то лучше?
а сегодня (международный) день вафель с: