#prog #rust #article
Rust: When Empty Isn't Bottom
Или почему
Rust: When Empty Isn't Bottom
Или почему
! в Rust не является bottom типом. TL;DR: в Rust нет отношения подтипизации для типов, не включающих лайфтаймы.❤4🤔2
#prog #java #article
JVM Anatomy Quark #23: Compressed References
Спека Java ничего не говорит о том, как представляются ссылки. Как следствие, реализации могут использовать представление ссылок, которые меньше указателя на машине. Статья описывает эти трюки.
Несколько неожиданное следствие: эти трюки работают только на достаточно маленьких кучах, поэтому выделение JVM большего количества памяти может привести к тому, что куча выйдет за этот предел, ссылки перестанут использовать компактное представление и потребление памяти многократно вырастет.
JVM Anatomy Quark #23: Compressed References
Спека Java ничего не говорит о том, как представляются ссылки. Как следствие, реализации могут использовать представление ссылок, которые меньше указателя на машине. Статья описывает эти трюки.
Несколько неожиданное следствие: эти трюки работают только на достаточно маленьких кучах, поэтому выделение JVM большего количества памяти может привести к тому, что куча выйдет за этот предел, ссылки перестанут использовать компактное представление и потребление памяти многократно вырастет.
🥴4🤔3
#prog #haskell #article
Type-level programming is still programming
TL;DR: вычисление типов, в отличие от вычисления термов, не является ленивым, и изменения в логике вычисления типов, не меняющее поведение, могут поменять асимптотику времени компиляции с экспоненциальной на линейную.
Type-level programming is still programming
TL;DR: вычисление типов, в отличие от вычисления термов, не является ленивым, и изменения в логике вычисления типов, не меняющее поведение, могут поменять асимптотику времени компиляции с экспоненциальной на линейную.
mchav.github.io
Type-level programming is still programming
I was showing a friend the typed dataframe API. The whole pitch was: look, you derive a schema from your data, and then the compiler catches column name typos, type mismatches, all the stuff that would otherwise blow up at runtime. I had a nice demo ready…
❤7👍2🔥1💩1
#prog #rust #article
Why building a Rust LSP is hard
Why building a Rust LSP is hard
This will be a (hopefully coherent) story about how Rust LSPs work, from the perspective of both rust-analyzer and Rust Glancer: how things that seem easy turn out to be hard, things that seem hard turn out to be even harder, and things I didn't expect to exist at all somehow do.
LSP is more of a guess game, where at each step all you are presented with is the potentially incorrect state, and your goal is to guess what would make sense for the user.
❤6💯2
#prog #article
Everyone Says Assembly Is Untyped—Everyone Is Wrong
Everyone Says Assembly Is Untyped—Everyone Is Wrong
TL;DR: I believe Odin’s inline assembly is currently the best out of any language.
The most important aspects are of this article listed below. I am not aware of any other assembly (GCC/Clang/Rust/Go…) that would combine all of these aspects:
* Inline assembly is organized into asm “templates”, similar to and callable as procedures.
* asm templates integrate with rest of the code, through bindings specifying clobbers, pinned, tied, and scratch registers.
* Assembly syntax is unified across ISAs and consistent with Odin syntax.
* Assembly is fully type checked, just like rest of Odin code.
* Understanding that assembly is actually typed.
* Real semantic diagnostics via core:rexcode encoding tables.
* It was built in ~7 days.
🤔6🥰3😱1
#prog #article
Steering Zig Fmt
TL;DR (но вообще заметка маленькая):
Steering Zig Fmt
TL;DR (но вообще заметка маленькая):
zig fmt не имеет the каноничного форматирования для кода, а опирается на указания в виде уже частично отформатированного кода и распространяет его на соседние семантически связанные строки.🤯16😁3🥴2🤔1
#prog #rust #article
Rewriting an entire UI in Rust
(С Tauri на Iced)
И рандомная цитата:
Rewriting an entire UI in Rust
(С Tauri на Iced)
So. Was it worth it?
I answer: Yes.
И рандомная цитата:
One would think, that the software known as Windows, would be good at managing windows. One would, of course, be wrong.
❤13😁7
#prog #rust #rustlib #article
Deser: Rethinking Rust Serialization
Статья про новую библиотеку (де)сериализации. Решает проблемы, которые есть в serde и которые очень сложно или почти невозможно решить из-за архитектуры.
Разумеется, это не строго лучше serde, и в статье подробно об этом рассказывается. В частности, в отличие от serde, deser поддерживает только self-describing форматы.
Deser: Rethinking Rust Serialization
Статья про новую библиотеку (де)сериализации. Решает проблемы, которые есть в serde и которые очень сложно или почти невозможно решить из-за архитектуры.
Разумеется, это не строго лучше serde, и в статье подробно об этом рассказывается. В частности, в отличие от serde, deser поддерживает только self-describing форматы.
Armin Ronacher's Thoughts and Writings
Deser: Rethinking Rust Serialization
Can we do better than Serde?
👍8❤1
#prog #rust #article
Generic Const Args and You
Статья о текущем состоянии экспериментальной поддержки констант в типовой системе Rust.
Generic Const Args and You
Статья о текущем состоянии экспериментальной поддержки констант в типовой системе Rust.
blog.rust-lang.org
Generic Const Args and You | Inside Rust Blog
Want to follow along with Rust development? Curious how you might get involved? Take a look!
❤7
commit -m "better"
Какой классный ход конем, чтобы добавить поддержку #jpeg_xl в Chromium!
#prog #article
Shipping JPEG XL in Chrome
Но в треде на r/rust пишут, что есть сомнения в эффективности нового формата. Именно, декомпрессия изображений, закодированных без потери информации, очень медленная.
Shipping JPEG XL in Chrome
Но в треде на r/rust пишут, что есть сомнения в эффективности нового формата. Именно, декомпрессия изображений, закодированных без потери информации, очень медленная.
Chrome for Developers
Shipping JPEG XL in Chrome | Blog | Chrome for Developers
JPEG XL offers better compression than JPEG, built-in HDR support, lossless JPEG transcoding, and more.
🤔2
#article
RISC-V: They Should Have Known Better
Несколько эмоциональная статья о недостатках набора инструкций RISC-V. Проняло даже меня, не смотря на то, что я в железе разбираюсь плохо.
В комментариях на этой же странице читатели написали, где автор был не до конца честен.
RISC-V: They Should Have Known Better
Несколько эмоциональная статья о недостатках набора инструкций RISC-V. Проняло даже меня, не смотря на то, что я в железе разбираюсь плохо.
В комментариях на этой же странице читатели написали, где автор был не до конца честен.
👍5🤔3❤1
#prog #rust #rustasync #article
Tokio Gives Progress, Not Ordering: Scheduling 1M Tasks
TL;DR:
Tokio Gives Progress, Not Ordering: Scheduling 1M Tasks
TL;DR:
Spawned early doesn't mean first-polled early. First-polled early doesn't mean completed early.
If there is an application-level unit of fairness you expect Tokio to honor, like the event in our case, the runtime doesn't know it exists. The bounds should be added by the application.
👍3🤔2
#prog #itsec #algo #article
Black-Box HashDoS: Attacking Hash Tables Without Knowing the Hash Function
Black-Box HashDoS: Attacking Hash Tables Without Knowing the Hash Function
In this article I will describe a novel technique that allows an attacker to pass attacker-chosen string keys to a hash table implementation such that each lookup query takes O(n) instead of the expected O(1) work. The attack takes O(n × log n) interactive steps with the hash table to prepare, and does not require knowledge of the hash function used by the hash table. Instead, the technique directly targets the underlying structure of the hash table.
Luckily these attacks as described are quite niche (requiring lookup, insert and clear access on a table without interference from others), and mitigations are possible. However, the attack isn’t purely theoretical, I construct a working attack against Rust’s standard library hash table implementation below.
🤔2🤷1
#prog #article
Superoptimizing an FPU emulator
TL;DR: для функции, которая изымает из числа с плавающей точкой самый младший бит и состоит из шести операций с if, полным перебором (что, собственно, и есть супероптимизация) нашли реализацию за пять операций без ветвления.
Superoptimizing an FPU emulator
TL;DR: для функции, которая изымает из числа с плавающей точкой самый младший бит и состоит из шести операций с if, полным перебором (что, собственно, и есть супероптимизация) нашли реализацию за пять операций без ветвления.
purplesyringa's blog
Superoptimizing an FPU emulator
Superoptimization is the process where a compiler automatically finds the optimal sequence for a loop-free sequence of instructions.
– Wikipedia
Compilers are good at making mechanical transformations that make code faster. Unfortunately, most of them are…
– Wikipedia
Compilers are good at making mechanical transformations that make code faster. Unfortunately, most of them are…
🔥21🎉3👍1
#prog #article #suckassstory
Jepsen — это компания (и название библиотеки на Clojure), которая занимается тестированием распределённых систем, главным образом баз данных. Она регулярно выпускает анализы различного софта. Эти анализы крайне полезны для раскрытия багов — особенно проявляющихся только в граничных случаях — и помогают проверить общий уровень софта, а также то, насколько заявленные гарантии транзакционности и сохранности данных соответствуют действительности.
ParticleDB — это "The database
for AI agents.". Поддерживает несколько интерфейсов, при этом также заявлена совместимость с Postgres на уровне wire format. Как нетрудно догадаться, навайбкожена.
В Jepsen провели анализ ParticleDB, оплаченный самими разработчиками. Поначалу авторы хотели проверить распределённые режимы работы, но очень быстро отказались от этих планов, ибо одной ноды с лихвой было достаточно, чтобы найти кучу багов. В их число входят: дедлок на двух транзакциях, зомби-строки, которые влияют на результаты запросов, но которые нельзя напрямую показать или удалить, исполнение запроса с
Jepsen — это компания (и название библиотеки на Clojure), которая занимается тестированием распределённых систем, главным образом баз данных. Она регулярно выпускает анализы различного софта. Эти анализы крайне полезны для раскрытия багов — особенно проявляющихся только в граничных случаях — и помогают проверить общий уровень софта, а также то, насколько заявленные гарантии транзакционности и сохранности данных соответствуют действительности.
ParticleDB — это "The database
for AI agents.". Поддерживает несколько интерфейсов, при этом также заявлена совместимость с Postgres на уровне wire format. Как нетрудно догадаться, навайбкожена.
В Jepsen провели анализ ParticleDB, оплаченный самими разработчиками. Поначалу авторы хотели проверить распределённые режимы работы, но очень быстро отказались от этих планов, ибо одной ноды с лихвой было достаточно, чтобы найти кучу багов. В их число входят: дедлок на двух транзакциях, зомби-строки, которые влияют на результаты запросов, но которые нельзя напрямую показать или удалить, исполнение запроса с
WHERE 4 = 5, потеря данных множеством различных способов и дофига другого. Качество софта настолько смехотворно плохое, что буквально каждый подраздел анализа можно цитировать напрямую. Серьёзно, почитайте, это смешно.The Postgres wire protocol usually authenticates clients using a username and password. ParticleDB had a--pg-passwordoption, but 1.1.4 through 1.1.18.8 lacked any option to set the username. Some of the documentation indicated the default username wasadmin, while other pages said it wasparticledb. Neither appeared to work; the only option was to use--no-authto disable authentication altogether.
🤣22👍4😁4❤1
#prog #article
tar-codec: a fast and secure tar parser for the Rust ecosystem
Статья про новую библиотеку для разбора tar, но также и про сам формат архива. tar — странный.
tar-codec: a fast and secure tar parser for the Rust ecosystem
Статья про новую библиотеку для разбора tar, но также и про сам формат архива. tar — странный.
astral.sh
tar-codec: a fast and secure tar parser for the Rust ecosystem
We're releasing tar-codec, a new tar encoding/decoding library for Rust. tar-codec is already the default in uv, and improves uv's tar handling performance by over 2x while also improving our posture against archive differentials.
👍7🤔1
#prog #article
You can't bug fix your way out of the vulnpocalypse
You can't bug fix your way out of the vulnpocalypse
If you see the vulnpocalypse coming for you, the most important thing you can do is channel it into systemic fixes. The alternative is letting a crisis go to waste, and drowning under the weight of a massive number of vulnerabilities.
❤🔥4🤔2