Rust
1.27K subscribers
74 photos
43 videos
11 files
105 links
Полезный контент по программированию на Rust
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
Как я снизил время инкрементных сборок Rust на 40%

Я форкнул и модифицировал компилятор Rust rustc. Одна фича — кэширование расширения процедурных макросов — привела к снижению времени инкрементных сборок на 11-40% в различных реальных крейтах. Благодаря этому ускорились dev-сборки и меньше стал тормозить rust-analyzer (IDE IntelliSense).

Если вы специалист в повышении производительности компилятора Rust, то можете сразу перейти к разделу «Кэширование расширения макросов: ускорение инкрементных сборок Rust на 40%».

https://habr.com/ru/articles/807791/

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

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

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

Rus https://habr.com/ru/companies/ruvds/articles/739054/

Eng https://pkolaczk.github.io/memory-consumption-of-async/

👉 @rust_lib
Почему я отказался от разработки игр на Rust, часть 1

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

https://habr.com/ru/articles/811163/

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

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

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

константные биты в uuid4:
uuid.uuid4().bytes[6] & 0b11110000 # == 64
uuid.uuid4().bytes[8] & 0b11000000 # == 128


https://habr.com/ru/articles/739936/

👉 @rust_lib
Список ресурсов для изучения Rust - дорожная карта от начинающего до продвинутого уровня

https://github.com/ImplFerris/LearnRust

👉 @rust_lib
Есть ли какая-нибудь ошибка в этом коде?

👉 @rust_lib
Книга рецептов Rust

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

Часть 1
https://habr.com/ru/companies/timeweb/articles/811915/

Часть 2
https://habr.com/ru/companies/timeweb/articles/813791/

👉 @rust_lib
Любите ли вы Rust, как люблю его я?

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

Он безопасный. Это, правда, не совсем так, но если взять условного новичка, который напишет программу на C и условного новичка, который напишет программу на Rust - шанс, что вторая выйдет более безопасной окажется существенно выше. По крайней мере, атака через переполнение буфера, почти гарантировано, провалится (не станем отрицать наличие дарований, которые даже там, где это почти невозможно, смогут заложить уязвимость).

Он необычный. Уверен, вы сталкивались со странными языками программирования. Такими, которые ломают привычную парадигму и заставляют мыслить иначе. Например, люди, всю жизнь работающие с объектно-ориентированным подходом, нередко, теряются, когда сталкиваются с функциональным программированием, т.к. там иной подход. Да даже далеко ходить не надо; столкновение с попыткой воспользоваться OpenGL из привычного C++, в какой-то момент, рвёт все шаблоны и в воздухе повисает лишь два вопроса: "какого..." и "зачем вы так со мной". Это, разумеется, проходит, но не сразу.

Простите, отвлёкся. Так вот, Rust заставит вас взглянуть на программирование по-другому, то есть совсем иначе. Он заставит вас писать код так, как вы до него не писали, потому что все старые парадигмы просто не работают. "Хотите отправить структуру в функцию, а потом ещё поработать с ней? Только не в мою смену!". Это существенно развивает воображение.

От отлично документирован. Нет, я несправедлив к Rust. Он великолепно документирован. Почти про любой аспект работы с ним вы найдёте отдельную книгу, где вам от "а" до "я" всё разжуют. Но, вполне вероятно, вы всё равно не поймёте, т.к. чтобы понять это, неплохо бы прочитать ещё несколько книг, где разжёвывается что-то ещё. Зато через несколько месяцев мозг вырастет на размер, а то и на все два!

Он неисчерпаем. Да, порой мне именно так и кажется. Есть множество способов сделать то, что я только что сделал, только по-другому; есть своя std библиотека и я не могу даже представить, чего в ней нет, потому что создаётся ощущение, что в ней есть чуть менее, чем всё.

Он дружелюбен. Компилятор всегда подскажет, где вы ошиблись и даже предложит решение, как сделать так, чтобы проблему исправить, а также добавит ссылку на справку. И иногда его рекомендация даже сработает. Но в целом, журнал из 30 ошибок на 3 строчки кода, в какой-то момент, уже перестаёт пугать и даже удивлять.

Он поддерживается и развивается. У него "из коробки" есть свой собственный менеджер пакетов (вроде npm или pip), а также реестр самих пакетов. Из недостатков - не всегда можно получить исходники устанавливаемого пакета или библиотеки (поправьте, если это не так).

Его можно использовать для web. Через webassembly. Именно по этой причине, собственно, я с ним и связался. Пробовал делать эмуляции роста плесени, а последнее - пробовал на нём реализовать параллакс эффект на веб-странице не прибегая к js (если интересно, про это можно почитать тут). wasm-pack позволяет собирать webassembly пакеты и встраивать в своё приложение. Ещё можно делать и при помощи ecmascripten для C++, но, почему-то, C++ не так интересен для меня.

Он заставляет учиться. Для начала, вы будете вынуждены разобраться, как устроена память приложения, как примерно работают компиляторы и что происходит "под капотом", когда исходный код превращается в бинарник (конечно, если ещё не знали этого). Не то, чтобы это сильно поможет вам в написании этого самого кода, но некоторые вещи следует знать просто ради того, чтобы воспользоваться ими в самый непредсказуемый момент.

