Обновить
106.28

Rust *

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

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

Почему Go, Rust и Zig такие разные: ценности, компромиссы и назначение языков

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

Команда Go for Devs подготовила перевод статьи о трёх языках, которые всё чаще оказываются в одном ряду, но на самом деле решают принципиально разные задачи: Go, Rust и Zig. Автор несколько месяцев изучал каждый из них и попытался понять, какие ценности стоят за их устройством. Go выбирает минимализм и корпоративную предсказуемость, Rust — безопасность и максимальную выразительность, Zig — радикальный контроль и отказ от ООП-мышления. Получился честный и местами провокационный разбор того, зачем нужны эти языки и кому из разработчиков они подходят.

Читать далее

Rust, mmap и 10 миллионов пикселей: делаем производительный Log Viewer для VS Code

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

Наверняка у каждого бэкендера или девопса была такая ситуация:
Нужно срочно посмотреть, что случилось на проде. Вы скачиваете server.log, по привычке кликаете на него в VS Code... и всё.
Редактор зависает, кулеры ноутбука взлетают, интерфейс не отвечает. Файл весит всего-то 2-3 ГБ, но для редактора на базе Electron/DOM это приговор.

Обычно в этот момент мы убиваем процесс VS Code и идём в терминал писать less или tail -f. Это работает, но лишает нас комфорта: нормального поиска, копипаста мышкой, подсветки синтаксиса.

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

Под катом расскажу, как скрестить VS Code с нативным бинарником, обойти лимиты браузера на высоту скролла и сделать grep по гигабайтам текста мгновенным.

Читать далее

Rust 1.92.0: проверка типа never, unused_must_use, генерация таблицы раскрутки стека на Linux, Валидация #[macro_export]

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

Команда Rust рада сообщить о новой версии языка — 1.92.0. Rust — это язык программирования, позволяющий каждому создавать надёжное и эффективное программное обеспечение.

Если у вас есть предыдущая версия Rust, установленная через rustup, то для обновления до версии 1.92.0 вам достаточно выполнить команду:

$ rustup update stable

Если у вас ещё не установлен rustup, вы можете установить его с соответствующей страницы нашего веб-сайта, а также посмотреть подробные примечания к выпуску на GitHub.

Если вы хотите помочь нам протестировать будущие выпуски, вы можете использовать канал beta (rustup default beta) или nightly (rustup default nightly). Пожалуйста, сообщайте обо всех встреченных вами ошибках.

Читать далее

Книга: «Паттерны проектирования Rust»

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

Привет, Хаброжители!

Как только вы освоитесь с синтаксисом Rust, с его уникальным и мощным компилятором и начнете использовать его в реальных проектах, перед вами откроется совершенно новое измерение. Как правильно применять стандартные паттерны проектирования в приложениях на Rust? Как и когда следует использовать IntoIterator? Почему Rust-разработчики любят тип PhantomData? Ответы на эти и многие другие вопросы вы найдете в книге.

Что внутри:

- создание великолепных API;

- применение паттерна Строитель (Builder) и других классических паттернов проектирования;

- паттерны функционального программирования;

- антипаттерны Rust.

Читать далее

SSR на Rust

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

Дело было вечером... Сидел я, развлекался переписыванием фронта маркетплейса с React на Preact с Brotli и нативным CSS, чтобы протестировать максимальную оптимизацию. В попытках добиться предельной производительности и скорости решил провести эксперимент по переписыванию бэка на Rust с сжатием БД в Redis — но это совсем другая история. В общем, эксперименты привели меня к идее сделать SSR на Rust, и по бенчмаркам вышел на 95,000+ RPS на M4. Это уже само по себе неплохо, ниже расскажу подробнее.

Читать далее

Как Rust думает о памяти: &mut, provenance и noalias

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

Мы знаем, что Rust славится безопасностью и строгим контролем за доступом к данным, но за этими правилами стоит целая философия и формальная модель.

