Как стать автором
Поиск
Написать публикацию
Обновить
51.87

Rust *

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

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

YOLO на Rust: производительность, удобство и открытость

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

Сегодня хочу рассказать вам о библиотеке yolo_detector — простой, удобной и производительной обёртке для использования моделей компьютерного зрения YOLO на языке Rust.

Читать далее

Создание своего ядра на Rust

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

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

Читать далее

Telegram AI Companion: веселый проект на Rust, Telegram и локальном ИИ

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

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

Недавно я собрал небольшой, но бодрый pet-проект — Telegram AI Companion. Это Telegram-бот, который умеет болтать с вами, используя локальную языковую модель через LocalAI. Без OpenAI, без облаков — всё на своём железе.

Цель проекта — не революция в AI, а именно учебное и увлекательное погружение в Rust, асинхронность, Telegram API и локальные LLM-модели. Такой себе “бот-компаньон”, но больше для разработчика, чем пользователя :)

Если вам интересно:

Читать далее

Type Driven Development на практике

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

Разработка через типы (Type-Driven Development, TypeDD) — это методология программирования, при которой вы начинаете с написания определений типов, которые служат точной спецификацией вашей программы. Вместо того чтобы сначала писать код, а потом добавлять тесты или типы, вы используете компилятор как интерактивного ассистента, который направляет вас к созданию программы, удовлетворяющей заданным типам.

Idris — это чистый функциональный язык программирования, созданный Эдвином Брэди, который идеально подходит для этого подхода благодаря поддержке зависимых типов.


Но попробуем использовать его идеи на практике вне Idris.

Попробуем сравнить такие метрики как
1. Время проектирования (момент, после которого разработчик может больше не соприкасаться с предметной областью, а руководствоваться только ТЗ)
2. Время до выкатки на прод
3. Частота ошибок на проде (и как следствие, ущерб бизнесу и затраты на сопровождение)

Читать далее

Self-hosted URL shortener + Raycast

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

Привет Хабр!

Я обожаю сокращать ссылки через собственный URL shortener. Это как clck.ru, только всё работает на собственной архитектуре и данные об использовании никуда не утекают. При этом домен я тоже могу поставить какой-нибудь красивый (к примеру - hdla.cloud).

Читать далее

Почему Rust так мало волнует производительность компилятора

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

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

Кроме того, наряду с обычными жалобами на время компиляции, я начал замечать от раздражённых разработчиков на Rust и подобные заявления: «Почему Rust Project не занимается активнее этой важной и очевидной проблемой? Почему с этим что-нибудь не сделают?». Я участник рабочей группы по производительности компилятора Rust, поэтому воспринимаю такие вопросы очень серьёзно. И, разумеется, у меня есть мнение по этому поводу. В этом посте я приведу свои размышления, способные служить ответами на эти (и похожие) вопросы.

Предупреждение: все выраженные в этом посте мнения исключительно мои и необязательно отражают точку зрения Rust Project (группы контрибьюторов и мейнтейнеров тулчейна Rust).

Читать далее

Dart Native Assets: Полное руководство от новичка до профи

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

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

Native Assets - это система, которая автоматизирует весь этот процесс. Она позволяет вашему Dart-пакету "включать в себя" нативный код и автоматически его компилировать и подключать.

Читать далее

Не стоит пугаться машинного кода

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

Моим первым языком программирования был ActionScript. Написание кода для Macromedia Flash максимально далеко от голого железа, и эта специфика работы глубоко засела в моём сознании. В результате меня интересовали преимущественно высокоуровневые языки для веб-программирования. Низкоуровневые же казались непостижимыми. Со временем я постепенно из разных источников узнавал о них всё больше, но это моё убеждение оставалось прежним. Низкоуровневые языки пугают, и машинный код подтверждал это наглядно. Когда я обращался к Google с запросом «понятный машинный код», то результат выдачи чаще представлял нечто пугающее и отталкивающее, нежели полезное для обучения.

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

Машинный код вовсе не страшен. Если вы можете обеспечить, чтобы документ JSON соответствовал схеме JSON, то без проблем сможете писать машинный код.

Читать далее

Как написать свою ОС: руководства на Rust и C

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

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

К слову, Rust набирает обороты: первое место в категории любимых языков программирования по версии Stack Overflow.

Читать далее

Введение в hyper: серверная часть

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

hyper - это низкоуровневая HTTP-библиотека на Rust. Обычно она служит строительным блоком для более высокоуровневых библиотек, таких как axum, tonic, reqwest и других. Но иногда знание hyper могут требовать в вакансиях.

hyper предоставляет api как для клиента, так и для сервера, но в этой статье мы сосредоточимся исключительно на серверной части.

Читать далее

Rust для ребятишек

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

Привет.

Статья не предполагает, что вы узнаете что-то новое из Rust, или вы научитесь ему. Это скорее эксперимент показать ребенку как он выглядит изнутри, а не как на нем надо писать.