👉 @rust_lib
Ржавое наследование реализаций

В моей первой статье речь пойдет о комбинации примитивных конструкций, позволяющих организовать наследование реализаций и композицию состояний. Поочередно разберу, от простых в использовании конструкций, до комплексных prod-ready решений, которые могут найти повсеместного применения в разработке и публичных контейнерах. Здесь не будет зависимостей, макросов, Rc, Box и тд. - исключительноno_std.

https://habr.com/ru/articles/741458/

👉 @rust_lib
Интероперабельность между С++ и Rust

Этот пост основан на презентации, с которой автор выступил на конференции EuroRust 2022 в Берлине. Доступны слайды и видеозапись.

Автор, работающий в компании Slint, участвует в создании UI-инструментария, написанного на Rust. Этот UI-инструментарий может использоваться и с другими языками и экосистемами, кроме той, для которой был написан, поэтому в Slint предусмотрены API для C++ и даже для Javascript. Естественно, эти API должны восприниматься как совершенно нативные для разработчиков, имеющих дело с этими языками. Именно поэтому ребром стоит вопрос о том, как создать нативно воспринимаемые API к коду Rust для пользователей, привыкших работать с C++.

https://habr.com/ru/companies/timeweb/articles/743540/

original https://slint.dev/blog/rust-and-cpp

👉 @rust_lib
This media is not supported in your browser
VIEW IN TELEGRAM
Быстрое извлечение доминирующих цветов CLI

Это интерфейс командной строки для быстрого извлечения доминирующих цветов из локальных или удаленных изображений.

Он построен на Rust и по сути основан на реализации алгоритма Colors Thief, написанного
Евгением Рейзнером.

https://github.com/AbdoulMa/copycolors

👉 @rust_lib
Ловим спутники без поворотного устройства

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

https://habr.com/ru/articles/820145/

👉 @rust_lib
Gabriel2 — Open Source асинхронная библиотека для модели Акторов на Rust с использованием Tokio

В целом мне очень нравится концепция Акторов в асинхронном программировании. Низкоуровневое программирование с использованием очередей сообщений и обработчиков сообщений не позволяет мыслить в терминах высокоуровневых абстракций. Акторы позволяют абстрагироваться от низкоуровневых деталей. Другими словами, Акторы посылают сообщения друг другу. А то, что Акторы на самом деле работают на очередях сообщений, нам не важно. Это скрыто 'под капотом'

Во время изучения Tokio, я решил написать свой проект для модели Акторов. Как раз низкоуровневая часть Tokio позволила это сделать. Так появилась библиотека Gabriel2.

https://habr.com/ru/articles/821267/

👉 @rust_lib
This media is not supported in your browser
VIEW IN TELEGRAM
Halloy - IRC Client

Halloy - это IRC-клиент с открытым исходным кодом, написанный на Rust с использованием библиотеки Iced GUI. Его цель - предоставить простой и быстрый клиент для платформ Mac, Windows и Linux.

https://github.com/squidowl/halloy

👉 @rust_lib
Микросервисы Rust в серверном WebAssembly

Язык программирования Rust за последние несколько лет значительно распространился. Он несколько лет подряд считается самым любимым языком программирования среди разработчиков и включён в состав ядра Linux. Rust позволяет разработчикам писать корректные программы, обеспечивающие безопасность при работе с памятью, а также такие же компактные и быстрые, как на языке C. Он идеально подходит для создания инфраструктурного программного обеспечения, включая серверные приложения, от которых требуется высокая надёжность и производительность.

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

https://habr.com/ru/companies/timeweb/articles/747582/

👉 @rust_lib
Криптография на Rust и немного FFI

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

Да, определенно. Я считаю, что приставка "крипто" любому словосочетанию придает привкус гигантской яхты дрейфующей где-то в Майами.

В итоге, выбор упал на Rust потому что я уже работал с ним, и знаю, что crates.io изобилует всякими библиотеками для работы с разнообразными криптографическими функциями.

https://habr.com/ru/articles/748534/

👉 @rust_lib
Реализуем Type inference на Rust — Часть #1: Unification

Если вы пишете свой язык программирования, то вы наверное слышали о type inference. В этом цикле статей, без лишней теории, мы наглядно разберем как это работает и реализуем свой на Rust.

https://habr.com/ru/articles/748978/

👉 @rust_lib
Реализуем Type Inference на Rust — Часть #2: Простой Lambda Calculus

Если вы пишете свой язык программирования, то вы наверное слышали о type inference. В этом цикле статей, без лишней теории, мы наглядно разберем как это работает и реализуем свой на Rust.

https://habr.com/ru/articles/753180/

👉 @rust_lib
Blaze: ускорение ZK для программируемой пользователем вентильной матрицы

Чтобы сделать ускорение ППВМ, или программируемой пользователем вентильной матрицы, и графического процессора одинаково удобным для разработчиков, в Ingonyama разрабатывают решения-ускорители ППВМ для типовых примитивов ZK.

С Blaze  —  библиотекой Rust для ускорения ZK на основе ППВМ компании Xilinx  —  ускорение ППВМ становится доступным для разработчиков ZK.

https://medium.com/@ingonyama/introducing-blaze-zk-acceleration-for-fpga-6f5f7cc50e1f

👉 @rust_lib