Сегодня с вами посмотрим изнанки модели памяти Rust. Поговорим о том, кто имеет право на доступ к памяти, что такое provenance указателей, почему &mut T считается эксклюзивным и как все это добралось до уровня оптимизатора LLVM через атрибут noalias.

Читать далее

joerl :: довёл до рабочей версии

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

joerl — это библиотека модели акторов для Rust, вдохновленная Erlang и названная в честь Джо Армстронга, создателя Erlang. Если вам когда-либо приходилось строить конкурентные системы на Erlang/OTP и вы думали: «Эх, был бы здесь хоть намек на систему типов», — то вот она, ваша прелесть. Я начинал этот проект просто потренироваться в расте немного, но меня затянуло и я довел ее более-менее до ума. Сам я на расте писать буду вряд ли, если кто-то ближе к телу захочет попробовать — буду признателен.

Публикую сейчас, потому что свободное время у меня заканчивается, много допилов в ближайшее время ждать не стоит, основную функциональность, которую хотел, я сделал, а карму мне скоро выкрутят в минус и придётся публиковаться через песочницу.

Релиз с distribution и телеметрией

Самописный SDR для спутника RS44

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

Изучая вопрос наличия подходящего софта для проведения связей через популярный у радиолюбителей спутник RS44 (ДОСААФ-85), с удивлением обнаружил, что подходящей мне программы просто нет. SDR всяких написано уже не мало, но вот так чтоб работал дуплекс, при этом были разные диапазоны приёма и передачи, коррекция допплера, да ещё и разные виды модуляции на приём и передачу – такого не сумел найти. По этой причине пришлось написать свой минималистичный SDR, специально ориентированный на решение только одной задачи – проведения связей через RS44. По традиции, решил написать программу на Rust. За деталями работы программы и ссылкой на гитхаб прошу под кат.

Читать далее

Что не так в Расте :: впечатления вкатуна

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

Сначала я просто хотел написать комментарий к моему предыдущему тексту, в котором я рассказал, как за день на расте мне удалось написать новую, неспецифицированную, глючную и медленную реализацию половины OTP.

Но пока я тот комментарий писал, внезапно оказалось, что, несмотря на общее положительное впечатление от раста, претензий к нему у меня набралось на целый текст. Ну что ж, заточите свои минусаторы, ниже —

неполный и предвзятый список претензий

joerl :: привычная акторная модель из эрланга в расте

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

Вскрытие показало, что я немного отстал от жизни, и язык программирования «Кровожадный краборжав» уже вполне себе пригоден для написания простеньких хелоуворлдов…

