Обновить
96.05

Rust *

Мультипарадигмальный компилируемый язык

Сначала показывать
Порог рейтинга
Уровень сложности

От стартапа к протоколу: Почему мы решили написать свой «PostgreSQL для финансов»

Уровень сложностиСредний
Время на прочтение4 мин
Охват и читатели7K

В мире разработки есть негласное правило: не пишите свою криптографию. В финтехе должно быть похожее правило: не пишите свой леджер (ledger) на SQL, если планируете масштабироваться.

Меня зовут [Имя], и я хочу рассказать, как мы прошли классический путь «изобретения велосипеда», набили шишки на race condition-ах и в итоге поняли, что индустрии нужен не очередной необанк, а открытый стандарт финансового учета. Так появился проект Qazna.

В этой статье я не буду продавать вам продукт. Я покажу код, архитектурные решения и то, как мы пытаемся сделать «Linux для финансов».

Читать далее

Новости

«Лучшие» практики Rust, которые вас подведут

Уровень сложностиПростой
Время на прочтение13 мин
Охват и читатели13K

Привет, Хабр!

Знаете, что общего между документацией Rust и советами бабушки? И то, и другое звучит разумно, пока не начнёшь применять буквально ко всему. «Используй дженерики для переиспользования кода», «оборачивай общие данные в Arc<Mutex>», «создавай типизированные ошибки» — всё это написано в книгах, статьях и туториалах. И всё это может превратить ваш проект в нечто, от чего хочется плакать.

Читать далее

Всего одна строка кода, из-за которой 24-ядерный сервер стал работать медленнее ноутбука

Время на прочтение13 мин
Охват и читатели40K

Допустим, вы написали код для решения задачи, которая хорошо распараллеливается. Каждый поток занимается своим участком работы и не зависит от других, поэтому потоки почти не должны координироваться друг с другом, за исключением самого последнего этапа, когда требуется объединить результаты. Естественно, в данном случае логично предположить, что чем больше ядер задействуется для такого кода, тем быстрее он выполнится. Вы ставите бенчмарки и сначала прогоняете этот код на ноутбуке. Действительно, оказывается, что он практически идеально масштабируется на всех четырёх доступных ядрах. Затем вы прогоняете его на большой и пафосной многопроцессорной машине, рассчитывая, что производительность будет ещё выше — но убеждаетесь, что на практике этот код работает даже медленнее, чем на ноутбуке, сколько бы ядер под него не выделить. Да, именно с таким случаем мне однажды довелось столкнуться.

Читать далее

Хватит воевать с Makefile: как я написал свой таск-раннер на Rust, чтобы не сойти с ума

Уровень сложностиПростой
Время на прочтение2 мин
Охват и читатели11K

Хватит воевать с Makefile: как я написал свой таск-раннер на Rust

Устали от табов, .PHONY и bash-лапши? Я тоже. Поэтому написал Nest — декларативный таск-раннер с иерархией, типами и понятным синтаксисом. Рассказываю, как это было и почему вам стоит попробовать.

Читать далее

Rust в действии: допечатка

Время на прочтение14 мин
Охват и читатели10K

Всем привет!

Мы гордимся тем, с каким успехом и рвением выпускаем на русском языке крутую литературу по языку Rust. Мы занялись этим, когда Rust ещё далеко не был мейнкуном мейнстримом - и нашим первым (и сразу же очень успешным) заходом в тему была ныне легендарная книга Тима Макнамары "Rust in Action". Она вышла в издательстве "Manning" в 2021 году, а на русском языке мы выпустили первый тираж "Rust в действии" в ноябре 2022 года. Очередная допечатка закончилась к новому 2026 году, и мы решили разместить здесь переводную статью о книге для привлечения внимания к свежей допечатке (тираж ограничен!)

С тех пор эта книга стала базовым введением в Rust и пропуском в отрасль, но мы на ней, конечно, не остановились. Далее мы выпустили:

Читать далее

Log Analyzer Pro 2.0: Добавляем AI-поиск на естественном языке

Время на прочтение2 мин
Охват и читатели6.1K

Продолжение истории про Rust-based log viewer для VS Code. Теперь с AI: описываешь что искать на человеческом языке — получаешь regex. Плюс объяснение непонятных строк в один клик.

Читать далее

Пиано. Ноты жестко заданы а время — нет. На Rust

Уровень сложностиСредний
Время на прочтение14 мин
Охват и читатели8.9K

