Введение в Rust 51
Создание программ, запускаемых без установочных этапов, облегчает их распро-
странение.
1.10.2. В обработке данных
Rust отлично справляется с текстом и с другими формами обработки данных. Про-
граммисты извлекают пользу из контроля над использованием памяти и из быстро-
го запуска. В середине 2017 года Rust предлагался как самый быстрый в мире обра-
ботчик регулярных выражений. В 2019 году проект по обработке данных Apache
Arrow, положенный в основу экосистем обработки и анализа данных Python и R,
принял проект DataFusion на основе Rust.
Rust также положен в основу реализации нескольких поисковых систем, машин
обработки данных и систем анализа регистрационных журналов. Его система типов
и управление памятью позволяют создавать конвейеры данных с высокой пропуск-
ной способностью при низком и стабильном объеме используемой памяти. С по-
мощью потоковой передачи данных Apache Storm, Apache Kafka или Apache
Hadoop небольшие по объему программы фильтрации могут легко встраиваться в
более крупные платформы.
1.10.3. В расширяемых приложениях
Rust хорошо приспособлен для расширения программ, написанных на динамиче-
ских языках. Он позволяет создавать расширения для JNI (Java Native Interface), для
C или для Erlang/Elixir NIF-функций (native implemented functions — нативных реа-
лизованных функций). А C-расширения, как правило, отпугивают программистов.
Расширения обычно довольно тесно интегрированы в среду выполнения. Стоит
ошибиться и столкнешься с обвальным потреблением памяти из-за ее утечки или
же со сбоем всей системы. Rust во многом избавляет от подобных беспокойств.
Sentry, компания, занимающаяся обработкой ошибок приложений, считает
Rust великолепным кандидатом для того, чтобы заново написать на нем те
компоненты системы, что написаны на Python и интенсивно используют ре-
сурсы центрального процессора20.
Dropbox переписали на Rust механизм синхронизации файлов своего при-
ложения на стороне клиентов: «Укротить сложность синхронизации нам
помогла не столько производительность [Rust], сколько эргономика и сфо-
кусированность на корректности»21.
1.10.4. В средах с ограниченными ресурсами
Область работы с микроконтроллерами десятилетиями была оккупирована языком C.
Но пришли времена интернета вещей (Internet of Things, IoT). И это может озна-
20 См. «Fixing Python Performance with Rust», http://mng.bz/ryxX.
21 См. «Rewriting the heart of our sync engine», http://mng.bz/Vdv5.
52 Глава 1
чать, что в сети окажутся многие миллиарды потенциально незащищенных вещей.
Любой входной код синтаксического анализа будет регулярно проверяться на на-
личие слабых мест. Учитывая, насколько редко происходят обновления прошивки
для этих устройств, очень важно, чтобы они были как можно более безопасными с
самого начала. Rust может сыграть здесь весьма важную роль, добавив еще один
уровень безопасности без дополнительных издержек времени выполнения.
1.10.5. В серверных приложениях
Основная часть приложений, написанных на Rust, размещается на сервере. Они мо-
гут обслуживать веб-трафик или отвечать за поддержку бизнес-процессов, запус-
кающих свои операции. Есть также уровень сервисов, располагающихся между
операционной системой и вашим приложением. Rust используется для написания
систем управления базами данных, систем отслеживания, поисковых устройств и
систем обмена сообщениями. Например:
На Rust написан реестр пакетов для сообществ JavaScript и node.js22.
Встраиваемая база данных sled (https://github.com/spacejam/sled) может на
16-ядерной машине справляться с рабочей нагрузкой в 1 миллиард опера-
ций, среди которых 5% ― это операции записи.
Система полнотекстового поиска Tantivy может на 4-ядерном ПК проин-
дексировать 8 Гб английской Википедии примерно за 100 секунд23.
1.10.6. В приложениях для ПК
В конструкции Rust нет ничего, что помешало бы развернуть его для разработки
программного обеспечения, ориентированного на пользователя. Приложением,
ориентированным на пользователя, является Servo, механизм веб-браузера, слу-
живший инкубатором для ранней разработки Rust. Естественно, к этой категории
приложений можно отнести и игры.
1.10.7. В автономном режиме
Востребованность приложений, автономно работающих на персональных компью-
терах, сохраняется. Подобные приложения зачастую отличаются сложностью,
трудностью в разработке и поддержке. Учитывая удобный подход к развертыванию
и строгость Rust, этот язык, пожалуй, станет особой приправой для многих прило-
жений. Поначалу такие приложения на Rust будут создаваться независимыми раз-
работчиками, в том числе одиночками. По мере становления Rust будет развиваться
и его экосистема в этой области.
22 См. «Community makes Rust an easy choice for npm: The npm Registry uses Rust for its CPU-bound bot-
tlenecks», http://mng.bz/xm9B.
23 См. «Of tantivy’s indexing», https://fulmicoton.com/posts/behold-tantivy-part2/.
Введение в Rust 53
1.10.8. В мобильных приложениях
Android, iOS и другие операционные системы для смартфонов, как правило, пре-
доставляют разработчикам весьма широкие возможности. В Android это возможно-
сти Java. В macOS разработчики обычно программируют на Swift. Но есть ведь и
другой путь.
Обе платформы позволяют запускать оптимизированные под них приложения.
Чтобы приложения, такие как игры, могли развертываться на смартфонах, расчет
делается на их разработку на C++. Rust может общаться с телефоном посредством
того же интерфейса, причем без дополнительных издержек времени выполнения.
1.10.9. В веб-режиме
Для вас, наверное, не секрет, что JavaScript ― главный язык для веба. Но грядут
изменения. Производители браузеров разрабатывают стандарт под названием
WebAssembly (Wasm), который обещает обеспечить поддержку компиляции под
множество языков. И Rust здесь в числе первых. Для переноса Rust-проекта в брау-
зер требуются всего лишь две дополнительные команды командной строки. Иссле-
дования по использованию Rust в браузере посредством Wasm уже ведутся не-
сколькими компаниями, в частности CloudFlare и Fastly.
1.10.10. В системном программировании
Вообще в системном программировании кроется сам смысл существования Rust.
На Rust реализовано множество крупных программ, включая компиляторы (самого
Rust), движки видеоигр и операционные системы. В сообщество Rust входят созда-
тели генераторов парсеров, баз данных и форматов файлов.
Rust оказался весьма продуктивной средой для программистов, разделяющих цели
этого языка. В число трех выдающихся проектов в этой области входят:
Спонсируемая компанией Google разработка операционной системы для
устройств Fuchsia OS24.
Активно изучаемая компанией Microsoft возможность написания на языке
Rust низкоуровневых компонентов для Windows25.
Создаваемый в рамках Amazon Web Services (AWS) проект Bottlerocket,
специализированной операционной системы для размещения контейнеров в
облаке26.
24 См. «Welcome to Fuchsia!», https://fuchsia.dev/.
25 См. «Using Rust in Windows», http://mng.bz/A0vW.
26 См. «Bottlerocket: Linux-based operating system purpose-built to run containers»,
https://aws.amazon.com/bottlerocket/.