Все потоки
Поиск
Написать публикацию
Обновить
45

Rust *

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

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

Пишем телеграм-бота на Rust, предварительно спаяв сетевую карту

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

Что делать, если ваш микроконтроллер не умеет работать с сетью, а бота для телеграма написать хочется? Конечно же, сделать свой сетевой адаптер на логических микросхемах!

Читать далее

Rust 1.66.0: дискриминанты для перечислений с полями, black_box, cargo remove

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

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


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


rustup update stable

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


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

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

Сказ о M1 GPU

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

Привет всем, в эфире Асахи Лина!✨

marcan попросил меня написать статью о M1 GPU, и вот она готова ~! Это был долгий проект, растянувшийся на несколько месяцев, и было о чём поведать, так что, надеюсь, вам понравится!

Читать далее

От крышки рояля до фреймворка на rust: как системное программирование помогает творческой реализации

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

Здравствуйте, меня зовут Тимофей, и я алкоголик программирую, чтобы писать музыку. Судя по всему, недуг мой прогрессирует:

- Пять лет назад, когда я впервые услышал про LilyPond — язык программирования, на котором можно писать партитуры в текстовом редакторе — я посмеялся над гиком, что это придумал, и прошёл дальше.
- Два года назад я прочитал код партитуры из примеров — удивился, насколько логично и музыкально он выглядит, подивился задротству автора, и пошёл набирать ноты в MuseScore.
- В этом году я пишу экспортёр MIDI из Reaper в исходники LilyPond, а сегодня зарелизил rea-rs: фреймворк для написания расширений для Reaper на rust.

И, несмотря на то, что в этом альфа-релизе >16 300 строк, я всё ещё считаю, что занимаюсь «бытовым программированием». Имею в виду что-то вроде готовки: можно, конечно, сходить в ресторан, когда хочется чего-то эдакого, но в ресторан каждый день не набегаешься. А то, что погреб на даче потихоньку превращается в винодельню — так это побочный эффект. Зато всё своё, домашнее, натуральное.

В последнее время, подобные мысли я проговаривал не как здоровый сарказм, а как симптомы болезни: мол, «это не хумус, видео не передаёт запах»! Но, намедни, моя музыкальная школа подогнала мне мак с Finale и полным комплектом Adobe на борту, чтобы совместно работать над сборником рождественских песен. И… Holly crap, I was damn right! Но расскажу по порядку, как я дошёл до жизни такой.

К рассказу

Генератор для приёма QO-100 на MAX2870

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

Не так давно заинтересовался связью через катарский спутник QO-100. Собственно, он такой единственный геостационарный радиолюбительский, что делает его совершенно уникальным. Странно, что про него на хабре ничего не писали, технически это совершенно новый уровень радиолюбительской связи. Работает он в СВЧ диапазоне, поэтому к аппаратуре предъявляются специфические требования. В этой заметке хотел бы рассказать, как решал неожиданную для меня проблему создания высококачественного генератора на MAX2870 с использованием Bluepill и Rust.

Читать далее

Rust в стартапе: поучительная история

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

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

Я очень долго думал писать ли мне этот пост или нет, потому что я не хочу начинать или быть вовлеченным в холивар про языки программирования (чтобы сразу расставить все точки над "i": Visual Basic самый лучший язык программирования на свете). Но уже несколько людей спрашивали меня про мой опыт с Rust и должны ли они использовать его в своих проектах. В общем, я хочу поделиться своими наблюдениями, какие я вижу достоинства и недостатки Rust в стартапах, когда скорость разработки и легкость масштабирования команды очень важны.

Читать далее

Rust: параметризуем мутабельность через маркеры и ассоциированные типы

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

КПДВ: borrow checker не даёт стрелять в ногу при работе с FFI


Borrow-checker — отличный секюрити, который очень эффективен, если мы находимся в безопасном Rust. Его поведение отлично описано в RustBook, и, по крайней мере, я почти никогда не сталкиваюсь с придирками, которым я бы не был благодарен.


Но вот когда нужно написать семантически-безопасный API над функциями и данными, которые вообще не безопасны — у меня всё стало валиться из рук. Последние пару дней я потратил на то, чтобы придумать элегантный способ параметризации мутабельности. Над тем, чтобы на уровне API сохранялась семантика — зависимость изменяемости полей друг от друга. Даже если на самом деле они живут сами по себе.


На английском, с примерами — на GitHub pages.


Исходник тестов — на GitHub.

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

«Rust — это язык для изобретательства»: Илья Лахин о том, нужен ли Rust в GameDev

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

Rust — крутой, перспективный язык. Кто-то даже считает, что он может найти свое применение в любом направлении разработки. Так это или нет? Обсудили с Ильей Лахиным, который уже три года применяет Rust в создании игр и считает, что это не лучшая идея, если хочешь хорошо зарабатывать прямо сейчас. 

Читать далее

Глеб Помыкалов: Rust еще долго будет оставаться самым любимым языком

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

Два года подряд мы делаем конференцию для rust-разработчиков RustCon. И твёрдо убеждены в том, что это один из самых перспективных, хоть и самых сложных языков. Завоюет ли он мир, в каких проектах он не нужен и с каких языков проще всего перейти на Rust? Обо всем этом мы решили спросить у Глеба Помыкалова, который пишет на нем уже пять лет и признается языку в любви. Может быть, после интервью вы тоже влюбитесь.

Расскажи, пожалуйста, где ты работаешь, кем и какое отношение имеешь к Rust.

Я работаю engineering менеджером в компании Workato. Это стартап уже поздней стадии, мы занимаемся автоматизацией для корпораций. Позволяем не техническим людям строить сложные сценарии, интегрирующие разные сервисы, используемые в компаниях. Моя команда работает в основном с Rust.