Что это такое?
Это играть музыку.
Одним пальцем ноту!
Левая кнопка мышка играет.
НО...
Я не могу играть музыку!!! Не знаю ноты!
И я сделал что ноты уже есть. Они жестко заданы!
А вот время - НЕТ!!!!!
Если не время не указывать то ничего не происходит!
Надо указывать! Левая кнопка мышка! Нажать одну ноту. Потом отпустить! Затем вторую. Нажать. Потом отпустить. И так далее. ТЫ это делаешь - время нот!
А какую именно ноту - это не ты делаешь а программа.
Вот.
Плохо рассказываю.
Ну так инсульт.
Я сделал это 18 песен!

Вот такой файл. Я сделал еще ДО инсульта. Давно, двадцать лет! И конечно это asm! "Программы для Windows я пишу на языке Flat Assembler. Выбор именно этой среды разработки совсем необычен, но так уж сложилось." А ПОСЛЕ инсульта я сделал его на Rust! Как? Узнаете )

Читать далее

Гексагональная архитектура в Rust: отвязываем бизнес-логику от Solana

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели9.5K

Представьте: вы строите сервис выдачи дипломов на Solana. Всё отлично, пока дело не доходит до тестов.

Внезапно оказывается, что для проверки бизнес-логики нужно поднимать валидатор, искать тестовые токены и молиться на стабильность сети. Знакомая боль?

В этой статье я покажу, как мы решили проблему, используя async-trait и dyn Trait. Мы превратили интеграционные тесты длиной в минуты в юнит-тесты, которые проходят за миллисекунды.

Узнать решение

Паттерн Newtype и Deref-coercion в Rust

Уровень сложностиПростой
Время на прочтение2 мин
Охват и читатели9.2K

Как отличить строку «имя» от строки «e-mail»? К примеру, чтобы не ошибиться в передаче в функцию. На помощь приходит паттерн Newtype, но его не очень удобно использовать. В статье разберем как добавить удобства.

Читать далее

Осторожно, Drop: как невинный деструктор рушит код

Уровень сложностиПростой
Время на прочтение13 мин
Охват и читатели8.6K

Сегодня мы поговорим про такую, казалось бы, простую и привычную штуку, как функция drop в языке Rust. Что может быть банальнее?

Создали переменную, и в конце области видимости она сама очистится. RAII за нас делает всю работу, а мы просто выдыхаем и не боимся утечек памяти. Но не все так радужно!

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

Читать далее

Пользователям Linux посвящается. Генератор паролей из /dev/random: от one-liner'а к Rust CLI

Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели13K

Генератор паролей из /dev/random: от one-liner'а к Rust CLI

В этой статье хочу поделиться процессом написания собственного генератора паролей, использующего энтропию /dev/random. От pipe команды до Rust утилиты.

Читать далее

Растом можно в вебе

Время на прочтение4 мин
Охват и читатели13K

Как известно, оливье быть, а раст лучший язык программирования. К сожалению, нанести вред проекту, людям, гретте тумберг легко - тупо не используя лучший язык программирования. Пожалуй, для тривиальной логики можно и без раста, или скажем, вы избрали путь html разработчика, хотя в последнем случае раст все равно найдет вас (в виде красной таблетки) в веб ассембли. Допустим, в проекте вокеры, темплейты, строгое "нет" реакту, манифесты, API для хранения данных в браузере, которое предоставляет доступ к виртуальной файловой системе, частной для источника страницы, и раст. Собрал для вас практики и ошибки, создавая проект, который с удвольствием использую вместо гугл шитс.

Читать далее

Ни единого разрыва с TUN/TAP, или как я боролся с «подзатупами» интернета на острове

Уровень сложностиСредний
Время на прочтение6 мин
Охват и читатели17K

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

Читать далее

Ближайшие события

Компилятор языка моделирования в одиночку: от C++ к Rust — находки и откровения

Уровень сложностиПростой
Время на прочтение22 мин
Охват и читатели11K

Тема специального языка для моделирования многокомпонентных динамических систем давно меня зацепила и хотелось написать свою реализацию для него, так как было жгучее желание сделать лучше: чтобы работало надёжнее и быстрее, чем у авторов языка (MVL - в статье подробнее про язык), и к тому же ещё и кроссплатформенно.

Расскажу про заходы к задаче на C++, почему перешёл в итоге к Rust - что приобрёл, где потерял - поделюсь деталями и самой реализации, которые, надеюсь, будут интересны и растаманам, и плюсовикам, и всем прочим доморощенным компиляторостроителям, а также тем, кого привлекают темы реализации языков, DSL или численного моделирования.

Читать далее

Go после Rust: краб и суслик

Время на прочтение18 мин
Охват и читатели15K

