Новости

Post Thumbnail

Мышь для хранения

Почему бы не использовать мышь как хранилище информации? Идея простая и гениальная. Автор экспериментировал с идеей использования памяти беспроводной мыши Logitech MX Vertical для хранения данных, путешествующих между компьютерами. Изучив протокол HID и нап...

Post Thumbnail

Физика для Bevy

Вышла новая версия физического движка Avian Physics для игрового фреймворка Bevy. Ключевое нововведения - это реализацию алгоритма move-and-slide для создания кинематических контроллеров персонажа и значительная оптимизация производительности за счёт испол...

Post Thumbnail

Условная реализация

В Rust существует возможность условно реализовывать методы и трейты для обобщенных типов - такие реализации существуют только если параметры типа удовлетворяют определенным требованиям, например, реализуют трейт Clone. Это широко используется в стандартной биб...

Post Thumbnail

HKT

В статье автор экспериментирует с эмуляцией высших типов (HKTs) в Rust через обобщенные ассоциированные типы (GATs), пытаясь абстрагировать обертки для AST. Оказывается, в Rust это не так просто сделать. Решение в лоб приводит к рекурсивному определению типа, ...

Post Thumbnail

Airtable и Rust

Команда Airtable переписала ядро своей проприетарной базы данных с TypeScript на Rust, чтобы справиться с возросшими нагрузками. Исходная TypeScript-версия упиралась в ограничения многопоточности и управления памятью. Новый движок на Rust позволил вынести ...

Post Thumbnail

Allocator

В Rust есть трейт Allocator. И спустя почти десять лет после принятия соответствующего RFC он все еще не стабилизирован. Allocator нужен для того, чтобы дать разработчикам контроль над тем, как именно выделяется и освобождается память для стандартных коллек...

Post Thumbnail

Indirection

Я с удивлением узнал, что в Rust-сообществе есть уверенность в том, что любая дополнительная функция (особенно асинхронная) якобы создаёт критическую нагрузку на производительность, и поэтому код всегда лучше писать инлайн. Это же дичь какая-то. В статье ав...

Post Thumbnail

Ply

Автор написал свой GUI Rust-фреймворк Ply. Сначала он попробовал существующие решения, но столкнулся с недостатками при создании своей многопользовательской игры. Он критикует популярные инструменты: Bevy - сложная ECS-архитектура, Iced и egui - нечитаемы...

Post Thumbnail

Давление на память

В статье автор рассказывает как его команда оптимищировала производительность списка комнат в Matrix Rust SDK, где они столкнулись с проблемой "замерзания". Расследование показало, что проблема была вызвана комбинацией двух факторов: высоким давлением на п...

Post Thumbnail

Уволить за структуру

В статье рассказывается про неожиданную но прикольную проблему производительности в обработчике потоковых данных Feldera, вызванную неэффективной сериализацией Rust-структур. Эти структуры генерировались из SQL-таблиц с сотнями Optional колонок, что при ис...

Post Thumbnail

Футуры

В статье автор разбирает проблему "засыпания" (snoozing) футур в асинхронном Rust - ситуации, когда футура готов к выполнению, но не опрашивается, что приводит к зависаниям и взаимным блокировкам. Автор сравнивает это с опасными практиками в многопоточном прог...

Post Thumbnail

Rust это как Haskell

Нашел статью аж 2023 года, но занимательную В статье автор сравнивает Rust и Haskell, и утверждает, что знание одного из них дает преимущество при изучении другого благодаря общим концепциям, унаследованным от ML. И там и там сильная статическая типизация, ...

Post Thumbnail

Verifpal

Verifpal - это программа, которая помогает разработчикам и студентам проверять, на самом ли деле защищённые протоколы связи являются безопасными и не содержат ошибок. Например, можно проверить как работает шифрование в WhatsApp или Signal Так вот, разрабы о...

Post Thumbnail

Нет JS, да Rust

Rust потихоньку подминает под себя всю экосистему JavaScript-инструментов. Он быстрый, жрет мало памяти и не парится со сборщиком мусора. Идеальный кандидат, чтобы переписать на нем старые добрые Babel, Webpack, ESLint и Prettier, сделав их в разы быстрее. ...

Post Thumbnail

RwLock

Автор решил ускорить кэш с помощью RwLock, но получил неожиданный результат - код стал работать в 5 раз медленнее, чем с обычным мьютексом. В чём подвох? Оказалось, что даже "чтение" за кулисами заставляет ядра процессора драться за счётчик читателей. Пред...

Post Thumbnail

Делаем свои блокировки

В своей книге Rust Atomics and Locks Мара Бос буквально конструирует мьютекс с нуля, шаг за шагом. Она подробно объясняет устройство атомиков, блокировок, спинлоков и очередей ожидания, раскрывая, почему всё это работает именно так, а не иначе. После этой книг...

Post Thumbnail

ublk

В Linux 6+ появился новый фреймворк ublk, который позволяет создавать виртуальные блочные устройства прямо в user space, без написания драйвера в ядре. Теперь можно сделать свой собственный "диск", например, из файла, из сети или из кастомного storage, добавив...

Post Thumbnail

Неймспейсы пакетов

Эндрю Несбитт разобрал, как устроены имена пакетов в разных менеджерах и почему это та ещё головная боль. В плоском неймспейсе (как в PyPI или RubyGems) всё просто: кто первый встал - того и тапки, поэтому у нас есть крутые короткие имена вроде rails. Но хорош...

Post Thumbnail

Кастомные ошибки

Надоело городить бесконечные match для обработки ошибок в каждом обработчике Axum? Автор тоже устал от этих повторений и предлагает элегантное решение: создать свой тип-обертку AppError над anyhow::Error и реализовать для него пару волшебных трейтов (IntoRespo...

Post Thumbnail

Аллокаторы

Автор рассказывает, как устроены аллокаторы памяти в современных языках вроде Rust, Zig, Odin и C3, где они являются "гражданами первого сорта". В каждом модном языке своя фишка: в Rust глобальный аллокатор по умолчанию (хоть и не указано какой), в Zig аллокат...

Post Thumbnail

Идентификация процесса

Проcтая задача для сетевого снифера - возможность понимать, какая именно программа стучится в сеть. Но не тут-то было. Задача обернулась для автора и разработчика Sniffnet настоящим квестом на пару лет. Во-первых, каждая операционная система хранит информац...