Хочу сразу пояснить, что я лично пишу на Go уже около 10 лет и уходить от него не планирую. Но тем не менее мне интересно мнение других разработчиков, которые работают или работали с Go на больших проектах. Во многом я согласен с недостатками Go, описанными ниже, так как сам сталкиваюсь с этими проблемами и на не самых больших проектах. Вот мой перевод статьи.

Rust *
Мультипарадигмальный компилируемый язык
Сломанный PartialEq и Ord: как один лишний derive ломает сортировку

Привет, Хабр!
Сегодня рассмотрим, как один единственный #[derive(Ord)]
, казалось бы безобидный, может сломать сортировку, нарушить контракт PartialEq
, и вызвать странные баги в BTreeMap
, .sort()
, или даже в логике dedup.
Как работает Cargo

Привет, Хабр!
На дворе 2025, и у каждого языка свой подход к сборке, зависимостям и публикации. В Rust за это отвечает Cargo — инструмент, который берёт на себя всё: от менеджмента зависимостей до тестов, бенчмарков и выкладки на crates.io.
И вот это мы и рассмотрим в статье: как устроен Cargo изнутри, зачем нужен Cargo.toml
, как подключать зависимости, куда падают артефакты сборки, что делает cargo check
, как запускать и бенчмаркать, и как наконец создать свой крейт на crates.io.
Своя эргономичная клавиатура: 3D-печать, пайка и немного самописной прошивки

Зима 2024, в процессе думскроллинга фида реддита я в очередной раз натыкаюсь на пост про hand‑wired эргономичную клавиатуру. В целом я не испытывал особого дискомфорта при использовании обычных клавиатур, но сама концепция привлекала — возможно, своей относительной экзотичностью на фоне «традиционных» клавиатур. Готовые клавиатуры такого формата есть в продаже, но эта опция была быстро отброшена — банально дорого — дешевых вариантов на тот момент особо не было. Прикинув, что до отпуска осталось не так и долго я загорелся идеей — а почему бы, собственно, не попробовать сделать подобную клавиатуру в свободное время?
Rust и FFmpeg: новый способ создания пользовательских видеофильтров

FFmpeg — это мощный инструмент для работы с мультимедиа, который используют для кодирования, декодирования, перекодирования и применения фильтров к видео и аудио. Но если вы работаете с Rust, интеграция с C API FFmpeg может стать настоящей головной болью: управление памятью, проблемы безопасности и крутая кривая обучения. Особенно сложно реализовать пользовательские фильтры — для этого обычно нужно писать код на C и разбираться во внутренностях FFmpeg. А что, если я скажу, что с Rust и библиотекой ez-ffmpeg вы можете забыть про эти трудности и писать фильтры прямо на любимом языке?
В этой статье мы разберём, как использовать Rust и ez-ffmpeg для создания собственных видеофильтров. Мы начнём с основ, дойдём до продвинутых решений и покажем, как это может пригодиться именно вам. Готовы упростить свою жизнь? Тогда поехали!
От командной строки FFmpeg к Rust: практическое руководство для различных сценариев

FFmpeg — это мощный инструмент для работы с мультимедиа, который широко используется для редактирования видео, конвертации форматов и других задач. Однако использование командной строки FFmpeg (CLI) напрямую может быть связано с определёнными сложностями:
Три минуты на освоение обработки аудио и видео | Элегантное использование FFmpeg в Rust

Обработка аудио и видео может показаться сложной задачей, но в разработке нам рано или поздно приходится сталкиваться с такими задачами, как конвертация форматов видео, обрезка, добавление водяных знаков или извлечение аудио.
FFmpeg — это признанный стандарт в индустрии, который умеет почти всё. Его используют популярные программы, такие как VLC, YouTube и OBS. Однако у FFmpeg есть свои подводные камни, которые могут доставить разработчикам головную боль:
Книга «Эффективный Rust. 35 конкретных способов улучшить код»

В мире, где уже существует множество разнообразных языков программирования, Rust выделяется реальными инженерными решениями. Этот язык — редкий пример удачного компромисса между производительностью C++ и безопасностью современных управляемых языков. Не случайно уже семь лет подряд Rust возглавляет рейтинг самых любимых языков в опросах Stack Overflow.
Но за эту любовь приходится платить. Rust требует от разработчика совершенно нового образа мышления. Здесь нельзя просто перенести привычные паттерны из Java или C++ — нужно понять и принять философию владения, заимствования и времён жизни. Именно этому посвящена книга Дэвида Дрисдейла «Эффективный Rust. 35 конкретных способов улучшить код». Новинка от издательства Sprint book!
Что делает перечисления (enum) в Rust такими мощными?

