- PVSM.RU - https://www.pvsm.ru -
Эта статья — перевод первого [1] поста в официальном блоге языка программирования Rust, разрабатываемого Mozilla. Первая стабильная версия Rust совсем не за горами (предварительный прогноз — конец этого/начало следующего года), и авторы языка собираются опубликовать несколько вводных статей о том, что же такое особенное Rust предлагает.
В этих статьях разработчики подробнее расскажут о ключевых особенностях языка — концепциях владения и заимствования данных, зачем они вообще нужны и какие задачи позволяют решать. Я постараюсь переводить их по мере выхода и надеюсь, что язык кого-нибудь заинтересует. Замечания к переводу прошу слать в личку.
Rust 1.0 уже в пути! Мы определились со списком фич и плотно заняты их реализацией. Наш план — выпустить бета-версию 1.0 в конце года. Если всё будет в порядке, то релиз 1.0 состоится вскоре после беты. Будущие версии в ветке 1.x будут обратно совместимыми, то есть существующий код будет ими компилироваться без изменений (естественно, за исключением багов в компиляторе).
Естественно, релиз 1.0 не означает только лишь стабилизацию («ваш код продожит компилироваться»); для нас он значит, что язык стал таким, каким мы хотим его видеть. Если ещё точнее, что он минимален. На данный момент язык выстроен вокруг простых базовых концепций, которые мы называем владением (ownership) и заимствованием (borrowing) (подробнее о них далее). Применяя эти концепции, всё остальное мы смогли вынести в библиотеки. Это очень здорово, потому что вы сами сможете написать аналогичные библиотеки. Из-за этого мы уверены, что Rust не только достигнет своих первоначальных целей, но и пойдёт дальше, применяясь в таких задачах, какие мы даже себе не представляли.
Rust прошёл длинный путь в своём развитии. Если вы не следили за ним некоторое время, то, скорее всего, удивитесь, насколько за последний год мы его упростили. Один из самых выдающихся замечательных примеров — это указатели. Долгое время в Rust были встроены несколько видов указателей, обозначающихся специальными символами. Их больше нет, и в языке остались только ссылочные типы, &T
и &mut T
. Кроме того, мы смогли объединить и упростить многие другие элементы языка, например, замыкания, которые были ранее представлены во многих формах. Многое продолжает меняться и до сих пор.
Ключом ко всему этому послужило целенаправленное использование основополагающих идей: владения (данными; ownership) и заимствования (borrowing). Сначала мы ввели понятие владения данными в качестве эффективного и безопасного способа передачи данных между задачами (потоками), но с течением времени мы поняли, что за счёт этого же самого механизма мы можем вынести самые разные элементы языка в библиотеки. Получившуюся в результате архитектуру не только проще изучить; она гораздо «ближе к железу», чем мы в принципе могли ожидать. Все конструкции языка Rust непосредственно отображаются на машинные операции, и Rust не требуется специальная среда выполнения или внешние зависимости. В самом минимальном его варианте на Rust можно даже написать ядро [2] операционной [3] системы [4].
Несмотря на все эти изменения, Rust остался верен своей цели — предоставить безопасность и удобство современных языков программирования, не теряя эффективности и низкоуровневых возможностей, которые предлагают C и C++. Другими словами, если вы хотите погрузиться в работу непосредственно с железом, но при этом у вас нет желания отратить огромное количество времени в отладке сегфолтов и гонок данных, Rust вам пригодится.
Не стоит переживать, если вы ещё незнакомы с Rust. На протяжении нескольких следующих месяцев мы планируем выпустить серию блог-постов об устройстве языка. Несколько первых статей будут посвящены различным аспектам владения данными и тому, как его можно использовать для безопасного управления памятью, многопоточного программирования и многого другого. После этого мы перейдём к остальным элементам языка и его экосистемы.
Мы уже далеко продвинулись, но перед первым релизом ещё многое предстоит сделать. Вот список больших изменений, над которыми мы в данный момент работаем:
Что касается библиотек, то сейчас мы проходимся по libstd
, отмечая отдельные её части как стабильные и нестабильные. Вы можете следить за нашим прогрессом здесь [10]. Учтите, что многие «нестабильные» определения на самом деле будут изменяться минимально, например, они могут слегка сменить имя для лучшего соответствия принятым соглашениям.
Ранее я писал, что Rust 1.0 — не столько конечная цель, сколько стартовый рубеж. Это на самом деле так. Цель версии 1.0 — стать гибкой основой для создания эффективных библиотек. Но библиотеки хороши ровно настолько, насколько легко их найти и установить.
Встречайте Cargo, пакетный менеджер Rust [11]. Cargo в последнее время очень быстро развивается и уже вполне функционален. К релизу Rust 1.0 мы также планируем запустить центральный репозиторий пакетов, благодаря чему создавать и распространять библиотеки (которые мы называем «ящиками» — «crates») будет очень просто. И конечно, Cargo и сервер с репозиторием оба написаны на Rust.
Промежуточные версии Rust долгое время выходили точно по графику, и мы не планируем от этого отказываться. Однако, как только у нас появятся стабильные релизы, мы построим вокруг них дополнительную инфраструктуру. Мы хотим воспользоваться системой «каналов», которая применяется многими проектами, такими, как Firefox [12], Chrome [13] и Ember.js [14].
Главная идея заключается в наличии трёх каналов: Nightly, Beta и Stable. Nightly-канал включает нестабильные фичи и библиотеки, которые могут изменяться без сохранения обратной совместимости. Каждые шесть недель мы будем создавать новую ветку, Beta. В неё больше не будут вноситься изменения, ломающие совместимость, поэтому если вы используете Beta или Stable, вы можете быть уверенными, что ваш код продолжит компилироваться без изменений. В это же время уже существующая Beta-ветка станет Stable-релизом. Мы ожидаем, что пользователи языка будут тестировать свой код под Beta-веткой, а готовые программы собирать с помощью Stable. Ваше тестирование Beta-версией поможет нам узнать заранее, что мы сломали что-то, что вы используете.
Конкретно релиз 1.0 мы планируем выпустить в виде беты и затем использовать вышеописанный процесс для перехода к официальному релизу 1.0. Однако, если мы обнаружим какую-нибудь серьёзную проблему в бете, мы можем отложить релиз и провести ещё один или два бета-периода. В конце концов, лучше чуть-чуть подождать, чем потратить все силы на что-то совершенно нерабочее.
Во многом выпуск Rust 1.0 — не конец, а только начало. Естественно, мы планируем развивать язык и в дальнейшем: у нас есть множество идей, и некоторые из них уже запланированы к реализации. Но больше всего я жду не результатов работы команды Rust; я считаю, что устойчивая основа позволит сообществу Rust и его экосистеме развиваться и расти ещё быстрее, чем сейчас. Не могу дождаться того, что из этого выйдет.
Автор: Googolplex
Источник [15]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/programmirovanie/69808
Ссылки в тексте:
[1] первого: http://blog.rust-lang.org/2014/09/15/Rust-1.0.html
[2] ядро: https://github.com/charliesome/rustboot
[3] операционной: https://github.com/ryanra/RustOS
[4] системы: https://github.com/jvns/puddle
[5] не так давно проделал: https://github.com/rust-lang/rust/commit/7932b719ec2b65acfa8c3e74aad29346d47ee992
[6] Новый дизайн замыканий: https://github.com/rust-lang/rfcs/blob/master/active/0044-closures.md
[7] ассоциированых типов: https://github.com/rust-lang/rfcs/pull/195
[8] where-условия: https://github.com/rust-lang/rfcs/pull/135
[9] написал RFC: https://github.com/rust-lang/rfcs/pull/230
[10] здесь: http://doc.rust-lang.org/std/stability.html
[11] Cargo, пакетный менеджер Rust: http://crates.io/
[12] Firefox: https://www.mozilla.org/en-US/firefox/channel/
[13] Chrome: http://www.chromium.org/getting-involved/dev-channel
[14] Ember.js: http://emberjs.com/builds/
[15] Источник: http://habrahabr.ru/post/237199/
Нажмите здесь для печати.