Блог*
Подписчики, а какие вы знаете IDL (interface definition languages) с поддержкой сумм-типов?
#prog #rust #typescript #amazingopensource
Typical — IDL, который предоставляет одновременно:
* типобезопасность
* бинарную совместимость между схемами разных версий
* СУММ-ТИПЫ
* обязательные поля в схеме (я смотрю на тебя, Protobuf)
* возможность постепенно мигрировать поля из статуса опциональных в статус обязательных и наоборот
В Readme подробнее рассказывается, как достигается последний пункт за счёт новой концепции ассиметричных полей. Из недостатков можно отметить разве что небольшое число бекендов: пока что Typical умеет генерировать код только для Rust и Typescript.
(thanks @ployd)
Typical — IDL, который предоставляет одновременно:
* типобезопасность
* бинарную совместимость между схемами разных версий
* СУММ-ТИПЫ
* обязательные поля в схеме (я смотрю на тебя, Protobuf)
* возможность постепенно мигрировать поля из статуса опциональных в статус обязательных и наоборот
В Readme подробнее рассказывается, как достигается последний пункт за счёт новой концепции ассиметричных полей. Из недостатков можно отметить разве что небольшое число бекендов: пока что Typical умеет генерировать код только для Rust и Typescript.
(thanks @ployd)
GitHub
GitHub - stepchowfun/typical: Data interchange with algebraic data types.
Data interchange with algebraic data types. Contribute to stepchowfun/typical development by creating an account on GitHub.
👍6🤔2👎1
Блог*
#music "Doom is a game where you have a boss music" youtu.be/watch?v=kpnW68Q8ltc
YouTube
The Only Thing They Fear is You // Doom (Medieval / Bardcore Style)
Probably what Doom guy would listen to if he built a medieval castle in Hell. I can see him with his feet up by a never-ending demon fire. Took 2 acoustic guitars with some hurdy gurdys, strings & big booming drums to transport this Doom Eternal classic into…
❤3
Блог*
Photo
Первая попытка дальнейшего вознесения провалилась из-за того, что я был слишком медлителен и позволил Вечному (Long в оригинальных терминах) набрать достаточно мощи, чтобы начать атаковать меня напрямую и в итоге затыкать насмерть.
А что стало со второй попыткой? Она кончилась куда быстрее из-за... Болезни. Просто несколько глаголов Болезни подряд, которые скопились быстрее, чем я успевал отлечиться.
Я был несколько... Фрустрирован таким приземлённым исходом. Особенно с учётом того, насколько легко от этого обычно защититься.
А что стало со второй попыткой? Она кончилась куда быстрее из-за... Болезни. Просто несколько глаголов Болезни подряд, которые скопились быстрее, чем я успевал отлечиться.
Я был несколько... Фрустрирован таким приземлённым исходом. Особенно с учётом того, насколько легко от этого обычно защититься.
👍4👎1
#prog #rust #serde #rustlib
ijson — более эффективная по памяти альтернатива serde_json::Value.
This crate offers a replacement for
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
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).crates.io
crates.io: Rust Package Registry
❤5🤣1
Что ж, мне приснился кошмар. Давно такого не было.
С другой стороны, если мне вдруг понадобится написать хоррор — то, что мне приснилось, кажется, достаточно пугающе, чтобы напугать не только меня.
С другой стороны, если мне вдруг понадобится написать хоррор — то, что мне приснилось, кажется, достаточно пугающе, чтобы напугать не только меня.
💔5😱2
Блог*
#game Есть такой человек — Барт Бонте, независимый разработчик видеоигр из Бельгии. Его игры не всегда выглядят гладко, но у них, как правило, геймплей со многими нестандартными идеями и неизменно хорошая музыка. Среди игр, которых он сделал, несколько особняком…
С момента последнего обновления вышли green, pink и orange
Сообщение не поддерживается Вашей версией Telegram. Пожалуйста, обновите приложение, чтобы его увидеть: https://telegram.org/update
🖕29🤡6😁5👌5
#prog #rust хайлайты:
▪️Парсер теперь обнаруживает попытку написать лямбду в синтаксисе Ruby и предлагает изменения для того, чтобы сделать код компилируемым.
▪️❗️❗️❗️Теперь непосредственно разыменовывание невалидных указателей не является UB. Вместо этого UB возникает при попытке воспользоваться результатом разыменовывания подобного указателя или при попытке совершить на результате арифметику указателей (доступ по полю тоже считается).
Главным образом это позволяет безусловно использовать
▪️Компилятор теперь проверяет негативные литералы в range pattern на переполнение.
▪️Stabilize const_maybe_uninit_assume_init_read.
▪️Реализован BufRead для VecDeque<u8>.
▪️Для слайсов реализованы методы {, r}split_once с семантикой, аналогичной таким же методам на строке.
▪️Линт на отсутствующие реализации
▪️#[repr(Rust)] теперь не совместим с иными #[repr]-атрибутами, кроме packed и aligned. Да, до этого фикса можно было написать
▪️Компилятор теперь предлагает добавить ?Sized на ассоциированный тип в случаях, когда мешает неявное ограничение
▪️Компилятор теперь диагностирует код вида println!("{x}", x);.
▪️Метод Option::unwrap_or_else получил атрибут #[track_caller].
▪️Парсер теперь обнаруживает попытку написать лямбду в синтаксисе 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].
GitHub
Detect ruby-style closure in parser by estebank · Pull Request #116645 · rust-lang/rust
When parsing a closure without a body that is surrounded by a block, suggest moving the opening brace after the closure head.
Fix #116608.
Fix #116608.
❤4
Блог*
#prog #rust #dotnet #abnormalprogramming Compiling Rust for .NET, using only tea and stubbornness!
#prog #rust #dotnet #article
Автор продолжил заниматься своим проектом и планирует превратить его в полноценный бекенд для кодогенерации. С момента выпуска Compiling Rust for .NET, using only tea and stubbornness! автор опубликовал три заметки, рассказывающие о прогрессе имплементации:
Enumerating over Generics — рассказывает о том, как
Надо отметить, что сумм-типы есть и в F#, который также транслируется в CIL, но там отличается подход к реализации: сумм-типы всегда хранят все поля всех вариантов. Автор же определяет вложенные структуры для каждого варианта перечисления и хранит в сгенерированном коде дискриминант, а также все варианты с одним смещением от начала структуры — фактически, реимплементация паттерна tagged union.
Mixing C# and Rust - Interop — рассказывает о реализуемой автором библиотеке mycorrhiza для интеропа между Rust и C#. Показывает прекрасный пример, когда пригождаются
Mischievous miscompilations — рассказывает о нюансах перевода из MIR в CIL. Задача сложна тем, что MIR — это IR в SSA, не завязанный на конкретную архитектуру процессора, в то время как CIL является ассемблером для стековой машины. Дополнительные сложности также возникают из-за контекстной зависимости семантики инструкций CIL.
Автор продолжил заниматься своим проектом и планирует превратить его в полноценный бекенд для кодогенерации. С момента выпуска 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.
❤6