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

Rust *

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

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

Cоревнования по программированию для тех, кто пишет на Rust

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

В этом году мы решили провести RustCon Contest — соревнования по программированию для тех, кто пишет на Rust или только начинает его изучать. Старички конференции помнят, что мы уже проводили его в далеком 2021. Интересно посмотреть, как изменились ваши скиллы за эти годы. В этом году мы проводим его вместе с компанией «Криптонит», которая предоставила задачи для участников.

Занявший 1 место получит билет на RuctCon и памятную футболку, обладатель 2 места — билет на RustCon, а бронзовый призер — футболку. Все остальные участники  — скидку 10% на RustCon 2024.

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

Новости

Асинхронный Rust в трех частях. Часть третья: IO

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

Конечно, async/await были придуманы не для сна. Нашей целью с самого начала был ввод‑вывод (I/O), а в особенности сетевой ввод‑вывод. Вооружившись futures и задачами, теперь мы можем перейти к реальным примерам.

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

Реализация режимов шифрования на языке RUST

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

После долгого перерыва мы возвращаемся в мир криптографических алгоритмов. В этот раз мы рассмотрим некоторые широко известные режимы шифрования блочных шифров, такие как ECB, CBC, CFB, OFB, CTR и подготовим небольшую архитектурную задумку, о которой я расскажу под катом.

Если вы еще не видели мои предыдущие статьи по алгоритмам хэширования "Streebog" и "SHA", советую ознакомиться — в этот раз будет сложнее.

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

Ускоряем браузерные вычисления на коленке с помощью WebAssembly на примере генерации шума

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

Так ли производителен WebAssembly в сравнении с JavaScript как о нем говорят? Какие подводные камни могут ожидать при попытке ускорить CPU-bound задачи и в каких ситуациях он must have? Автор предлагает рассмотреть один кейс и разобраться в этих вопросах на практике

Приступим
Всего голосов 10: ↑9 и ↓1+11
Комментарии10

Истории

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

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

В этой статье мы рассмотрим несколько стратегий по постепенному добавлению Rust в сервер, написанный на другом языке, например JavaScript, Python, Java, Go, PHP, Ruby и т. д. Один из возможных кейсов для подобного добавления — вы профилировали сервер, нашли «горячую» функцию, не соответствующую требованиям производительности из‑за боттлнека по CPU, а обычные техники мемоизации или оптимизации алгоритма были бы невозможны или малоэффективны по той или иной причине. После чего вы пришли к выводу, что стоит посмотреть в сторону реализации данной функции на что‑то написанное на более производительном языке, например на Rust. Отлично, данная статья для вас.

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

Асинхронный Rust в трех частях. Часть вторая: Tasks

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

Во введении мы сказали, что async/await это про futures и задачи. В первой части мы рассмотрели futures и теперь пришло время задач. Благо, мы с ними уже встречались, хоть мы их так и не называли.

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

Асинхронный Rust в трех частях. Часть первая: Futures

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

В введении мы посмотрели на пример асинхронного Rust без какого‑либо объяснения, как он работает. Это дало нам несколько вопросов для размышления: Что такое асинхронные функции и возвращаемые ими «future»? Что делает join_all? Чем отличается tokio::time::sleep от std::thread::sleep?

Чтобы ответить на эти вопросы нам потребуется преобразовать каждую из частей в обычный не асинхронный код Rust. Вскоре мы обнаружим, что воспроизвести foo и join_all достаточно просто, а вот со sleep ситуация чуть сложнее. Начнем же.

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

Почему я скептично отношусь к переписыванию JS-инструментов на «быстрых» языках

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

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

Поэтому у меня вполне естественно возникает беспокойство по поводу охватившей сферу разработки одержимости переписывать каждый инструмент Node.js на быстрых языках вроде Rust, Zig, Go и прочих. Причём ценность этих языков я нисколько не преуменьшаю. Я даже принимал некоторое участие в разработке Servo, да и на столе прямо сейчас передо мной лежит книга по Rust. Но в целом основную часть своей карьеры я вложил в освоение всех нюансов JavaScript, и на данный момент этот язык для меня самый удобный.

Так что я признаю свою предвзятость (и, возможно, чрезмерный акцент на одном наборе навыков). Но, чем больше я об этом думаю, тем больше понимаю, что у моего скептицизма есть также обоснованные причины, о которых и пойдёт речь в текущей статье.
Читать дальше →
Всего голосов 54: ↑51 и ↓3+70
Комментарии49

Асинхронный Rust в трех частях. Введение

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

Async/await, или «асинхронный ввод‑вывод», — это относительно новая функция языка, которая позволяет программам выполнять несколько задач одновременно. Это своего рода альтернатива многопоточности, хотя программы на Rust часто используют и то и другое. Асинхронный ввод‑вывод особенно популярен в веб‑сервисах и сетевых приложениях, работающих с большим числом подключений одновременно.

Эта серия статей представляет собой введение в "futures", задачи и асинхронный ввод‑вывод в Rust. Наша цель — понять основные механизмы, чтобы асинхронный код не казался магией. Мы начнем с преобразования (так называемой «рассахаризации») асинхронных примеров в обычный Rust и постепенно создадим собственную асинхронную «среду выполнения». На данном этапе под «средой выполнения» мы понимаем библиотеку или фреймворк, которые используются для написания асинхронных программ.

Создание собственных фьючерсов, задач и механизма ввода‑вывода позволит понять, что именно делает для нас среда выполнения. Предполагается, что вы уже немного писали на Rust и читали The Rust Programming Language \или аналогичный источник.

