Обновить
132.48

Rust *

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

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

Организуем окружение Rust и сборку Docker с применением Nix Flakes

Уровень сложностиСложный
Время на прочтение8 мин
Количество просмотров8.3K
image

Чем интересен Nix


В Rust новое окружение для разработки обычно настраивается без труда – просто воспользуйтесь rustup и в добрый путь. Но при использовании такого сборочного инструмента как язык Nix, вы можете приобрести гораздо больше, лишь немного потрудившись. Ведь Nix позволяет:

  • Указывать в коде зависимости от проектов, не написанных на rust;
  • Автоматически добавлять в путь все инструменты/зависимости ваших проектов при помощи direnv;
  • С лёгкостью собирать тонкие контейнеры Docker.

Стоит начать применять Nix при работе в репозитории – и «как раньше» уже не захочется. Никаких больше README со списком команд Homebrew, apt, pacman и др., которые было бы необходимо выполнять. Сборка тонких контейнеров Docker делается в два счёта, без необходимости вручную вручную обрабатывать множество слоёв, из которых требуется копировать сборочные артефакты.
Читать дальше →

Rust 1.69.0: автоматические исправления предупреждений, отсутствие информации об отладке в скриптах сборки

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

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


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


rustup update stable

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


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

Читать дальше →

Отладка C при помощи пакета Cosmopolitan Libc

Время на прочтение12 мин
Количество просмотров3.9K
Cosmopolitan Libc предоставляет набор отладочных возможностей, повышающих удобство разработки на C: трассировка вызовов функций, интеграция с gdb, среда выполнения ASAN/UBSAN и многое другое! На C написано много быстрого и критически важного кода. Если вы пользуетесь программами, написанными на C, если вам приходится предусматривать интерфейсы для работы с библиотеками на C, исправлять баги в коде на C, либо даже переписывать имеющуюся на С программу на каком-то другом языке, то именно этот инструмент помогает понять, что делается в вашем коде на C. Отладка – это не просто россыпь инструкций printf. В этом посте будет рассмотрено, как Cosmopolitan Libc помогает наверняка и как следует отлаживать код C. Все примеры находятся в этом репозитории.
Читать дальше →

Rust 1.69

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

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

Cargo теперь предлагает автоматически исправлять некоторые предупреждения.

Rust 1.69.0 добавил команду cargo fix, чтобы автоматически исправлять некоторые простые предупреждения компилятора. Кроме того, была добавлена поддержка автоматического исправления некоторых простых предупреждений Clippy. Чтобы привлечь больше внимания к этим возможностям, Cargo теперь будет предлагать запустить cargo fix или cargo clippy --fix при обнаружении автоматически исправляемых предупреждений:

Читать далее

Преобразуем карты DOOM в SVG для лазерной резки

Время на прочтение6 мин
Количество просмотров2.9K
Я много слышал о формате данных классического Doom, поэтому решил написать код на Rust для извлечения его карт и преобразования в векторную графику для лазерной резки.

В статье я опишу процесс: извлечение данных, воссоздание геометрии и вывод SVG для лазерной резки; также я поведаю о геометрическом тупике, в который я с энтузиазмом залез, когда пытался просмотреть результат при помощи bevy.

Читать дальше →

Чат в терминале на Rust

Уровень сложностиПростой
Время на прочтение36 мин
Количество просмотров7.2K

Всем привет! Эта статья — туториал по написанию небольшого чат сервиса (серверное и клиентское приложения) на Rust, используя функционал TCP сокетов из стандартной библиотеки Rust. Сам чат для пользователя будет выглядеть, как приложение в терминале. Полный код приложений есть в гитхабе.

Читать далее

Мысли о Zig и Rust

Время на прочтение11 мин
Количество просмотров15K

