1.96K subscribers
3.84K photos
147 videos
15 files
4.02K links
Блог со звёздочкой.

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

Небольшое прикольное комьюнити: @decltype_chat_ptr_t
Автор: @insert_reference_here
Download Telegram
#prog #article

Stop Using Conventional Commits (перевод)

TL;DR: автор считает, что разбиение коммитов по категориям на практике мало полезно и для всех практических целей лучше указывать разделы софта, затронутые изменением — поле, которое в формате conventional commits является опциональным.
Также автор разбирает каждый пункт списка доводов в пользу conventional commits и опровергает их.
💯9
#prog #rust #article

Only Bounds

Статья о грядущих изменениях в Rust, которые позволят добавить новые иерархии трейтов по умолчанию (помимо существующего сейчас Sized). Работа ведётся главным образом ради поддержки Scalable Vector/Matrix Extensions — набора инструкций для процессоров ARM, который позволяет писать SIMD-код, не завязанный на конкретную ширину SIMD-регистров и потому переносимый между разными процессорами без перекомпиляции. Помимо этого, Нико показывает, что only bounds также открывают путь другим, более абмициозным дополнениям в язык. В частности, это в теории позволит писать код, который опирается на гарантированные вызовы деструкторов (без этого сейчас невозможно написать безопасный scoped async).
🔥161
#prog #rust #meme

Range is Range

Source
🤔10😁5🤷2🫡1
#prog #csharp #suckassstory

C# — пример того, как не надо делать язык программирования.

C# очень странно относится к затенению переменных. Обычно он это запрещает. Вот такой код, например, не компилируется:

string x = "Hi";

if (true) {
string x = "Bye";
}


Вывод компилятора:

error CS0136: A local or parameter named 'x' cannot be declared in this scope because that name is used in an enclosing local scope to define a local or parameter

Тут в if-блоке вводится новая переменная, которая перекрывает переменную выше. Однако компилятор C# (и это поведение описано в спецификации) смотрит только на включение имён в областях видимости, но не на то, когда они объявлены! Если переставить два оператора местами, код всё равно не компилируется:

if (true) {
string x = "Bye";
}

string x = "Hi";


Также нельзя написать код, который перекрывает параметр метода:

void method(int x) {
int x = 10; // Ошибка
}


Однако можно написать метод, который затеняет... Поля класса! Причём и локальными переменными, и аргументами:

class C {
int x;
int y;
void m(int y /* ок */) {
int x = 10; // тоже ок
}
}


...но только до тех пор, пока поля класса не упоминаются в области видимости. Если упоминаются, то нельзя переиспользовать их имена:

using System;

class C {
int x;
void m() {
Console.WriteLine(x);
int x = 10; // Ошибка
}
}


...но можно во вложенных областях видимости:

using System;

class C {
int x;
void m() {
Console.WriteLine(x);
{
int x = 10; // ок
}
}
}


Какой простой, консистентный и полезный набор правил!

BTW раньше было ещё хуже.
💯15😁7💩3
#prog #article

zlib-rs in Firefox

Как ни странно, одним из препятствий на пути к внедрению был... Баг процессора, который проявлялся в том, что одна редкоиспользуемая инструкция могла исполняться некорректно. Ловили долго.
🤔3
#prog #rust #swift #amazingopensource

swift-bridge makes it easy to pass and share high-level types between Rust and Swift, such as String, Option<T>, Result<T, E>, struct, class and more.
It also helps you bridge higher level language features, such as async functions and generics.
Using swift-bridge should be safer, more performant and more ergonomic than managing Rust and Swift FFI by hand.
2👍1
#prog #rust #article

Building software for places where the internet barely exists

Статья о программе для синхронизации данных в условиях, когда соединение медленное и крайне ненадёжное. Нацелено на решение крайне практической задачи: связи между поликлинниками в Бутане. Технически связь есть, но 2G, и в силу множества причин связь часто обрывается, порой на несколько дней. Починка инфраструктуры — дело сложное из-за горного ландшафта, где ещё и дороги регулярно размывает дождями. Написанный автором ZamSync позволяет надёжно реплицировать данные даже в таких условиях. В статье также есть сравнения с уже существующими решениями.
👍18❤‍🔥1
#prog #article

How to miscompile programs with “benign” data races

Или как "безвредные" гонки данных могут быть вредить программе в контексте легальных оптимизаций компиляторов.

И вдогонку

Benign Data Races: What Could Possibly Go Wrong?

Тоже с конкретными примерами.
🤔21🤬1
#prog #rust #article

How we found a bug in the hyper HTTP library

None of the tools at the application level surfaced any errors, crashes, or log entries that provided useful clues. Application-level observability can have a blind spot for bugs that live below its awareness.

The failure occurred intermittently, scaled with response size, couldn’t be reproduced with simple tools like curl, and disappeared when we observed the system more closely. These signals pointed to a timing-dependent bug in the connection layer, not in the application logic.

Our breakthrough came from using kernel-level tooling with strace, the one layer that records what actually happened on the socket. The underlying bug lived in the few milliseconds between a partial flush and a premature shutdown — a window that opened only after we made the system faster.


Баг присутствовал в нескольких мажорных версиях hyper и, что иронично, проявился в Cloudflare из-за, в конечном счёте, оптимизаций архитектуры. А ещё это хорошее напоминание, что Rust защищает от гонок данных, но не от состояния гонок в целом.
👍7
#prog #rust #article #successstory

Rust PNG crate gets even faster, used by GNOME and Chromium

Rust png crate, also known as image-png, implements PNG encoding and decoding in safe Rust. It is compliant with the third edition of the PNG specification, including APNG support.
A year ago it was already the fastest PNG decoder in the world. Since then it has gotten even faster.

<...>

image-png is used as the default PNG implementation in Chromium since M139 (August 2025) across all platforms [выделение моё], both on desktop and on mobile.

This required meeting a remarkably high bar in terms of features, performance, correctness, compatibility and security. It would only ship if there were no regressions in any of those categories!
🔥7