Telegram Web
Даже не особо и #meme

(thanks @eugene_horny_memes)
💯21👍2
😁41🤔8
21👍6💯3🤔1
💩26🤡5💯4😁3👍1
Femboys are the best for you and your family
👌10👍3🤡2
#prog #article

Why SSA?

If you’ve read anything about compilers in the last two decades or so, you have almost certainly heard of SSA compilers, a popular architecture featured in many optimizing compilers<...>

SSA is actually very simple once you forget everything you think your programs are actually doing. We will develop the concept of SSA form, a simple SSA IR, prove facts about it, and design some optimizations on it.

Содержит кусочки теории графов.
👍4
#video

Вы когда-нибудь видели, как зевает лягушка?

youtu.be/iNU5UmIsw38

these frogs are really unique because they aren’t like frogs in many ways. For one they can’t swim and will drown if you put them in deep water. Second, they don’t have tadpole babies, but instead hatch mini baby frogs. And third they cannot hop, but they crawl fast if they wanted to.
🥰71
Сижу себе спокойно, пишу ревью на препринты, поданные на ICLR 2026... как вдруг один из них внезапно приоткрывает предо мною настоящую бездну в виде блок-схемы на рис. 1 (в статье это тоже Fig.1).

Как вам такой пайплайн, друзья? Рекомендую вглядеться в картинку повнимательнее, особенно в правую её часть. Через какое-то время вглядывания вам начнет казаться, что картинка тоже в вас вглядывается - механическими глазами диффузионного генератора. #генерация
😁8🍌6🤯4🤩1
Провёл второй ваншот в жизни
🎉13🤮2💩2🤡1
😁18🔥32
#meme про собеседования
😁7🌚2
#prog #rust #rustreleasenotes

Вышла версия Rust 1.91.0! Как всегда, тут только избранные части, всё остальное — в детальных заметках о релизе.

Если бы этот релиз можно было описать одним словом, то это было бы слово "полировка": релиз скорее про улучшение уже существующих фич и стабилизацию старых, давно бывших в nightly, чем про добавление чего-то действительно нового.

▪️Компилятор теперь не даёт компилировать код с суффиксами на индексах для кортежей и кортежных структур. Это было разрешено ранее по недосмотру.

▪️Добавили предупреждение на создание повисших указателей на локальные переменные. Сама по себе эта операция не является небезопасной, но на таком указателе определено очень мало осмысленных операций. Пример (из PR):

fn f() -> *const u8 {
let x = 0;
&x // returns a dangling ptr to `x`
}

⬇️
warning: a dangling pointer will be produced because the local variable `x` will be dropped
--> src/lib.rs:3:5
|
1 | fn f() -> *const u8 {
| --------- return type of the function is `*const u8`
2 | let x = 0;
| - `x` is part the function and will be dropped at the end of the function
3 | &x // returns a dangling ptr to `x`
| ^^
|
= note: pointers do not have a lifetime; after returning, the `u8` will be deallocated at the end of the function because nothing is referencing it as far as the type system is concerned
= note: `#[warn(dangling_pointers_from_locals)]` on by default


Анализ достаточно умный, чтобы понимать поток управления и цепочки кастов (примеры в тестах в PR).

▪️Компилятор теперь не выдаёт предупреждение о мёртвом коде на as-касты из выражений типа never. Да, это действительно мёртвый код, но в некоторых ситуациях подобные касты были нужны (главным образом для todo!() в функциях, возвращающих impl Trait).

▪️Уровень поддержки для Windows с нативным ABI на ARM (aarch64-pc-windows-msvc) подняли до Tier 1.

▪️Парочка дополнений насчёт потоков: попытка установки минимального размера стека теперь возвращает ошибку при невозможности это сделать вместо паники. Сообщение о панике теперь включает в себя ID потока, в котором её начали.

▪️Задокументировали разумное предположение о Clone и PartialEq/Eq, на которое опирается стандартная библиотека (главным образом коллекции): копия значения, полученная путём вызова .clone(), должна быть равна исходному значению (при условии, что исходное значение равно самому себе).

▪️Ещё одно дополнение к документации (и соответствующий фикс): функции {min, max, minmax}_by из std::cmp передают сравниваемые значения в функцию-компаратор в том же порядке, в котором они передаются в саму функцию.

▪️Стабилизировали громадное количество функций:
🔸 Path::file_prefix для извлечения порции имени файла до расширения. В отличие от существующей Path::file_stem, отрезает все расширения, а не только последнее:

assert_eq!("foo", Path::new("foo.tar.gz").file_prefix().unwrap());
assert_eq!("foo.tar", Path::new("foo.tar.gz").file_stem().unwrap());


🔸Несколько методов для модификации AtomicPtr.
🔸strict_*-методы на примитивных числах, которые паникуют при переполнении вне зависимости от профиля компиляции, включая методы для операций с различной знаковостью.
🔸uN::checked_signed_diff для вычисления знаковой разница беззнаковых чисел.
🔸array::repeat (в отличие от встроенного синтаксиса, работает не только с Copy-типами).
🔸Duration::from_mins и Duration::from_hours.
🔸BTreeMap::extract_if и BTreeSet::extract_if для ленивого вытаскивания из коллекций значений, удовлетворяющих предикату.
🔸str::ceil_char_boundary и str::floor_char_boundary.

▪️const TypeId::of 🎉🎉🎉

▪️У cargo теперь есть настройка для указывания того, куда складывать промежуточные артефакты компиляции.

▪️Для ключа --target в cargo теперь можно указывать значение host-tuple, которое будет заменено на target tuple для платформы, на которой проходит компиляция.
👍43🎉2
2025/11/01 04:16:15
Back to Top
HTML Embed Code: