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

Rust *

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

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

Оптимизируем кодирование u128 в base62

Уровень сложности Средний
Время на прочтение 4 мин
Количество просмотров 1.2K
Программирование *Rust *
Из песочницы

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

32dca18531a1435480461f99837a5b1d

По некоторым причинам использовать uuid мне не очень нравилось: это довольно длинная строка из 32 символов, а мне надо будет иногда показывать ее пользователям, 6 бит в uuid4 не используются, это константы, расточительно.

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

Новости

Сколько памяти нужно для запуска 1 миллиона конкурирующих задач?

Уровень сложности Средний
Время на прочтение 6 мин
Количество просмотров 12K
Блог компании RUVDS.com Python *Java *Go *Rust *
Аналитика
Перевод

В этой статье я углублённо сравню потребление памяти между асинхронными и многопоточными программами популярных языков вроде Rust, Go, Java, C#, Python, Node.js и Elixir.

Недавно я проводил сравнение производительности нескольких программ, предназначенных для обработки большого количества сетевых подключений. В итоге я увидел огромную разницу в потреблении этими программами памяти, порой в 20 раз и больше. Некоторые потребляли при 10К подключений чуть более 100 МБ в то время, как другие занимали почти 3 ГБ. К сожалению, эти программы были довольно сложными и также отличались своим функционалом, поэтому было бы трудно сравнить их непосредственно и сделать какие-то осмысленные выводы. Тут то у меня и возникла идея создать специальный синтетический бенчмарк.
Читать дальше →
Всего голосов 64: ↑44 и ↓20 +24
Комментарии 43

Rust 1.70.0: протокол ''sparse'' для crates.io, OnceCell и OnceLock, лейблы отладочной информации

Уровень сложности Простой
Время на прочтение 5 мин
Количество просмотров 3.1K
Open source *Программирование *Системное программирование *Компиляторы *Rust *
Перевод

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


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


rustup update stable

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


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

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

Пишем на Python, как будто это Rust

Время на прочтение 19 мин
Количество просмотров 7.2K
Python *Программирование *Совершенный код *Rust *
Перевод

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

Читать далее
Всего голосов 28: ↑24 и ↓4 +20
Комментарии 17

Истории

Как IndVarSimplification применяет математику в вашем коде

Уровень сложности Средний
Время на прочтение 3 мин
Количество просмотров 2.7K
Assembler *Rust *
Из песочницы

Многие оптимизации в компиляторе выглядят естественными. Но IndVarSimplification, предмет этой статьи, сильно выделяется среди них. Это та оптимизация, которая сначала кажется темной магией, но за маской на самом деле скрывается математика.

В этой статье я постарался разобраться, как работает IndVarSimplification. Будет немного кода на Rust, чтение ассемблера и копание в коде LLVM.

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

Я написал одну из самых быстрых библиотек датафреймов

Уровень сложности Сложный
Время на прочтение 9 мин
Количество просмотров 7.5K
Блог компании Timeweb Cloud Python *Программирование *Rust *
Кейс
Перевод
image

1. Вступление


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

Год спустя, написав немало кода, я создал одну из самых быстрых библиотек датафреймов, применимую в Rust и Python. Вот мой первый официальный «Hello World» на polars, размещённый у меня в блоге. Надеюсь, что с помощью этого поста я смогу пояснить читателю некоторые решения, которые мне довелось принять при проектировании, и вам станет понятнее, как Polars работает под капотом.
Читать дальше →
Всего голосов 40: ↑35 и ↓5 +30
Комментарии 9

Пишем на Python как на Rust

Уровень сложности Средний
Время на прочтение 17 мин
Количество просмотров 23K
Python *Программирование *Совершенный код *Проектирование и рефакторинг *Rust *
Перевод

Я начал программировать на Rust несколько лет назад, и это постепенно изменило мой подход к разработке программ на других языках программирования, особенно на Python. До того, как я начал использовать Rust, я обычно писал код на Python очень динамично, без подсказок типов, повсюду передавая и возвращая словари и время от времени возвращаясь к интерфейсам со «строковой типизацией». Однако, испытав на себе строгость системы типов Rust и заметив все проблемы, которые она предотвращает, я внезапно стал сильно беспокоиться всякий раз, когда возвращался к Python и не получал тех же гарантий.

Читать далее
Всего голосов 103: ↑98 и ↓5 +93
Комментарии 41

WebSocket сервер для мини игры обмена файлами (Rust)

Уровень сложности Простой
Время на прочтение 9 мин
Количество просмотров 1.8K
Rust *
Туториал

Всем привет! Это туториал по написанию небольшого WebSocket сервера для мультиплеерной мини игры. Суть игры простая – обмениваешься файлами с другими игроками в небольшом 2D пространстве. Полный код приложений есть в гитхабе, протестировать можно на сайте.

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

Diceroller — разбор реального проекта на Rust

Время на прочтение 8 мин
Количество просмотров 2.7K
Блог компании OTUS Rust *
Перевод

В этой статье мы с вами разберем пример приложения, реализующего (часть) подсистемы генерации урона путем броска дайсов, которое я разработал для системы HERO Champions.

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