На примерах попробую показать, почему enum
в Rust это несколько больше, чем обычно принято считать. Рассмотрю расширенное использование enum
в типовых ситуациях. Сразу забегая вперед скажу, что в рамках статьи я не затрагиваю паттерны и мэтчинг.
Первое, что приходит в голову, когда речь заходит об enum
, — это идея: «А давайте заменим все константы на enum
». :) Желание логичное, давайте на него посмотрим...
Удивительная оптимизация размера enum в компиляторе Rust

Enum — одна из самых популярных фич Rust. Тип enum
может иметь одно из значений в заданном множестве вариантов.
/// Foo имеет значение или 32-битного integer, или символа.
enum Foo {
Int(u32),
Char(char),
}
Значениями типа Foo
могут быть или integer (например, вариант Foo::Int(3)
с полезной нагрузкой 3
), или символы (например, вариант Foo::Char('A')
с полезной нагрузкой 'A'
). struct можно считать AND-комбинациями их полей, а enum
— OR-комбинациями их вариантов.
Этот пост посвящён удивительной оптимизации, выполняемой компилятором Rust с представлением в памяти значений enum
, чтобы они занимали меньше места в памяти (спойлер: это не нишевая оптимизация). В общем случае, уменьшение размера значений может привести к ускорению программ, потому что значения передаются в регистрах CPU и в одну линию кэша CPU умещается больше значений.
Лучшие онлайн-сервисы для анонимных знакомств — ТОП-10 дейтинг сайтов и приложений

Я составил рейтинг из 10 лучших сайтов для анонимных знакомств в России, каждый из которых прошел мою личную проверку. Эти платформы для анонимных знакомств онлайн действительно предлагают уникальные возможности для поиска не только качественных временных связей, но и даже чего-то большего, если вы к этому стремитесь.
Rust 1.86.0: преобразование в родительский трейт, поддержка изменяемой индексации для HashMap и срезов
Команда Rust рада сообщить о новой версии языка — 1.86.0. Rust — это язык программирования, позволяющий каждому создавать надёжное и эффективное программное обеспечение.
Если у вас есть предыдущая версия Rust, установленная через rustup
, то для обновления до версии 1.86.0 вам достаточно выполнить команду:
$ rustup update stable
Если у вас ещё не установлен rustup
, вы можете установить его с соответствующей страницы нашего веб-сайта, а также посмотреть подробные примечания к выпуску на GitHub.
Если вы хотите помочь нам протестировать будущие выпуски, вы можете использовать канал beta (rustup default beta
) или nightly (rustup default nightly
). Пожалуйста, сообщайте обо всех встреченных вами ошибках.
Бинарный формат вместо текста

Как быстро, без боли и страданий организовать хранение структурированных данных в бинарном формате. А затем и их передачу при необходимости. А потом, немного подумав, ещё их обнаружение в «замусоренном» потоке.
Ближайшие события
Как создать ИИ Телеграм-бот с векторной памятью на Qdrant
Идея создания этого пет-проекта возникла из желания написать собственного ИИ-агента. Я сформулировал для себя минимальные технические требования: агент должен иметь несколько состояний, уметь запускать тулзы и использовать RAG для поиска ответов на вопросы.
В итоге возникла идея написать персонального телеграм-ИИ-бота, который умеет запоминать нужную мне информацию, и когда мне надо — я могу его спросить, что он запомнил. Что-то вроде блокнота, только это будет ИИ-блокнот, который умеет отвечать на вопросы. В дополнение я решил добавить в него функцию, чтобы он мог запускать команды на сервере — причём команды, описанные человеческим языком, он будет переводить в команды для терминала.
Изначально я думал использовать LangChain. Очень хороший инструмент — позволяет подключать векторные базы данных, использовать различные LLM как для инференса, так и для эмбеддинга, а также описывать логику работы агента через граф состояний. Можно вызывать уже готовые тулзы. В целом, на первый взгляд всё выглядит удобно и просто, особенно когда смотришь типовые и несложные примеры.
Но, покопавшись немного глубже, мне показалось, что затраты на изучение этого фреймворка не оправдывают себя. Проще напрямую вызывать LLM, эмбеддинги и Qdrant через REST API. А логику работы агента описать в коде через enum, описывающий состояния, и делать match по этим состояниям.
К тому же LangChain изначально написан на Python. Я хотел бы писать на Rust, а использовать Rust-версию LangChain — сомнительное удовольствие, которое обычно упирается в самый неподходящий момент: что-то ещё не было переписано на Rust.
const fn может делать намного больше

