Что такое Rust? Безопасная, быстрая и простая разработка программного обеспечения

Быстро, безопасно, легко писать - выберите любые два. Таково состояние разработки программного обеспечения уже долгое время. Языки, подчеркивающие удобство и безопасность, обычно медленные (например, Python). С языками, делающими упор на производительность, как правило, сложно работать, и с ними легко сбить с толку (например, C и C ++).

Можно ли передать все три из этих атрибутов на одном языке? Что еще более важно, сможете ли вы заставить мир работать с этим? Язык Rust, первоначально созданный Грейдоном Хоаром и в настоящее время спонсируемый Mozilla Research, представляет собой попытку сделать именно эти вещи. (Язык Google Go преследует аналогичные цели, но Rust стремится сделать как можно меньше уступок производительности.)

Видео по теме: Разработка более безопасного программного обеспечения с помощью Rust

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

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

Преимущества языка программирования Rust

Rust начинался как исследовательский проект Mozilla, отчасти предназначенный для повторной реализации ключевых компонентов браузера Firefox. Это решение было принято по нескольким ключевым причинам: Firefox заслуживал лучшего использования современных многоядерных процессоров; а повсеместное распространение веб-браузеров означает, что их использование должно быть безопасным.

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

Ржавчина быстро

Код Rust компилируется в машинный код на нескольких платформах. Двоичные файлы являются самодостаточными, не требуют времени выполнения, а сгенерированный код предназначен для работы так же, как и сопоставимый код, написанный на C или C ++.

Rust безопасен для памяти

Rust не компилирует программы, которые пытаются использовать небезопасное использование памяти. Большинство ошибок памяти обнаруживаются во время работы программы. Синтаксис и языковые метафоры Rust гарантируют, что общие проблемы, связанные с памятью в других языках - пустые или висячие указатели, гонки данных и т. Д. - никогда не попадут в рабочую среду. Компилятор помечает эти проблемы и заставляет их исправлять еще до запуска программы.

Rust не требует больших затрат

Rust контролирует управление памятью с помощью строгих правил. Система управления памятью Rust выражается в синтаксисе языка через метафору, называемую владением . Любое заданное значение в языке может «принадлежать» или удерживаться и управляться только одной переменной за раз.

Способ передачи прав собственности между объектами строго регулируется компилятором, поэтому во время выполнения нет никаких сюрпризов в виде ошибок выделения памяти. Подход собственности также означает отсутствие управления памятью со сборкой мусора, как в таких языках, как Go или C #. (Это также дает Rust еще одно повышение производительности.) Каждый бит памяти в программе Rust отслеживается и автоматически освобождается с помощью метафоры владения.

Ржавчина гибкая

Ржавчина позволяет вам жить опасно, если вам нужно, до определенной степени. Безопасность Rust может быть частично приостановлена ​​там, где вам нужно напрямую управлять памятью, например, разыменовывая необработанный указатель на C / C ++. Ключевое слово частично состоит в том , что операции по обеспечению безопасности памяти в Rust никогда нельзя полностью отключить. Даже в этом случае вам почти никогда не придется снимать ремни безопасности для обычных случаев использования, поэтому конечным результатом является более безопасное программное обеспечение по умолчанию.

Rust прост в использовании

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

Все необходимое для создания двоичных файлов Rust поставляется в одном пакете. Внешние компиляторы, такие как GCC, необходимы только в том случае, если вы компилируете другие компоненты вне экосистемы Rust (например, библиотеку C, которую вы компилируете из исходного кода). Пользователи Microsoft Windows тоже не являются гражданами второго сорта; цепочка инструментов Rust так же функциональна, как и в Linux и MacOS.

Rust кроссплатформенный

Rust работает на всех трех основных платформах: Linux, Windows и MacOS. Остальные поддерживаются помимо этих трех. Если вы хотите выполнить кросс-компиляцию или создать двоичные файлы для архитектуры или платформы, отличной от той, на которой вы сейчас работаете, потребуется немного больше работы, но одна из основных задач Rust - минимизировать объем тяжелой работы, необходимой для такого Работа. Кроме того, хотя Rust работает на большинстве современных платформ, его создатели не ставят перед собой цель, чтобы Rust компилировался абсолютно везде - только на любых популярных платформах и везде, где для этого им не нужно идти на ненужные компромиссы.

Rust имеет мощные языковые функции

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

В Rust есть полезная стандартная библиотека

Одна из частей более широкой миссии Rust - побудить разработчиков C и C ++ использовать Rust вместо этих языков, когда это возможно. Но пользователи C и C ++ ожидают иметь приличную стандартную библиотеку - они хотят иметь возможность использовать контейнеры, коллекции и итераторы, выполнять манипуляции со строками, управлять процессами и потоками, выполнять сетевой и файловый ввод-вывод и так далее. Все это и многое другое Rust делает в своей стандартной библиотеке. Поскольку Rust разработан как кроссплатформенный, его стандартная библиотека может содержать только те вещи, которые можно надежно перенести на другие платформы. Функции, зависящие от платформы, такие как epoll в Linux, должны поддерживаться через функции сторонних библиотек, таких как libc, mio ​​или tokio. 

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

В Rust есть много сторонних библиотек или «ящиков».

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

Rust имеет хорошую поддержку IDE 

Опять же, немногие разработчики хотят использовать язык с небольшой поддержкой или без поддержки в IDE по их выбору. Вот почему Rust недавно представил Rust Language Server, который предоставляет живую обратную связь от компилятора Rust для IDE, таких как Microsoft Visual Studio Code.

Недостатки языка программирования Rust

Наряду со всеми привлекательными, мощными и полезными возможностями Rust имеет свои недостатки. Некоторые из этих препятствий ставят в тупик как новых «ржавых» (как называют друг друга фанаты Rust), так и старых рук. 

Ржавчина новая

Rust - все еще молодой язык, он выпустил свою версию 1.0 только в 2015 году. Таким образом, хотя большая часть синтаксиса и функциональности основного языка была нарушена, многие другие вещи вокруг него все еще остаются подвижными.

Например, асинхронные операции по-прежнему плохо представлены в синтаксисе языка. Ведется работа по реализации асинхронной операции через asyncи awaitключевые слова.

Rust сложно выучить

Если что-то в Rust вызывает наибольшие проблемы, так это то, насколько сложно понять метафоры Rust. Владение, заимствования и другие замыслы Rust по управлению памятью сбивают всех с толку с первого раза. У многих начинающих программистов на Rust есть общий обряд «борьба с проверкой заимствований», когда они из первых рук обнаруживают, насколько дотошно компилятор разделяет изменяемые и неизменяемые вещи.

Ржавчина сложна

Некоторая трудность связана с тем, что метафоры Rust делают код более подробным по сравнению с другими языками. Например, объединение строк в Rust не всегда так просто, как string1+string2. Один объект может быть изменяемым, а другой неизменным. Rust склонен настаивать на том, чтобы программист объяснял, как обращаться с такими вещами, а не позволял компилятору догадываться.

Другой пример: как работают вместе Rust и C / C ++. В большинстве случаев Rust используется для подключения к существующим библиотекам, написанным на C или C ++; несколько проектов на C и C ++ переписываются с нуля на Rust. (А когда они есть, их обычно переписывают постепенно.)

Дорожная карта языка Rust

Команда Rust осознает многие из этих проблем и работает над их улучшением. Например, чтобы упростить работу Rust с C и C ++, команда Rust изучает возможность расширения таких проектов, как bindgen, который автоматически генерирует привязки Rust к коду C. У команды также есть планы сделать заимствования и сроки жизни более гибкими и понятными. 

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