Недавно Стив Клабник позвонил, чтобы подытожить, почему с Rust действительно здорово работать. Мне очень нравится Rust, и я планирую использовать его в следующем году для многих вещей, поэтому я хочу поделиться своими мыслями о языке, где он сейчас выделяется и что необходимо для критического успеха.
Отличные языковые функции прямо сейчас
Чем больше я использую Rust, тем больше я узнаю то, что в Rust просто потрясающе. Но некоторые вещи могут быть особенно интересны читателям, которые еще не используют Rust:
- Это скомпилированный язык с отличной системой типов. После работы с Ruby, PHP, Javascript и несколькими другими языками сценариев это освобождает, когда вы можете реорганизовать большие кодовые базы, не опасаясь сломать что-то. Вам также не нужно писать эти огромные наборы тестов, чтобы охватить базовые вещи, что в конечном итоге является огромным приростом производительности.
- Начать работу стало очень просто благодаря rustup. Если вы пришли из Ruby, зная RVM или rbenv, это должно быть вам хорошо знакомо.
- Развертывание настолько простое, насколько это возможно: вы можете кросс-скомпилировать свой двоичный файл / библиотеку для многих целевых архитектур и отправить один файл. Подобно Go, но история управления пакетами / поставщиками намного лучше благодаря cargo и rustup.
- Документация - одна из лучших языковых документации, которую я когда-либо видел. Я постоянно читаю прозу и изучаю новые темы, тогда как изначально я просто хотел найти функцию во время кодирования.
- Рассказ о перформансе. Он находится на том же уровне, что и C / C ++ (иногда быстрее, иногда медленнее). Хотя в большинстве случаев это не особенно интересно, иногда производительность является важным фактором при выборе технологий для проекта. На самом деле более важным является тот факт, что это увеличивает продуктивность разработчика, потому что вы можете пропустить обширное профилирование / настройку производительности после того, как вы написали свои первые итерации кода.
- Синтаксис и основные функции. После месяцев кодирования (микро) сервисов на Go, чрезвычайно приятно иметь дженерики (вместо копирования и вставки кода или интерфейса {}), а итераторы намного удобнее, чем просто иметь "для »-Петли доступны. И многое другое, что я здесь перечислять не буду ...
- Отличные книги доступны в Интернете, бесплатно и в актуальном состоянии. Книга написана для людей, которые раньше не занимались программированием на более низких уровнях, поэтому она очень доступна и учит всему, что вам нужно для большинства повседневных задач. Если вам нужно вплотную приблизиться к металлу, Растономикон поможет и вам.
Варианты использования прямо сейчас
На мой взгляд, сейчас есть три основных варианта использования Rust, в которых он действительно может преуспеть. Да, есть Mozilla, создающая на нем браузер следующего поколения, но у меня нет опыта в этом или какой-либо мотивации делать то же самое. Эти варианты использования являются основными, о чем я думаю, и для которых я использую Rust:
- Библиотеки. Я стараюсь переписывать кучу личных библиотек для каждого нового языка программирования, который я изучаю. Поддерживать эти вещи для языков, которые я больше не использую, на самом деле является обузой (иначе: я никогда не нахожу мотивации). Но как только я напишу библиотеки / алгоритмы на Rust, я могу использовать их из всех других языков / проектов как родное расширение. Библиотека, написанная на Rust, является высокопроизводительной, достаточно корректной и не имеет неприятных эксплойтов, таких как C / C ++ (смертные, похоже, не умеют писать C ++ без эксплойтов, посмотрите десятилетия исправления ошибок unix-y вещей). Так что напишите его один раз, а затем вызовите из Node.js, Эликсира или того, что вы используете в настоящее время.
- Приложения CLI. Bash становится нечитаемым после нескольких сотен строк, Python / Perl /… требует установленной среды выполнения (чего нет у обычных коллег по Windows). В то время как здесь могут использоваться другие компилируемые языки, такие как Go / C ++, выполнение задач« написания сценариев в Rust может казаться очень естественным» из-за его высокоуровневых, но знакомых синтаксических функций.
- Небольшие веб-приложения / службы. У вас даже есть выбор, что для вас наиболее важно, и подходящая структура: сделать это быстро, сделать компонуемым или сделать быстро и безопасно. После того, как мне пришлось поддерживать PHP, Node.js и Go, я сейчас, безусловно, предпочитаю последний. Когда вы работаете в корпоративной среде, прототипы никогда не выбрасываются и делаются правильно, поэтому делайте это с самого начала или платите цену позже (примерно на 20% больше первоначального времени разработки по сравнению с многократными расходами на обслуживание, исправление ошибок и вызовы службы экстренной помощи в 3 часа ночи).
Необходимые функции для новых вариантов использования
Я бы сказал, что в настоящее время Rust игнорирует потребности большинства разработчиков.
- Вы знаете, чем корпоративные разработчики занимаются весь день? Перемешивание данных из SOAP-сервисов, возможно, их анализ, возможно, создание отчетов в таблицах Excel для менеджеров. Дело в том, что Rust может использовать определения WSDL для SOAP-Services и с легкостью генерировать для них безопасные абстракции (используя отличную систему типов). Если использование Rust делает работу со всем этим SOAP простым и безболезненным, корпоративные разработчики (незаметно) начнут его использовать. Потребности в базе данных уже удовлетворены, С Excel можно справиться и CSV - это просто.
- (Вероятно) второстепенная вещь, которая вызовет большие всплески: позволить Cargo компилировать библиотеки в другие языковые форматы напрямую. В настоящее время нужно использовать одну из (превосходных!) Языковых оболочек, например Neon, или писать код интерфейса FFI вручную, я думаю, это можно / нужно полностью абстрагировать с помощью Cargo. Скрыть эти уродливые детали от разработчиков, просто пытающихся написать эффективный бизнес-алгоритм и использовать его с языком FOTM в контексте компании, можно легко, что приведет к серьезным улучшениям не только для экосистемы rust, но и для всех других включенных языков.
- И, наконец: как всегда, существует потребность в большом высокоуровневом веб-фреймворке, таком как Phoenix, Rails или Django, чтобы по-настоящему взлететь. Я предполагаю, что, как только Tokio правильно получит Futures / Async-IO, можно будет построить действительно высокопроизводительную основу для такой структуры, которая также будет безопасной. Добавьте обычные генераторы кода, миграцию БД, маршрутизацию, включенное управление учетными записями пользователей и невероятно простую историю развертывания. Rust (с популярными ящиками) уже предоставляет «тяжелые» вещи, здесь в центре внимания должна быть «всего лишь» эргономика и полировка разработчика, в чем сейчас преуспевают команда Rust и особенно Стив Клабник.
Очевидно, это мой личный список пожеланий Rust в 2017 году. Я бы с удовольствием прочитал мнения других рустоцветов!