Как используется Rust в вашей компании, в какой степени и планируется ли расширение направления?

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

Сколько человек в твоей команде? 

Сейчас у нас 6 человек, основной рост пришелся на последний месяц.

Недавно Линус Торвальдс принял в состав ветки ядра Linux 6.1 изменения, которые касаются использования Rust в качестве второго языка для разработки драйверов и модулей ядра. Как это повлияет на перспективы языка в целом?

Я бы не стал говорить, что это решение исключительно Линуса Торвальдса, хотя он, конечно, важная фигура в мире Linux. Это была длительная работа, в которую были вовлечены и те, кто писал поддержку в линуксе, и команда самого раста, которая адаптировала и оптимизировала нужные фичи. То, что Линус с этим согласился, это здорово, он убедился в том что технология действительно достойна. В свое время C++ не удостоился такой чести. 

Читать далее

Простое понимание замыканий в Rust

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

У вас бывало такое, что вы никак не можете скомпилировать код с замыканиями в Rust? Уже и все варианты Fn-трейтов перебрали, и move написали везде, где можно, а borrow checker все равно не унимается? И тут оказывается, что просто нужно внутри замыкания клонировать переданную переменную окружения! Сложно и непонятно. Дурацкий привереда Rust.


На самом деле довольно просто понять, почему так происходит и на что влияет move, а на что — клонирование. Но отсутствие подобного понимания я наблюдаю не только у начинающих программистов, но и у вполне зрелых. Хуже того, есть статьи, в которых это объясняется неправильно.

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

Работа с графикой на языке Rust. Часть 2

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

В этой статье я продолжу перевод и исследование WGPU, библиотеки языка Rust для работы с графикой.

Для тех, кто не читал первую статью небольшая вводная информация.

WGPU реализует современный стандарт работы с видео подсистемами — WebGPU и компилируется в разные backend-ы (OpenGL, DirectX12, Metal, Vulkan, WebGL). Он одновременно проще для освоения, чем Vulkan и имеет более продуманное апи, чем OpenGL.

Приступим!

Читать далее

Какую модель памяти следует использовать в языке Rust?

Время на прочтение10 мин
Количество просмотров9.5K
image

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

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

Тем не менее, я рассчитываю, что мой более чем тридцатилетний опыт работы с конкурентностью и моя работа над моделью памяти в C/C++ (безотносительно memory_order_consume), а также моя роль ведущего специалиста по поддержке модели памяти ядра (LKMM) послужат хорошей отправной точкой, чтобы высказаться о более прозаических задачах, решение которых, я уверен, стремятся поддержать в сообществе Rust.
Читать дальше →

Тестирование Rust

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


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

Исходная проблема


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

class Car(private val engine: Engine) {

    fun start() {
        engine.start()
    }
}

interface Engine {
    fun start()
}

class CarEngine(): Engine {
    override fun start() = ...
}

class TestEngine(): Engine {
    override fun start() = ...
}

В обычном коде:

val car = Car(CarEngine())

В тестовом коде:

val dummy = Car(TestEngine())

Внедрение зависимостей нужно для исполнения разных фрагментов кода в соответствии с их контекстом.
Читать дальше →

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

Rust 1.65.0: GAT, let-else, break от помеченных блоков, отказ от RLS

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

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


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


rustup update stable

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


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

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

Python на максималках: расширения на языках Rust и Cython

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

Python — лучший выбор для анализа данных и машинного обучения. Его производительность в большинстве случаев более чем достаточна. Но как быть, если объемы ваших данных растут значительно быстрее, чем имеющиеся ресурсы, и требуется повышение производительности? 

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

Читать далее

Rust'ерзание краба. Пробуем реверсить Rust удобно

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

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

В этой статье мы посмотрим на него с "обратной" стороны, а именно попробуем пореверсить программу, написанную на Rust, и выяснить, что можно сделать, чтобы сделать ее анализ проще. Рассмотрим утилиты, приложения и плагины, а также напишем свой плагин для IDA Pro, Cutter и rizin, чтобы автоматически создать сигнатуры для исполняемого файла без отладочных символов. Поговорим о FLIRT-сигнатурах, их преимуществах и недостатках и о том, можно ли автоматизировать их создание.

Читать далее

Улучшаем приложение для хранения заметок

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

В предыдущей статье мы написали простое приложение для хранения заметок в памяти. В данной статье мы доработаем его. Теперь приложение будет хранить заметки в файле. Попутно разберёмся со следующими концепциями:

- процедурный и объектно-ориентированный подходы,
- инкапсуляция,
- структуры и методы,
- модули,
- тестирование.

Читать далее

Подробный разбор простого приложения на Rust

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

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

Читать далее

«Если апатия приводит в Python, то конструктивный поиск ведёт к Rust или Go»

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

«Хтоническая логика Haskell, тяжеловесная мощь «плюсов» и грязная гибкость скриптовых языков наталкивают человека на экзистенциальный поиск. Если апатия приводит в Python, то конструктивный поиск в итоге ведёт к Rust или Go», — считает Игорь Нетай, специалист отдела перспективных исследований компании «Криптонит».

Читать далее

Rust должен умереть, МГУ сделал замеры

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

В предыдущих сериях:



Медленно, но верно Раст проникает не только в умы сотрудников больших корпораций, но и в умы школьников и студентов. В этот раз мы поговорим о статье от студента МГУ: https://rustmustdie.com/.


Её репостнул Андрей Викторович Столяров, доцент кафедры алгоритмических языков факультета ВМК МГУ им. М. В. Ломоносова и по совместительству научрук студента-автора статьи.


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

— А. В. Столяров
Кощунство!