Блог*
Open in Telegram
Блог со звёздочкой. Много репостов, немножко программирования. Небольшое прикольное комьюнити: @decltype_chat_ptr_t Автор: @insert_reference_here
Show more1 928
Subscribers
+324 hours
+57 days
-630 days
Posts Archive
1 926
#prog #rust #csharp
Автор продолжил заниматься своим проектом и планирует превратить его в полноценный бекенд для кодогенерации. С момента выпуска Compiling Rust for .NET, using only tea and stubbornness! автор опубликовал три заметки, рассказывающие о прогрессе имплементации:
Enumerating over Generics — рассказывает о том, как
enum и дженерики из Rust транслируются в CIL. Автор решил реализовать дженерики Rust как дженерики C# (т. е. без мономорфизации на этапе компиляции). Важная вещь, потому как без этого нельзя скомпилировать никакой из циклов for в Rust.
Надо отметить, что сумм-типы есть и в F#, который также транслируется в CIL, но там отличается подход к реализации: сумм-типы всегда хранят все поля всех вариантов. Автор же определяет вложенные структуры для каждого варианта перечисления и хранит в сгенерированном коде дискриминант, а также все варианты с одним смещением от начала структуры — фактически, реимплементация паттерна tagged union.
Mixing C# and Rust - Interop — рассказывает о реализуемой автором библиотеке mycorrhiza для интеропа между Rust и C#. Показывает прекрасный пример, когда пригождаются &str в const generics. В настоящий момент открытая проблема — как предотвратить утекание ссылок на управляемую кучу в неуправляемую кучу.
Mischievous miscompilations — рассказывает о нюансах перевода из MIR в CIL. Задача сложна тем, что MIR — это IR в SSA, не завязанный на конкретную архитектуру процессора, в то время как CIL является ассемблером для стековой машины. Дополнительные сложности также возникают из-за семантической контекстной зависимости инструкций CIL.1 926
#prog #rust хайлайты:
▪️Парсер теперь обнаруживает попытку написать лямбду в синтаксисе Ruby и предлагает изменения для того, чтобы сделать код компилируемым.
▪️❗️❗️❗️Теперь непосредственно разыменовывание невалидных указателей не является UB. Вместо этого UB возникает при попытке воспользоваться результатом разыменовывания подобного указателя или при попытке совершить на результате арифметику указателей (доступ по полю тоже считается).
Главным образом это позволяет безусловно использовать
addr_of!(*ptr) без вызова UB, паттерн, который встречается в реальном коде.
▪️Компилятор теперь проверяет негативные литералы в range pattern на переполнение.
▪️Stabilize const_maybe_uninit_assume_init_read.
▪️Реализован BufRead для VecDeque<u8>.
▪️Для слайсов реализованы методы {, r}split_once с семантикой, аналогичной таким же методам на строке.
▪️Линт на отсутствующие реализации Copy теперь не триггерится на #[non_exhaustive] типах.
▪️#[repr(Rust)] теперь не совместим с иными #[repr]-атрибутами, кроме packed и aligned. Да, до этого фикса можно было написать #[repr(Rust, C)].
▪️Компилятор теперь предлагает добавить ?Sized на ассоциированный тип в случаях, когда мешает неявное ограничение Sized.
▪️Компилятор теперь диагностирует код вида println!("{x}", x);.
▪️Метод Option::unwrap_or_else получил атрибут #[track_caller].1 926
Сообщение не поддерживается Вашей версией Telegram. Пожалуйста, обновите приложение, чтобы его увидеть: https://telegram.org/update
1 926
Что ж, мне приснился кошмар. Давно такого не было.
С другой стороны, если мне вдруг понадобится написать хоррор — то, что мне приснилось, кажется, достаточно пугающе, чтобы напугать не только меня.
1 926
#prog #rust #serde #rustlib
ijson — более эффективная по памяти альтернатива serde_json::Value.
This crate offers a replacement for
serde-json’s Value type, which is significantly more memory efficient.
As a ballpark figure, it will typically use half as much memory as serde-json when deserializing a value and the memory footprint of cloning a value is more than 7x smaller.
The primary type exposed by this crate is the IValue type. It is guaranteed to be pointer-sized and has a niche (so Option<IValue> is also guaranteed to be pointer-sized).1 926
Первая попытка дальнейшего вознесения провалилась из-за того, что я был слишком медлителен, позволил Вечному (Long в оригинальных терминах) набрать достаточно мощи, чтобы начать атаковать меня напрямую и в итоге затыкать насмерть.
А что стало со второй попыткой? Она кончилась куда быстрее из-за... Болезни. Просто несколько глаголов Болезни подряд, которые скопились быстрее, чем я успевал отлечиться.
Я был несколько... Обижен таким приземлённым исходом.
Available now! Telegram Research 2025 — the year's key insights 