Случилось так, что мне пришлось участвовать в разработке на Go. До этого с Go я был знаком шапочно, большую часть времени работая с Rust. Изучить Go оказалось не сложно, но после того, как мы приступили к разработке, обнаружились неприятные моменты. Выяснилось, что по сравнению с Rust, в Go местами не хватает гибкости языка, местами есть способы выстрелить себе в ногу.
Так что спустя почти полтора года промышленной разработки на Go, я решил написать эту статью, где (без какого-то строгого порядка) перечислю моменты Go, которые вызывают боль у человека, пришедшего из другого языка (сравнивать я буду с Rust, так как это мой основной язык).

Читать далее

ty: революция в тайп-чекинге

Время на прочтение7 мин
Охват и читатели10K

Всем привет!

За последние пару лет компания Astral буквально разрывает Python-мир своими инструментами. Даже если вы не слышали это имя напрямую, с большой вероятностью вы уже пользовались их продуктами — ruff или uv.

И это не преувеличение. И ruff, и uv сегодня фактически стали стандартом индустрии. Например, в свежем релизе PyCharm 2025.3 при создании нового проекта по умолчанию инициализируется именно окружение uv, а не привычный venv. Для open source-проекта — это очень серьёзный показатель доверия со стороны экосистемы.

Открытый исходный код и массовое принятие инструментов Python-разработчиками дали Astral тот самый «кредит доверия», который компания, судя по всему, пока что уверенно оправдывает.

И вот буквально на днях Astral объявили, что их новый «революционный» тайп-чекер ty переходит в стадию бета-тестирования. А если учитывать, что и uv, и ruff формально тоже всё ещё находятся в бете, то можно считать, что ty уже фактически вышел в релиз. Собственно, о нём и поговорим дальше.

Если вам интересны подобные материалы — подписывайтесь на Telegram-канал «Код на салфетке». Там я делюсь гайдами для новичков и полезными инструментами. А прямо сейчас у нас ещё и проходит новогодний розыгрыш.

Читать далее

Всё, что нужно знать про аллокаторы в Rust (и как написать свой)

Уровень сложностиПростой
Время на прочтение13 мин
Охват и читатели11K

Мне в Rust всегда заходила одна штука. Он довольно быстро приучает не держать в голове мусор из серии «а я точно это освободил??». Большая часть рутины с памятью уезжает в автоматизм языка, и ты можно прям выдохнуть и думать про данные и инварианты, а не про то, где у тебя очередной free потерялся.

Но. Как только начинаешь копать чуть глубже, выясняется, что у Rust есть вполне конкретная рука, которая раздаёт память под все эти Box::new(42), Vec::push и растущие String. Имя этой руке простое: аллокатор. Он отвечает за то, что происходит в куче, и именно через него проходят почти все интересные истории про производительность и поведение памяти.

Читать далее

Rust в ядре Linux: долгий путь от осторожных попыток к реальному применению

Время на прочтение4 мин
Охват и читатели11K

Совсем недавно мы вспоминали, как Rust вырос из стартапа до языка, у которого серьезные планы на Linux. И вот свежие новости: на Maintainers Summit 2025 года разработчики ядра решили, что Rust доказал свою пользу и можно расширить сценарии его использования. Это не значит, что он теперь на равных с C, но проект вышел за рамки «просто эксперимент». Давайте разберем, как все происходило, зачем нужно, почему были споры и что это сулит для будущего ядра. Поехали!

Читать далее

От Electron к Tauri: как я пересобрал архитектуру десктоп-приложения и почему Rust оказался к месту

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели13K

В этой статье я расскажу, как я для себя понимаю архитектуру десктоп-приложений — и почему в какой-то момент Rust перестал быть «языком, который я когда-нибудь посмотрю», и стал практичным решением.

Сразу оговорюсь: это не попытка доказать, что «Electron — зло», а Rust — «спаситель». Это скорее дневник архитектора, который хотел собрать удобный продукт и по дороге несколько раз наступил на грабли. Некоторые грабли были с подогревом.

Читать далее

C++, Rust и цветовая дифференциация воротничков

Уровень сложностиПростой
Время на прочтение2 мин
Охват и читатели10K

Я почти 20 лет пишу код на С++ за деньги, и почти все это время ощущаю неприязнь к инструменту, который позволяет мне безбедно жить. К тому же я занимаюсь системным программированием, а это налагает дополнительные требования к знанию языка.

Я долго не мог выразить вербально, что меня так отталкивает в C++. Однажды из любопытства меня заинтересовал Rust. Я влюбился в него не сразу, сделав не менее 3х подходов к снаряду изучению, пока наконец-то не нащупал интуитивное понимание. С этого момента Rust превратился для меня в эталон инструмента для системного программирования.

Так что и где не так?
1
23 ...