Linker Unsafe
Тут народ подсказывает, что в Котлине есть нехилая такая дыра в типобезопасности: https://twitter.com/kotlin/status/1276083456854941697
#prog #kotlin
Говорят, что в Kotlin таки будет деструктуризация по именам. Даже какое-то шевеление в трекере есть.
Всё ещё не отвечает на вопрос, почему только сейчас.
Говорят, что в Kotlin таки будет деструктуризация по именам. Даже какое-то шевеление в трекере есть.
Всё ещё не отвечает на вопрос, почему только сейчас.
Medium
Kotlin 2.4 Introduces Name-based Destructuring: Stop Guessing Which Variable Goes Where
Good news, Kotlin fans! The upcoming name-based destructuring feature is coming to Kotlin 2.4, and it’s going to save us from that…
🤣4❤2🤔1
#prog #article
Why SSA?
Содержит кусочки теории графов.
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
Вы когда-нибудь видели, как зевает лягушка?
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.
YouTube
Good Morning, Potato Fairy!
Do you know Common Rain Frog?
https://en.wikipedia.org/wiki/Breviceps_adspersus
Music:Le Coquin
Song by Bob Hart
https://artlist.io/song/97319/le-coquin
https://en.wikipedia.org/wiki/Breviceps_adspersus
Music:Le Coquin
Song by Bob Hart
https://artlist.io/song/97319/le-coquin
🥰7❤1
Forwarded from Техножрица 👩💻👩🏫👩🔧
Сижу себе спокойно, пишу ревью на препринты, поданные на ICLR 2026... как вдруг один из них внезапно приоткрывает предо мною настоящую бездну в виде блок-схемы на рис. 1 (в статье это тоже Fig.1).
Как вам такой пайплайн, друзья? Рекомендую вглядеться в картинку повнимательнее, особенно в правую её часть. Через какое-то время вглядывания вам начнет казаться, что картинка тоже в вас вглядывается - механическими глазами диффузионного генератора. #генерация
Как вам такой пайплайн, друзья? Рекомендую вглядеться в картинку повнимательнее, особенно в правую её часть. Через какое-то время вглядывания вам начнет казаться, что картинка тоже в вас вглядывается - механическими глазами диффузионного генератора. #генерация
😁8🍌6🤯4🤩1
#prog #rust #rustreleasenotes
Вышла версия Rust 1.91.0! Как всегда, тут только избранные части, всё остальное — в детальных заметках о релизе.
Если бы этот релиз можно было описать одним словом, то это было бы слово "полировка": релиз скорее про улучшение уже существующих фич и стабилизацию старых, давно бывших в nightly, чем про добавление чего-то действительно нового.
▪️Компилятор теперь не даёт компилировать код с суффиксами на индексах для кортежей и кортежных структур. Это было разрешено ранее по недосмотру.
▪️Добавили предупреждение на создание повисших указателей на локальные переменные. Сама по себе эта операция не является небезопасной, но на таком указателе определено очень мало осмысленных операций. Пример (из PR):
⬇️
Анализ достаточно умный, чтобы понимать поток управления и цепочки кастов (примеры в тестах в PR).
▪️Компилятор теперь не выдаёт предупреждение о мёртвом коде на
▪️Уровень поддержки для Windows с нативным ABI на ARM (aarch64-pc-windows-msvc) подняли до Tier 1.
▪️Парочка дополнений насчёт потоков: попытка установки минимального размера стека теперь возвращает ошибку при невозможности это сделать вместо паники. Сообщение о панике теперь включает в себя ID потока, в котором её начали.
▪️Задокументировали разумное предположение о
▪️Ещё одно дополнение к документации (и соответствующий фикс): функции
▪️Стабилизировали громадное количество функций:
🔸 Path::file_prefix для извлечения порции имени файла до расширения. В отличие от существующей Path::file_stem, отрезает все расширения, а не только последнее:
🔸Несколько методов для модификации
🔸
🔸uN::checked_signed_diff для вычисления знаковой разница беззнаковых чисел.
🔸array::repeat (в отличие от встроенного синтаксиса, работает не только с
🔸Duration::from_mins и Duration::from_hours.
🔸BTreeMap::extract_if и BTreeSet::extract_if для ленивого вытаскивания из коллекций значений, удовлетворяющих предикату.
🔸str::ceil_char_boundary и str::floor_char_boundary.
▪️
▪️У cargo теперь есть настройка для указывания того, куда складывать промежуточные артефакты компиляции.
▪️Для ключа
Вышла версия 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 для платформы, на которой проходит компиляция.blog.rust-lang.org
Announcing Rust 1.91.0 | Rust Blog
Empowering everyone to build reliable and efficient software.
👍4❤3🎉2
