Pull to refresh

Mozilla наметила план для выпуска Rust 1.0

Reading time 3 min
Views 29K
Организация Mozilla вышла на финишную прямую в подготовке языка программирования Rust 1.0. Разработчики говорят, что это торжественное событие состоится примерно в конце года. После бета-тестирования выйдет финальный релиз. С этого момента перспективный язык программирования можно использовать в боевых условиях: код гарантированно будет компилироваться в следующих версиях.

Дело не только в компиляции. Mozilla считает, что дизайн Rust наконец-то приобретает желаемую минималистичную форму. К примеру, раньше было несколько типов указателей, сейчас остались только &T, и &mut T. Упрощение затронуло и другие аспекты, в том числе замыкания, которые вызывали много споров.

Rust сочетает в себе эффективность С и С++ с безопасностью Java.

Весь дизайн построен на концепции «владения и заимствования» (ownership and borrowing). Изначально предполагалось использовать механизм владения для быстрого и безопасного переноса данных между процессами. Но потом пришло понимание, что этот же механизм можно использовать для передачи значительной части функций в библиотеки. В итоге, Rust получился даже более низкоуровневым, чем разработчики предполагали, и без ущерба для безопасности. На минимальной конфигурации Rust можно даже написать ядро операционной системы (примеры: 1, 2, 3)!

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

  • Типы с динамическим размером (dynamically sized types). Расширение системы типизации позволяет использовать типы данных, размер которых неизвестен на момент компиляции, например, массивы. Вместо этого проставляется хитроумный указатель, содержащий массивы или объекты.
  • Распакованные замыкания (unboxed closures). В новом дизайне замыканий они объединены с типами объектов.
  • Ассоциативные типы (associated types) в системе признаков значительно облегчают написание аннотаций для библиотек, первая реализация уже готова.
  • Где-клозы (where clauses). Планируется внедрить гибкую новую форму элементарной дизъюнкции. Работа над этой функцией уже закончена, скоро её добавят в основную ветку кода.
  • Типаж с множественной отсылкой (multidispatch traits). Функции типажей расширены, так что они могут указывать более чем один тип одновременно, это открывает возможности для более эргономичных API и для использования ассоциативных типов, упомянутых выше.
  • Деструкторы. Семантика деструкторов улучшена, так что ему не нужно теперь обязательно обнулять память, что должно повысить скорость компиляции и исполнения программ. Сейчас заканчивается анализ условий для обнуления памяти, после чего эту часть тоже добавят в основную ветку.
  • Зелёные потоки (green threading) убирают из основной библиотеки в дополнительные, чтобы оптимизировать их эффективность на конкретной операционной системе. Это тоже приведёт к ускорению исполнения программ.

Параллельно создаётся пакетный менеджер Cargo и будет организован центральный репозиторий ПО.

Из лекции Степана Кольцова, которую недавно публиковали на Хабре:

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

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

Примеры кода на Rust см. на официальном сайте.

UPD. Полный перевод статьи «На пути к Rust 1.0» от Googolplex
Tags:
Hubs:
+66
Comments 70
Comments Comments 70

Articles