Ладно. В кои-то веки обойдусь без ёрничанья. Официально заявляю: я написал свою первую библиотеку на расте и мне понравилось. Раст — несомненно местами красивый и приятный для работы язык. Написание кода укладывается в зелёный диапазон плотности wtf/sec, а инструментарий заслуживает всяческих похвал (кроме кросс-публикации документации на https://docs.rs/, которая в 2025 году занимает час — хоть донаты шли, её-богу).

Итак, я написал библиотеку, которая позволит эрлангистам проще вкатываться в раст. Акторная модель притворяется краденой из эрланга, с примитивами GenServer и GenStatem, с деревьями супервизоров, с боксированными сообщениями, мэйлбоксами, и привычной терминологией. Библиотека названа joerl, светлой памяти Джо Армстронга, с которым мне посчастливилось быть знакомым, и который сильнейшим образом повлиял на менталитет разработчика во мне.

Хватит болтовни, покажи код!

Rust vs Go: управление памятью

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

Давайте рассмотрим как управляют памятью два популярных языка программирования — Rust и Go.

Когда запускается программа, создается процесс с собственным адресным пространством и потоками, выполняющимися на ядрах. Процессор работает с виртуальной памятью — абстракцией, которой управляет операционная система.
Например в Go, когда мы создаем массив

Читать далее

Почему в Rust всё правильно

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

Программирование, да и вообще в целом ИТ — это всегда про компромиссы. Выигрывая в чём-то одном, мы обязательно проигрываем в чём-то другом. Не существует той самой «серебряной пули», то есть инструмента, решающего абсолютно все задачи. Также не бывает и идеального языка программирования. Но что если я скажу вам, что существует почти идеальный язык? И это Rust. Далее я постараюсь обосновать свои доводы, чтобы в глазах читателей на казаться слепым крабом фанатом очередной хайповой технологии.

За свой почти 14-летний путь в ИТ я успел профессионально поработать на нескольких языках программирования: PHP, Ruby, JS/TS, также мне доводилось «потрогать» Python, Go, даже Clojure и Haskell. Каждый имеет свои недостатки: у PHP — кривая архитектура, у Ruby — медленная работа, у функциональных языков — недостаток библиотек и обучающих материалов. При разработке на них каждый раз приходится идти на уступки и выбирать между изящным синтаксисом, скоростью работы и написанием «велосипедов» на каждый чих. В Rust всё обстоит совсем иначе и вот почему.

Читать далее

Что происходит после fn main() в Rust?

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

Привет!

Хочу вместе с вами разобрать, как же код на Rust превращается в готовый исполняемый файл. Мы пишем программу, например, fn main() { println!("Hello, Habr!"); }, компилируем, и на выходе получаем бинарник. Что происходит под капотом компилятора Rust в этот момент? Давайте аккуратненько заглянем внутрь этого таинственного процесса.

Читать далее

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

Как прокачать проект на Java при помощи Rust

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

Практическое руководство по интеграции JNI + полный пример

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

Читать далее

Как я Rust в Python встраивал

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

Rust все популярней, а вместе c этим создается много библиотек для Python на Rust.
В данной статье узнаем, как создать простенькую библиотеку для Python на Rust на примере кодирования данных в Base 64.

Читать далее

Скрываем данные от стандартного режима exiftool прямо в чанках PNG

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

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

Читать далее

Разработка peer-to-peer мессенджера на Rust

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

История о том, как написать свой P2P-мессенджер, когда Discord и Telegram перестали устраивать. В статье разбирается устройство транспортного протокола с ECDH и ротацией ключей, решение проблем с NAT traversal, реализация голосовых звонков и работа с аудиоустройствами. Бонусом — откровенный опыт использования LLM для написания кода: что работает из коробки, а какие модули пришлось полностью переписывать.

Читать далее

Node.js и Rust: высокопроизводительные Native Add-ons с помощью NAPI-RS

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

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

Сегодня я расскажу, как подружить Node.js с Rust и создать нативный модуль с помощью библиотеки NAPI-RS. Если вы вообще писали расширения для Node.js на C++ через N-API или node-gyp, то знаете, какое это удовольствие, точнее, не удовольствие вовсе.

Постоянная суета с указателями, утечками памяти и тонкостями ABI. Rust приходит на помощь как свежий бриз: безопасная работа с памятью, высокое быстродействие и довольно простой синтаксис по сравнению с C++.

Читать далее

Крупнейшая утечка секретных документов DARPA раскрыла неожиданные детали IT сектора США

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

Издание SelaNi опубликовало результат анализа утечки секретных документов DARPA, слитых в сеть в начале недели. В документах в основном финансовые отчёты и перечисления финансируемых программ, но также там оказались планы и отчёты по экспериментам и разработкам проведённым агентством за период с 2009 до 2025 год.

Отчёт 2010 года свидетельствует о том, что основной проблемой военной промышленности США стал найм программистов. Основные критические системы, такие как банки, были написаны на COBOL, а в военной сфере по директиве DoD 3405.2 использовался только язык программирования Ada. Оба языка постепенно потеряли носителей и к 2010 году стало понятно, что им нужно искать замену.

Читать далее

Overkill as a service: лендинг на Rust вместо конструктора

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

Tilda раздражала, JS пугал, а Rust манил… В итоге я переписал лендинг на Rust + Leptos - просто потому что «а почему бы и нет?». Под катом: немного боли, пара побед, сравнение с конструктором и вывод о том, что заниматься фигнёй иногда очень полезно.

Читать далее