То есть, еще раз, разработчики привыкли смотреть на язык с позиции как надо им, и если язык не укладывается в их парадигму, это начинает бесить.

Тут я постарался посмотреть на ситуацию с точки зрения "книжки с картинками", как он живет, а не как мы привыкли.

Дисклеймер — в статье речь не про Copy-тип, к которым относятся, например,  i32, f64, bool, char, &T. А про move-типы (например, String), которые перемещают значения.

Ну, попробуем.

Отталкиваемся от того, что в Rust значением (ячейкой памяти) может владеть только одна переменная. Введем обозначения: let — "позволим", = — "владеть".

Получаем следующее.

Читать далее

Earcut на битах

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

Earcut - базовый, почти учебный алгоритм триангуляции, но при некоторых раскладах он обгоняет более "продвинутые" решения.

Ампутировать

Слишком много открытых файлов

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

Недавно я работал над достаточно большим проектом на Rust. К моему удивлению, мне никак не удавалось заставить тесты работать правильно.

Команда cargo test запускала выполнение всех тестов в репозитории, но спустя пару миллисекунд все тесты завершались сбоями из-за не очень знакомой мне ошибки:

Io(Os { code: 24, kind: Other, message: "Too many open files" })

К счастью, описание ошибки достаточно понятно, поэтому я смог за приемлемое время разобраться в её причинах. Я начал копаться и в процессе исследований кое-чему научился.

Читать далее

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

Один на один с Rust

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

Всем привет! Я Влад Лунин, занимаюсь анализом сложных угроз в экспертном центре безопасности Positive Technologies. В последнее время часто приходится сталкиваться с вредоносным ПО (ВПО), написанном на Rust, поэтому хочу поделиться своим опытом реверса исполняемых файлов, написанном на этом языке. ВПО бывает как очень простое, так и очень сложное в своей реализации, и чаще всего эта сложность обусловлена особенностями Rust. Расскажу, какие подходы применяю для успешного реверса, а также про сложности, с которыми сталкивался, и как их преодолевал.

Начинаем

Плохие паттерны в типах — «Утка-дублер»

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

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

Читать далее

Trait'ы в Rust — от основ к диспетчеризации

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

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

Читать далее

Может, если бы у C++ было больше времени, он стал бы лучше?

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

В своей предыдущей статье [перевод на Хабре] я говорил о множестве недостатков C++, которые, по сути, устранил Rust. Благодаря этому код теперь легко использовать правильно и сложно использовать неверно. Я не говорил о безопасности по памяти, просто привёл пример того, что пользователь функции не может случайно поменять местами аргументы количества и цены.

На написание статьи меня вдохновил доклад Мэтта Годболта о том, как можно сделать интерфейсы C++ более надёжными: Correct by Construction: APIs That Are Easy to Use and Hard to Misuse. Вам стоит его посмотреть!

В той статье я сказал, что Rust гораздо лучше помогает разработчику, возможно, благодаря тому, что у него были десятки лет, чтобы учиться. В конце концов, первая версия C++ была выпущена в начале 80-х, а Rust — в начале 2010-х. Если дать C++ несколько десятков лет для обучения, то, разумеется, появятся новые структуры, которые будут обладать высоким качеством и которые сложно использовать неправильно.

Но так ли это?

Читать далее

Выравнивание AST (и других структур данных, используемых при работе с компилятором)

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

Два варианта абстрактного синтаксического дерева (AST) для выражения a * b + c.

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

Многие по-разному понимают, что такое арены или регионы, поэтому здесь я собираюсь называть интересующую меня разновидность этих структур данных «выровненной», а сам процесс — «выравниванием» (flattening). Выровненная арена содержит всего один тип, то есть, в сущности, это обычный массив. В таком массиве можно обойтись индексами, тогда как обычно для работы с массивом требуются указатели. Здесь мы поговорим прежде всего о выравнивании абстрактных синтаксических деревьев (AST), но вообще описанная идея применима с любой структурой данных, отягощённой указателями.

Чтобы изучить выравнивание, мы дважды напишем простейший интерпретатор: сначала как обычно, а затем с применением выравнивания. Логика поста прослеживается по коду из этого репозитория, где можно сравнить две ветки. Здесь важнее всего отметить, что изменения минимальны, но при этом микробенчмарки показывают, что после выравнивания код работает в 2,4 раза быстрее. Благодаря выравниванию не только повышается производительность, но и сам код становится эргономичнее, на чём я также остановлюсь.

Читать далее

Как построить игру на Rust аналог Super Mario

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

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

Читать далее

Ускоряем работу видеодекодера rav1d на 1%

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

Какое-то время назад memorysafety.org объявил о конкурсе по повышению производительности rav1d — порта AV1-декодера dav1d на Rust.

Моя фамилия Равид, совсем как название декодера, поэтому я решил, что будет забавно попробовать (хоть я и, вероятно, не смогу участвовать в конкурсе).

Эта статья посвящена двум найденным мной небольшим улучшениям производительности (первый PRвторой PR) и рассказу о том, как я их нашёл.

Читать далее