Этот пост будет довольно сумбурным. Несколько месяцев назад я написал Hard Mode Rust, исследуя стиль программирования allocation-conscious. В последовавшей дискуссии @jamii упомянул TigerBeetle — распределённую быструю и маленькую базу данных, написанную на Zig в схожем стиле. И теперь я после шести лет работы с Rust пишу на основной работе на Zig. В этом посте я вкратце объясню, почему так получилось. Подчеркну, что это не уравновешенное и тщательное сравнение двух языков. Для этого я ещё не написал свои 100 тысяч строк на Zig. (Если вы ищете ответ на более общий вопрос «что же такое Zig?», то рекомендую пост @jamii).

На самом деле, этот пост будет в основном посвящён не языкам, а стилям написания ПО (однако вам очень поможет знание Rust и Zig). Итак, давайте приступим.
Читать дальше →

Как я неделю просидел над десятью строками кода

Время на прочтение4 мин
Количество просмотров29K


Недавно я столкнулся с серьезным препятствием, когда работал над возможностью перетаскивать вкладки в приложении Warp: если попытаться передвинуть конкретную вкладку, она потянет за собой всё окно. Понадобилась целая неделя изысканий и экспериментов, чтобы установить, откуда берет начало этот баг. Но в конечном итоге я исправил это в pull request-е, который состоял менее чем из десяти строк кода! Это несоответствие усилий выхлопу также заставило меня проникнуться сознанием того, что создание ПО включает в себя гораздо больше, чем просто написание кода. В этой статье я расскажу, как всё происходило.

Немного контекста: Warp – это терминал для разработчиков на базе Rust. При его создании мы использовали собственный кастомный UI-фреймворк, так что всё, что касается вкладок и перетаскивания, пришлось разрабатывать с нуля.
Читать дальше →

Что нового в Rust 1.68

Время на прочтение2 мин
Количество просмотров3.3K