Давайте начнем с выполнения нескольких задач одновременно с использованием потоков. Сначала все пойдет хорошо, но затем, с увеличением количества потоков, начнутся проблемы. Затем мы добьемся того же, используя async/await. В этой части мы разберем примеры, а в следующей мы начнем углубляться в них.

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

Пошаговое повышение производительности алгоритма

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

Недавно мне довелось работать над новым алгоритмом приближённого поиска ближайших соседей, который называется RaBitQ. Автор этого алгоритма уже предоставил достаточно скоростную реализацию на C++. Я попытался переписать этот алгоритм на Rust (ещё один случай «а почему бы не переписать на Rust»). Однако, я обнаружил, что моя реализация гораздо медленнее оригинальной. Далее я расскажу, как шаг за шагом доработал её производительность.

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

Проект Shiva: Альтернатива Apache Tika и Pandoc

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

Я начал работать над проектом Shiva с первого коммита в марте 2024 года, стремясь создать универсальный инструмент на Rust для парсинга и конвертации документов. За несколько месяцев проект значительно расширился, добавив поддержку множества форматов файлов, включая HTML, Markdown, простой текст, PDF, JSON, CSV, RTF, DOCX, XML, XLS, XLSX, ODS и Typst. Shiva — это проект с открытым исходным кодом, и его репозиторий доступен на github.com/igumnoff/shiva.

Цель проекта — предложить альтернативу таким известным инструментам, как Apache Tika, написанный на Java, и Pandoc, разработанный на Haskell. Эти инструменты уже давно стали стандартом для разработчиков, работающих с документами. Однако я надеюсь, что Shiva сможет предложить более простое и эффективное решение, которое сможет справляться с растущим разнообразием и сложностью цифровых документов. Проект развивается быстро, хотя впереди еще много работы, но мне радостно наблюдать за прогрессом.

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

Буду рад, если кто-то заглянет в репозиторий, оставит отзыв или внесет свой вклад. Сообщество открыто для идей и совместной работы, чтобы продолжать развивать возможности Shiva.

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

Обзор библиотеки LIBMF для Rust: факторизация матриц

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

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

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

Устанавливается она через Cargo легко и просто.

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

Rust 1.82.0: cargo info, AArch64 для macOS в tier1, use<..>, небезопасные указатели и другое

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

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


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


$ rustup update stable

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


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

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

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

7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн
7 – 8 ноября
Конференция «Матемаркетинг»
МоскваОнлайн
15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
22 – 24 ноября
Хакатон «AgroCode Hack Genetics'24»
Онлайн
28 ноября
Конференция «TechRec: ITHR CAMPUS»
МоскваОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань

Rust IPC Ping-Pong

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

На работе наша команда недавно столкнулась с необходимостью в высокопроизводительном IPC в Rust. Поиск привел нас к содержательной статье от 3tilley «IPC in Rust — a Ping Pong Comparison», что стало превосходной отправной точкой в нашем исследовании.

Вдохновляясь этой работой, мы решили копнуть глубже и провести собственные замеры производительности, в особенности нас интересовал новый многообещающий фреймворк iceoryx2. Взяв за основу работу в исходной статье, мы будем использовать UNIX Domain Sockets (как stream, так и datagram), Memory Mapped Files и Shared Memory с использованиемiceoryx2 для сравнения производительности IPC между процессами на одной машине для различных размеров пэйлоада.

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

Как написать D-Bus сервис, работающий на системной шине, на Rust

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

Привет, Хабр! На связи Федотов Максим, ведущий разработчик в "Открытой Мобильной Платформе". В этой статье я хочу поделится нашим опытом создания D-Bus-сервиса на Rust, который работает на системной шине.

Если Вы только недавно начали изучать темы ОС GNU/Linux, Rust и D-Bus, но при этом Вам уже стало тесно в рамках простых базовых примеров и хочется зайти немного поглубже, то эта статья для Вас.

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

Быстрый поиск опечаток на Rust

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

Мы запустили наш поисковик по Hacker News и RAG-движок с полусырой системой исправления опечаток. В нашей первой версии тратилось более 30 мс на обработку орфографически правильных запросов. Это достаточно много, поэтому по умолчанию мы отключили данную фичу. Наша новейшая версия работает в 100 раз быстрее, справляется за 300 мкс с корректно записанными запросами и тратит ~5 мс/слово на исправление ошибок. В этом посте мы объясним, как нам удалось этого добиться!

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

rustsn — Open Source проект генерации кода и взаимодействия с уже существующим через LLM

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

Я работал над созданием инструмента под названием rustsn, который позволяет генерировать, компилировать и тестировать код с использованием LLM (Large Language Models). Изначально идея заключалась в том, чтобы автоматизировать процесс написания небольших фрагментов кода — так называемых сниппетов — для разных языков программирования на основе объяснений, предоставленных пользователем. Этот инструмент стал развиваться и обрастать новыми возможностями, такими как генерация полного кода для приложений и объяснение существующего кода на основе векторных представлений (эмбеддингов).

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

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

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

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

Корутины: stackful vs stackless

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

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

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

Читать далее
Всего голосов 24: ↑22 и ↓2+25
Комментарии27

Настройка VSCode для разработки в Tauri

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

Как настроить VSCode для удобной работы с проектом Tauri. Установим пару плагинов и настроим launch.json и tasks.json.

Настроить
Всего голосов 5: ↑5 и ↓0+11
Комментарии2

Попробуйте Tauri

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

Хочу рассказать про один из моих любимых Opensource проектов: Tauri. Это среда для создания десктопно-мобильных приложений на JavaScript, но быстрых и легковесных. С опциональными дополнениями на Rust, а через него и на всех других языках.

Читать далее
Всего голосов 24: ↑22 и ↓2+27
Комментарии30
1
23 ...