Как стать автором
Обновить
28.38

Rust *

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

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

Что расскажут на PiterPy 2023: много питонов и немного ржавчины

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

Python применяется для совсем разных задач, от ML до бэкенда. О каких темах тогда говорить на конференции по Python? Обо всех главных сразу. На приближающемся PiterPy 2023 среди докладов будут и «В Python есть готовый фронтенд для вашего компилятора», и «Django + Keycloak: доверьте аутентификацию профессионалам», и «Мастер-класс по взлому».

Более того: будут даже доклады со словом «Rust» в названии, при чём оно тут? А ещё есть тема «ChatGPT как раб разработчика», что под ней скрывается? А закрывать онлайн-часть и вовсе будет биоинформатик Михаил Гельфанд, что он расскажет? И, наконец, будет даже доклад о настоящих питонах!

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

Программа PiterPy 2023
Всего голосов 11: ↑10 и ↓1+11
Комментарии2

Программируем биржу: почему мы выбрали Rust?

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

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

Читать далее
Всего голосов 20: ↑11 и ↓9+2
Комментарии50

Ржавое наследование 2. Славянский проброс Get/Set

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

Вторая статья по теме, развивающая мои теоретические выкладки про наследование реализаций из первой части. В этой части пойдет речь о доступе к данным через цепочку вложенных структур. Все также никакой лишней нагрузки в виде: Rc, RefCell, и тд, только no_std и немного nightly в конце. Но чтобы понимать происходящее требуется изучить первую статью: ссыль, хотя и будет предоставлена совсем минимальная вводная.

Продать душу дьяволу
Всего голосов 14: ↑14 и ↓0+14
Комментарии4

Как я проектирую и разрабатываю расширения Python на Rust

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

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

Читать далее
Всего голосов 16: ↑14 и ↓2+15
Комментарии12

Истории

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

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

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

Читать далее
Всего голосов 8: ↑5 и ↓3+6
Комментарии53

Сборка мусора: как это делается в системном программировании

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

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

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

Объединим две эти цели – и обнаружим, сколько же существует странных и магических методов для неблокирующего совместного использования данных в разных потоках. Давайте поговорим об одном из этих методов – «чтение-копирование-запись» (RCU).
Читать дальше →
Всего голосов 25: ↑22 и ↓3+32
Комментарии10

Алгебраические Типы Данных

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

Что же такое Алгебраические Типы Данных(Algebraic Data Types(ADT))? Обычно определение состоит из терминов теории типов и обязательно с примером на Haskell. Но на практике всё не так сложно.

Читать далее
Всего голосов 15: ↑12 и ↓3+11
Комментарии15

Самый маленький Docker образ Rust приложения

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

Привет %username%, эта статья про то, как поместить Rust приложение в Docker и получить образ размером с бинарный файл (6 Мб). А также про причины, которые привели к переходу с NodeJS на Rust. Отдельная пара слов о проблемах вначале, переходе на Go, и том, как команда Rust устранила эти проблемы за пол года.

TL;DR Dockerfile в конце статьи и ссылка на example репозиторий

Читать далее
Всего голосов 36: ↑35 и ↓1+43
Комментарии16

Обновление Rust-библиотеки Ormlib, добавлена поддержка MySQL

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

Я рад сообщить, что вышла новая версия моей Rust-библиотеки для объектно-реляционного отображения - Ormlib 1.0.1. В этой версии было проделано много работы по улучшению архитектуры библиотеки.

В предыдущей версии 0.3.3, Ormlib работал только с базой данных SQLite. Это ограничивало сферы применения библиотеки. В версии 1.0.1 была проделана большая работа по рефакторингу кода, чтобы абстрагировать ее от конкретной реализации СУБД.

После рефакторинга я использовал механизм "features", который позволяет компилировать Ormlib либо с поддержкой SQLite, либо с поддержкой MySQL.

Читать далее
Всего голосов 9: ↑3 и ↓6-1
Комментарии19

Rust 1.73.0: новый формат сообщений о панике, изменение в работе с локальными данными потока

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

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


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


rustup update stable

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


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

Читать дальше →
Всего голосов 18: ↑17 и ↓1+19
Комментарии2

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

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

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

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

Читать далее
Всего голосов 6: ↑3 и ↓30
Комментарии21

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

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

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

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

Читать далее
Всего голосов 20: ↑5 и ↓15-9
Комментарии14

Вышел Chipmunk.v3

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

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

Читать далее
Всего голосов 9: ↑8 и ↓1+8
Комментарии10

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

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

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

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


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

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

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

image
Читать дальше →
Всего голосов 19: ↑16 и ↓3+17
Комментарии6

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

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

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


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

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

image
Читать дальше →
Всего голосов 15: ↑14 и ↓1+21
Комментарии1

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

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

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

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

Когда мы парсим идентификатор, то вместо копирования его названия в новую String мы заимствуем его из входной исходной строки. Это позволяет избежать дополнительных распределений, дополнительного копирования и экономит слово на представлении данных. Компиляторы могут быть очень требовательны к памяти, поэтому стоит выбирать краткое представление.
Читать дальше →
Всего голосов 48: ↑47 и ↓1+63
Комментарии6

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

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

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

Читать далее
Всего голосов 7: ↑4 и ↓3+2
Комментарии29

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

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

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

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

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

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

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

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

Читать далее
Всего голосов 7: ↑6 и ↓1+5
Комментарии5

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

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

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

Читать далее
Всего голосов 44: ↑30 и ↓14+23
Комментарии39