Упрощённый протокол проверки крейтов.
(Cargo's sparse protocol)

Протокол "sparse" реестра Cargo был стабилизирован для чтения индекса крейтов, а также была создана база данных на https://index.crates.io/ для тех крейтов, которые опубликованы в основном хранилище crates.io. Прежний протокол git (который по-прежнему является стандартным) клонирует репозиторий, который индексирует все крейты, доступные в реестре, но он начал сталкиваться с проблемами масштабирования, вызывая заметные задержки при обновлении этого репозитория. Новый протокол должен значительно повысить производительность при доступе к crates.io, так как он будет загружать только информацию о том подмножестве крейтов, которое вы действительно используете.

Для использования "sparse" протокола с crates.io, установите переменную окружения
CARGO_REGISTRIES_CRATES_IO_PROTOCOL=sparse
или отредактируйте свой файл .cargo/config.toml, чтобы добавить:

Читать далее

Реализация конечных автоматов через систему типов Rust

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

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

Посмотреть

Самая маленькая хеш-таблица в мире

Уровень сложностиСложный
Время на прочтение17 мин
Количество просмотров12K

1 декабря я в очередной раз поучаствовал в Advent of Code, написав программу на Rust. Если интересно — код можно найти на GitHub. Тут мне хотелось бы рассказать о моём решении задачи, предлагавшейся во 2 день мероприятия, так как это решение, с одной стороны, сверх всякой меры оптимизировано, а с другой — демонстрирует кое-какие полезные приёмы. Чтобы не усложнять себе жизнь — мы рассмотрим лишь первую часть задачи, но те же приёмы можно применить и к её второй части.

Читать далее

Использовать unwrap() в Rust — это нормально

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

Сравнительно недавно на Хабре была опубликована статья "Rust: ни в коем случае не используйте unwrap() в продакшене". Мягко говоря, тезисы, высказываемые в данной статье, спорны и содержат мало обоснования. Предлагаю читателям взглянуть на альтернативную точку зрения: почему использовать unwrap() в Rust — это нормально (в том числе и в продакшене). Автор оригинальной статьи — Эндрю Галлант.

Читать далее

Кросс-компилируем Rust приложения при помощи Nix

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

На текущем месте работы столкнулся с необходимости собирать Docker образы для сервисов написанных на Rust. Обычно в таком случае пишется Dockerfile, который внутри докера просто собирает контейнер и все. Но все оказалось не так однозначно: такая схема довольно неплохо работает, когда у тебя есть x86_64 Linux машина, но любой шаг в сторону и начинаются большие проблемы.

Все довольно неприятно уже на Intel MacBook машинах, докер поедает довольно много ресурсов с хоста, а еще возникают всякие странные приколы с монтированием файловой системы и правами доступа. Но настоящий ужас начинается на Макбуках с Apple Silicon процессорами, где обычной виртуализацией уже не обойдешься и можно часами ждать сборки простого сервиса через qemu. Можно решать эту проблему через сборку контейнеров в CI, но когда разработчиков много, а им надо часто что-то пересобирать, то там образовывалась очередь.

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

Читать далее

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

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

Уровень сложностиСредний
Время на прочтение11 мин
Количество просмотров44K

Язык программирования Rust был разработан компанией Mozilla и впервые представлен в 2010 году. Он считается одним из самых безопасных и производительных языков программирования на сегодняшний день. В данной статье мы рассмотрим основные преимущества Rust, и почему он становится все более популярным в системном программировании.

Читать далее

Пишем простой калькулятор используя фреймворк eframe (egui)

Уровень сложностиСредний
Время на прочтение34 мин
Количество просмотров15K

Всем здравствуйте. Ниже будет приведен пример написания PWA приложения готового для использования как в браузере, так и на компьютере с ОС Windows. Используется язык программирования Rust и фреймворк eframe (egui). В результате получим исполняемый файл для ОС Windows, и файл Webassembly. В процессе работы будет использоваться GitHub Action для отслеживания корректности написания нашего кода и сборки исполняемых файлов программы, а также для развертывания (версию программы с использованием Webassembly) как страницы в интернете (GitHub Pages).

Читать далее

Как Discord хранит триллионы сообщений

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

В 2017 году мы написали пост о том, как храним миллиарды сообщений [перевод на Хабре]. В нём мы рассказали о том, как начали с использования MongoDB, но потом выполнили миграцию данных в Cassandra, потому что искали надёжную, устойчивую к сбоям базу данных, имеющую относительно низкую стоимость обслуживания. Мы знали, что будем расти, так и произошло!

Нам нужна была база данных, способная расти вместе с нами, но чтобы стоимость обслуживания не росла вместе с объёмом хранимых данных. К сожалению, оказалось, что это не так — кластер Cassandra демонстрировал серьёзные проблемы с производительностью, поэтому нам требовалось всё больше усилий, чтобы просто поддерживать его, не говоря уже о совершенствовании.

Спустя почти шесть лет мы многое изменили; изменился и способ хранения сообщений.
Читать дальше →

Rust 1.68.0: разреженный протокол cargo, локальный pin, обработчик ошибок аллокации

Время на прочтение3 мин
Количество просмотров4.6K

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


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


rustup update stable

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


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

Читать дальше →

Использование Rust в Веб-Разработке

Время на прочтение2 мин
Количество просмотров22K

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

Читать далее...

Пишем игру от первого лица в 2КБ на Rust

Уровень сложностиСредний
Время на прочтение21 мин
Количество просмотров15K

Введение


Поначалу кажется, что создать игру от первого лица без движка или графического API практические невозможно. В этом посте я расскажу, как это сделать при помощи алгоритма под названием ray casting.

Моя цель — показать, что сложную задачу можно разбить на более простые части, и если я всё сделаю правильно, то у вас появится ощущение, что вы сами открыли, как работает игра.

Для начала разберёмся, как работает алгоритм, а затем построчно напишем его. Затем мы пересмотрим код, добавим несколько возможностей и оптимизируем его размер. Я постарался сделать пост максимально доступным и дружелюбным, но вам поможет приличное знание программирования, Rust и основ геометрии.
Читать дальше →

Rust и C++ при создании астродинамической библиотеки

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

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

Изначально я планировал еще привести сравнение производительности, но сейчас понимаю, что будет это не совсем корректно. «Почему?» – спросите Вы меня. Давайте разбираться вместе. Да, пока не начали, оговорюсь сразу, что в данной статье я решил не рассказывать о смысле приводимого кода, т.к. это сразу усложнит восприятие.

Читать далее