Привет, Хабр!
const fn
в Rust давно перестал быть просто инструментом для сложения чисел на этапе компиляции. Сегодня это мощный инструмент, который умеет циклы, условия, матчинг, парсинг и даже кусочки бизнес-логики — и всё это ещё до запуска программы.
Rust в режиме «жесть»

В этом посте будет разобрано, как написать приложение на Rust с применением самого минимального API, возможности которого искусственно ограничены (например, не применяется динамическое выделение памяти). Предполагается, что читатель немного знаком с языком Rust.
FFI: как создать мост между Rust и C/C++

Привет, Хабр!
Сегодня мы рассмотрим, как создать безопасные FFI-интерфейсы в Rust для интеграции с C/C++ библиотеками
Если говорить проще, FFI (foreign function interface — интерфейс вызова внешних функций) – это способ «позаимствовать» функциональность из другого языка. В контексте нашей статьи, с одной стороны у нас Rust, где каждый байт памяти охраняется компилятором, а на другой C++, где свобода обращения с памятью может обернуться утечками или, что еще хуже, непредсказуемым UB (англ. undefined behavior, в ряде источников непредсказуемое поведение). И наша задача – сделать так, чтобы эти два мира не конфликтовали, а работали в унисон.
Календарь IT-конференций на 2025 год

Всем привет! На связи Speach (ex. IT-People). В прошлом году мы сменили имя, но не изменили своей любви к конференциям. И продолжаем организовывать самые душевные и классные мероприятия для айтишников. Приглашаем принять в них участие.
25 апреля, DUMP EKB, Екатеринбург
Крупнейшая конференция разработчиков на Урале, куда приезжают более 2000 человек! Конференция, которая традиционно собирает топовых IT-экспертов со всей страны. В 12 секциях прозвучат десятки докладов ТОЛЬКО на актуальные темы. Впервые в этом году — новая секция: TechLead. А также — Backend (2), Frontend, Testing&QA, Team, Product, ML&DS, BA&SA, DevOps, Design, Science, круглые столы, воркшопы, нетворкинг и афтепати.
Rust: объясняем Владение и Субструктурные типы на пальцах
Системы типов помогают разработчикам создавать надежные и безопасные программы. Однако такие термины, как «субструктурные типы» или «владение», нередко кажутся сложными и трудными для понимания, особенно для тех, кто не сталкивался с теорией типов в академической среде.
Новый перевод от команды МойОфис расскажет вам, как субструктурные типы и система владения в Rust помогают создавать безопасные и эффективные программы. Автор разбирает ключевые теоретические аспекты, выясняет, какие преимущества они предоставляют, и показывает, почему их использование становится неотъемлемой частью разработки современных языков. Вы узнаете, как субструктурные типы помогают обеспечивать безопасность и жизнеспособность программ, а также познакомитесь с идеями и проблемами их внедрения на практике.
Уменьшаем базу данных в 2000 раз при помощи Rust (завершение)

Сериализация
По сути, мы получили косвенную базу данных в памяти. Далее нам нужно сериализовать её, чтобы проверить, как interning влияет на её постоянное хранение. Кроме того, сериализация — это важный шаг для проверки реальности заявленной экономии места. И, наконец, это ещё одна возможность для дальнейшего сжатия данных.
В Rust для сериализации стандартно используется крейт serde, который мы уже использовали для импортирования входных данных в JSON. Serde изначально имеет поддержку множества форматов благодаря крейтам расширений, поэтому я решил попробовать несколько из них.
Вклад авторов
humbug 810.2RustLangRu 660.8freecoder_xx 468.0PsyHaSTe 460.2badcasedaily1 441.0m1rko 424.0Bright_Translate 397.6ozkriff 376.6aio350 360.8mkpankov 319.2