Как я приютил rust wasm при помощи yarn

Уровень сложности Сложный
Время на прочтение 4 мин
Количество просмотров 2.5K
Rust *TypeScript *WebAssembly *
Кейс

О том как изучив инструмент, можно навести порядок в проекте.

Решил я тут на днях попробовать соорудить что нибудь на wasm, поскольку ранее начитался про него и выбрал Rust. Это рассказ про то как я затащил wasm на фронтенд без боли.

В чём заключается упомянутая боль?

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

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

Rust, Telegram и GTFS против Петербургского транспорта

Уровень сложности Простой
Время на прочтение 12 мин
Количество просмотров 5.3K
Мессенджеры *Open source *Геоинформационные сервисы *Rust *Транспорт
Кейс

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

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

Читать далее
Всего голосов 30: ↑28 и ↓2 +26
Комментарии 7

32 полезных Rust крейта, о которых вы могли не знать

Уровень сложности Простой
Время на прочтение 19 мин
Количество просмотров 4.7K
Rust *
Дайджест

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

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

Дополнить Rust-библиотеку примерами? Легко

Время на прочтение 8 мин
Количество просмотров 1.3K
Блог компании OTUS Rust *
Перевод

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

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

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

Ускоряем Python в сто раз при помощи менее чем ста строк на Rust

Уровень сложности Средний
Время на прочтение 15 мин
Количество просмотров 16K
Блог компании RUVDS.com Python *Rust *
Туториал
Перевод

Однажды на работе у нас возникла проблема с производительностью одной из наших основных Python-библиотек.

Эта библиотека формирует фундамент нашего конвейера 3D-обработки. Это довольно большая и сложная библиотека, использующая NumPy и другие научные пакеты Python для выполнения широкого спектра математических и геометрических операций.

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

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

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

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

Если вы хотите сразу перейти к получившемуся коду, то читайте раздел «Подведение итогов».
Читать дальше →
Всего голосов 76: ↑72 и ↓4 +68
Комментарии 10

Microsoft переписывает код ядра и некоторых библиотек Windows на языке Rust. Но зачем?

Время на прочтение 4 мин
Количество просмотров 42K
Блог компании Selectel Rust *Разработка под Windows *Софт
microsoft-is-rewriting-core-windows-libraries-in-rust-v0-Nsy2e3-Z9k4-XXJv-6k-XV9d4a-Mmj-VKb-Th-Cj-Sh

Недавно стало известно о том, что команда разработчиков Windows 11 занимается новым типом работы — переписывает ряд модулей ядра и системных библиотек операционной системы на Rust. При этом работа уже в разгаре, это не просто анонс проекта или планы на будущее — реализация идет полным ходом. Зачем корпорации все это понадобилось?
Читать дальше →
Всего голосов 108: ↑104 и ↓4 +100
Комментарии 226

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

Уровень сложности Сложный
Время на прочтение 8 мин
Количество просмотров 2K
Блог компании Timeweb Cloud Программирование *Rust *Системы сборки *DevOps *
Туториал
Перевод
image

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


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

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

Стоит начать применять Nix при работе в репозитории – и «как раньше» уже не захочется. Никаких больше README со списком команд Homebrew, apt, pacman и др., которые было бы необходимо выполнять. Сборка тонких контейнеров Docker делается в два счёта, без необходимости вручную вручную обрабатывать множество слоёв, из которых требуется копировать сборочные артефакты.
Читать дальше →
Всего голосов 24: ↑22 и ↓2 +20
Комментарии 1

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

Уровень сложности Простой
Время на прочтение 2 мин
Количество просмотров 2.3K
Open source *Программирование *Системное программирование *Компиляторы *Rust *
Перевод

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


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


rustup update stable

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


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

Читать дальше →
Всего голосов 8: ↑8 и ↓0 +8
Комментарии 0

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

Время на прочтение 12 мин
Количество просмотров 3.1K
Блог компании Издательский дом «Питер» Python *Программирование *C *Rust *
Перевод
Cosmopolitan Libc предоставляет набор отладочных возможностей, повышающих удобство разработки на C: трассировка вызовов функций, интеграция с gdb, среда выполнения ASAN/UBSAN и многое другое! На C написано много быстрого и критически важного кода. Если вы пользуетесь программами, написанными на C, если вам приходится предусматривать интерфейсы для работы с библиотеками на C, исправлять баги в коде на C, либо даже переписывать имеющуюся на С программу на каком-то другом языке, то именно этот инструмент помогает понять, что делается в вашем коде на C. Отладка – это не просто россыпь инструкций printf. В этом посте будет рассмотрено, как Cosmopolitan Libc помогает наверняка и как следует отлаживать код C. Все примеры находятся в этом репозитории.
Читать дальше →
Всего голосов 14: ↑11 и ↓3 +8
Комментарии 2

Rust 1.69

Уровень сложности Простой
Время на прочтение 2 мин
Количество просмотров 4K
Программирование *Системное программирование *Компиляторы *Rust *
Перевод

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

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

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

Читать далее
Всего голосов 18: ↑13 и ↓5 +8
Комментарии 2

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

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

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

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

Вклад авторов

Работа