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

Rust *

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

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

Проблема «error: future cannot be sent between threads safely» при использовании Rust-библиотек Tokio и Actix

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

Приложения на Rust часто используют асинхронные библиотеки, такие как Tokio и Actix. Эти библиотеки предоставляют инструменты для асинхронного ввода-вывода и параллельных вычислений и т.д. Однако иногда возникают проблемы при совместном использовании разных асинхронных библиотек.

Сегодня я хочу поделиться с вами опытом решения одной из распространенных проблем при работе с библиотеками Tokio и Actix. Конкретно, мы рассмотрим ошибку "error: future cannot be sent between threads safely", которая может возникнуть, когда вы пытаетесь использовать клиент Actix внутри асинхронной функции, запущенной с помощью Tokio. Я расскажу вам, как преодолеть эту проблему.

Читать далее

Автоматизация разработки с помощью подхода DB-first

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

Интеграция с БД - привычно сложная и хрупкая часть большинства кодобаз, постоянно отвлекающая внимание разработчиков и раздувающая сроки. Какой бы хайпующий фреймворк вы ни пробовали, вы неизбежно обнаруживаете себя борющимся с одними и теми же симптомами, но ощущение того, что проблема могла бы решаться проще не покидает вас. Знакомо?

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

Читать далее

Вышел Chipmunk.v3

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

Вышла новая версия программы для просмотра и анализа логов — Chipmunk v.3. Инструмент был полностью переработан с упором на производительность и переосмыслен с акцентом на простоту и удобство использования. Под капотом очень краткое описание нововведений и возможностей.

Читать далее

Идиоматическая обработка ошибок в Rust

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

Вы забудете о необработанных исключениях, если научитесь обращаться с ошибками, как это принято в Rust


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

Поскольку в Rust не предусмотрены исключения, любая функция обязана возвращать либо значение, либо "панику". Когда функция паникует, процесс сразу же завершается и предоставляет вызывающей стороне конкретную обратную связь. Чисто технически можно отлавливать случаи паники в Rust при помощи catch_unwind, но постоянно так делать не рекомендуется. Вместо этого в Rust предлагается перечисление Result; пользуясь им, разработчик вынужден обрабатывать все ошибки сам.

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

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

Реализуем на Rust пул потоков с балансировкой нагрузки, пользуясь только стандартной библиотекой

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

В программировании «пулом потоков» (thread pool) называется паттерн проектирования, обеспечивающий конкурентное выполнение компьютерной программы. Эта модель также может именоваться «worker crew» (рабочая бригада) или «replicated workers» (самовоспроизводящиеся задачи). Пул держит наготове множество потоков, ожидающих, пока владеющая им программа не выделит ему в конкурентное выполнение ряд задач
— по Википедии


Репозиторий: github.com/arindas/sangfroid

Этот пост написан в основном под впечатлением от лекции Роба Пайка "Конкурентность – это не параллелизм".

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

Собственный строковый тип на Rust

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

Писать компиляторы — моё хобби, ничего не могу с собой поделать. Поэтому я пишу и много парсеров. В программировании систем обычно лучше попытаться сделать память общей, чем использовать её многократно, поэтому мои типы AST обычно выглядят так.

pub enum Expr<'src> {
  Int(u32)
  Ident(&'src str),
  // ...
}

Когда мы парсим идентификатор, то вместо копирования его названия в новую String мы заимствуем его из входной исходной строки. Это позволяет избежать дополнительных распределений, дополнительного копирования и экономит слово на представлении данных. Компиляторы могут быть очень требовательны к памяти, поэтому стоит выбирать краткое представление.
Читать дальше →

Enum в стиле Rust-а в Python

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

Я писал модуль для пет-проекта, мне потребовались энумерации в стиле Rust-а в питоновском коде, я их реализовал.

Читать далее

Можно ли доверить компилятору оптимизацию вашего кода?

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

Существует три уровня понимания того, как работает SIMD (ну, по крайней мере, на данный момент я нахожусь на 3-м уровне):

  1. Компиляторы умны! Они автоматически векторизуют весь код!
  2. Компиляторы тупы, автоматическая векторизация хрупка, ее очень легко нарушить несвязанными изменениями в коде. Всегда лучше вручную написать конкретные инструкции SIMD.
  3. Написать SIMD вручную действительно сложно — для каждой архитектуры процессора придется писать разный код. Кроме того, вы, вероятно, понимаете, что компилятор напишет на ассемблере скалярный код лучше вас. Что заставляет вас думать, что вы превзойдете компилятор в SIMD, где еще больше странных инструкций и запретов? Компиляторы — это инструменты. Они могут надежно векторизовать код, если он написан в форме, поддающейся векторизации.

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

