1.85K subscribers
3.27K photos
130 videos
15 files
3.54K links
Блог со звёздочкой.

Много репостов, немножко программирования.

Небольшое прикольное комьюнити: @decltype_chat_ptr_t
Автор: @insert_reference_here
Download Telegram
Forwarded from shitposting 3.0 [+ dragons]
👍6😁3🔥1🙏1
Блог*
Подписчики, а какие вы знаете IDL (interface definition languages) с поддержкой сумм-типов?
#prog #rust #typescript #amazingopensource

Typical — IDL, который предоставляет одновременно:

* типобезопасность
* бинарную совместимость между схемами разных версий
* СУММ-ТИПЫ
* обязательные поля в схеме (я смотрю на тебя, Protobuf)
* возможность постепенно мигрировать поля из статуса опциональных в статус обязательных и наоборот

В Readme подробнее рассказывается, как достигается последний пункт за счёт новой концепции ассиметричных полей. Из недостатков можно отметить разве что небольшое число бекендов: пока что Typical умеет генерировать код только для Rust и Typescript.

(thanks @ployd)
👍6🤔2👎1
Стрипнутая динамическая библиотека
8😁8💩1
Forwarded from shitposting 3.0 [+ dragons]
😁173👍1
Forwarded from shitposting 3.0 [+ dragons]
15😁10
😒🤚 Winning at life
😏👉 Whining at life
😢10🌚3
Блог*
Photo
Первая попытка дальнейшего вознесения провалилась из-за того, что я был слишком медлителен и позволил Вечному (Long в оригинальных терминах) набрать достаточно мощи, чтобы начать атаковать меня напрямую и в итоге затыкать насмерть.

А что стало со второй попыткой? Она кончилась куда быстрее из-за... Болезни. Просто несколько глаголов Болезни подряд, которые скопились быстрее, чем я успевал отлечиться.

Я был несколько... Фрустрирован таким приземлённым исходом. Особенно с учётом того, насколько легко от этого обычно защититься.
👍4👎1
😶
🤣9😁5👍2🥰21
😁1
Дайс D4, когда на него наступают, очевидно, наносит 1d4 урона 🤔
🥴13👍2
#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).
5🤣1
🤔3🤣2🌚1
Что ж, мне приснился кошмар. Давно такого не было.

С другой стороны, если мне вдруг понадобится написать хоррор — то, что мне приснилось, кажется, достаточно пугающе, чтобы напугать не только меня.
💔5😱2
Сообщение не поддерживается Вашей версией Telegram. Пожалуйста, обновите приложение, чтобы его увидеть: https://telegram.org/update
🖕29🤡6😁5👌5
👍123
#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].
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 — рассказывает о том, как 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