#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
Парочка постов от команды crates.io.
A tale of broken badges and 23,000 features, или как отсутствие лимитов немного сломало сторонний сервис.
crates.io: Dropping support for non-canonical downloads — о планах отказаться от возможности скачивать одно и то же по разным именам вроде serde-derive, serde_derive и SerDE_DErive.
A tale of broken badges and 23,000 features, или как отсутствие лимитов немного сломало сторонний сервис.
crates.io: Dropping support for non-canonical downloads — о планах отказаться от возможности скачивать одно и то же по разным именам вроде serde-derive, serde_derive и SerDE_DErive.
blog.rust-lang.org
A tale of broken badges and 23,000 features | Rust Blog
Empowering everyone to build reliable and efficient software.
👍4🤯1
#prog #article
Читатели моего блога, скорее всего, знакомы с понятием Boolean blindness. Если коротко: это обозначение ситуации, когда использование булевых значений приводит к проблемам из-за того, что семантика true и false в значительной степени зависит от контекста.
Несколько менее очевидно (по крайней мере, до ознакомления), что подобная проблема не специфична для булевских значений. Похожие неприятности могут возникнуть и с другими недостаточно доменно-специфичными сумм-типами. Подробнее об этом рассказывается в статье Algebraic blindness.
Читатели моего блога, скорее всего, знакомы с понятием Boolean blindness. Если коротко: это обозначение ситуации, когда использование булевых значений приводит к проблемам из-за того, что семантика true и false в значительной степени зависит от контекста.
Несколько менее очевидно (по крайней мере, до ознакомления), что подобная проблема не специфична для булевских значений. Похожие неприятности могут возникнуть и с другими недостаточно доменно-специфичными сумм-типами. Подробнее об этом рассказывается в статье Algebraic blindness.
The Lumber Room
Boolean blindness
(Just digesting the first page of Google search results.) One of the lessons from functional programming is to encode as much information as possible into the types. Almost all programmers understa…
👍6