Упрощенный пример на Rust обучения нейронной сети на основе Candle Framework от Hugging Face

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

Я недавно изучал примеры использования нейронных сетей из библиотеки Candle от Hugging Face и обратил внимание, что они довольно сложны для понимания людей, которые только начинают знакомство с нейросетями. Поэтому я решил написать максимально упрощенный пример кода на Rust, который демонстрирует обучение и использование простейшей нейросети.

Читать далее

Идиоматический код на Rust для тех, кто перешел с других языков программирования

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

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

Читать далее

«Я пропагандирую коллегам переход на Rust». В статье — 6 основных причин

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

Мы побеседовали с руководителем направления системного программирования в «Криптоните» Александром Авраменко о карьерном пути Rust-разработчика, особенностях языка Rust и его применении к моделям машинного обучения в высоконагруженных системах.

Читать далее

Rust 1.72.0: потенциально полезные отключенные элементы, неограниченные константные вычисления

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

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


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


rustup update stable

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


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

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

Разрабатываем свою ORM библиотеку на Rust: Оптимизация и Простота

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

Почему я решил разработать свою ORM библиотеку?

Мои первые шаги в мире ORM были сделаны с помощью библиотеки Diesel. В то время он был одним из немногих вариантов для работы с базами данных на Rust, и, конечно же, его популярность не оставила меня равнодушным. Вскоре, однако, я обратил внимание на SeaORM - другую перспективную библиотеку для ORM на Rust, которая также набирала обороты. Но у меня были с ними некоторые проблемы.

Читать далее

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

Как легко перейти с Java на Rust: Особенности и советы

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

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

Кроме того, я создал три open source библиотеки на Rust, которые публиковал на GitHub. Это позволило мне лучше изучить идиоматичный Rust, работу с асинхронностью и т. д.

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

Читать далее

Работа с JSON в Rust. Методичка

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

Привет Хабр! Меня зовут Алексей, я разработчик Группы "Иннотех" Холдинга Т1.

Цель статьи - познакомить читателя с библиотеками для работы с JSON в Rust. Если вы никогда не парсили JSON на языке Rust и ищите с чего начать, то эта статья для вас!

В статье будут разобраны примеры работы со строками и файлами, познакомимся с библиотеками serde и serde_json

Читать далее

Мне 15 лет и я написал QR код генератор на Rust

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

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

Немного объяснений моего кода и вообще про QR-коды, надеюсь, вам понравится.

Читать далее

Тимлид про «чекбоксики» на собеседованиях, тонкости управления Rust-командой и мотивацию сотрудников

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

В «Криптоните» работает Александр Авраменко. Он возглавляет направление системного программирования и вместе с командой создаёт сетевые сервисы и конвейеры обработки потоков больших данных с применением моделей машинного обучения в реальном времени.

Александр рассказал нам в интервью об особенностях управления группой разработчиков, «red flags» на собеседованиях, мотивации команды и ситуации на рынке труда «растистов». А скоро выйдет вторая, «техническая» часть интервью — о языке программирования Rust, проектах и тех.стеке команды.

Читать далее

Как я написал JVM на Rust

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

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

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

Читать далее

Regex engine internals as a library [full]

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

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

Если всегда было интересно, как оно там под капотом устроено, а в книге Фриддла или в книге дракона вы не нашли подробностей, то добро пожаловать - будет интересно и очень сложно. Для понимания требуются знания основ теории автоматов (знать и понимать отличия ДКА от НКА) и иметь базовое представление о том, что такое регулярные выражения.

Так же прошу сообщать об ошибках и опечатках, чтобы я мог их исправить.

Прыгнуть в кроличью нору

Просто спарсь что угодно с помощью языка Rust (ну… или просто скачай файл)

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

В данной статье говорится о новой библиотеке, значительно упрощающей парсинг на Rust.

Установка (запись в Cargo.toml под [dependencies]): scr = "1.0.2"

Читать далее