Выпуск языка программирования Rust 0.12, развиваемого проектом Mozilla Печать
10.10.14 07:27

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

Язык Rust развивается проектом Mozilla и сфокусирован на безопасной работе с памятью и обеспечении высокого параллелизма выполнения заданий (возможность порождать тысячи и даже миллионы подпроцессов). Исходные тексты проекта распространяются под лицензией MIT. Параллельно с Rust совместно с компанией Samsung развивается экспериментальный браузерный движок Servo, написанный на языке Rust и отличающийся поддержкой многопоточного рендеринга web-страниц и распараллеливанием операций с DOM (Document Object Model).

По структуре язык Rust напоминает C++, но существенно отличается в некоторых деталях реализации синтаксиса и семантики, а также ориентацией на блочную организацию структуры кода, которая позволяет реализовать задачи в виде легковесных сопрограмм. Автоматическое управление памятью избавляет разработчика от манипулирования указателями и защищает от проблем, возникающих из-за низкоуровневой работы с памятью, таких как обращение к области памяти после её освобождения, разыменование нулевых указателей, выход за границы буфера и т.п. Rust поддерживает смесь императивных процедурных и объектно-ориентированных методов с такими парадигмами, как функциональное программирование и модель акторов, а также обобщённое программирование и метапрограммирование, в статических и динамических стилях.

С момента прошлого выпуска внесено около 1900 изменений, среди которых:

  • Большое внимание уделено подготовке документации. Полностью переписано руководство разработчика (The Rust Guide);
  • Продолжено развитие пакетного менеджера Cargo, который в некоторых ситуациях уже вполне доведён до готовности;
  • Переписаны и приведены в соответствие к требованиям по написанию кода реализации многих API в области std;
  • Вторичные библиотеки вынесены из основного дерева исходных текстов и теперь должны быть установлены через пакетный менеджер Cargo. Среди таких библиотек: uuid, semver, glob, num, hexfloat, fourcc;
  • Возможность определения lifetime-аннотаций в определении функции;
  • Поддержка работы в 64-разрядных версиях Windows;
  • В компиляторе rustc реализована эксперментальная поддержка распараллеливания при указания опции "-C codegen-units";
  • Практически доведена до готовности реализация типов с динамически изменяемым размером (Dynamically-sized), для управления данными типами представлено новое свойство "Sized";
  • Свойство "Share" переименовано в "Sync" для избежания ассоциаций с типом "shared reference";
  • Добавлено новое ключевое слово "move" для индикации замыканий, захватывающих значения;
  • Добавлено новый более эффективный тип замыканий - "unboxed closures";
  • Для переименования выражений теперь следует использовать "use foo as bar" вместо "use bar = foo", а также "extern crate foo as bar" вместо "extern crate bar = foo";
  • Изменён синтаксис (например, "[0..4]", "[a, b, c..]") определения блоков в "Slice" и "SliceMut". Для определения входящих диапазонов теперь следует использовать три точки вместо двух, т.е. "0...4" вместо "0..4";
  • Расширены возможности стандартной библиотеки. Переработаны библиотеки Bit-vectors, collections::bitv и collections::btree. Проведена оптимизация в работе компонентов, связанных с вводом/выводом.

Базовые возможности языка:

  • Ориентация на безопасность:
    • Аккуратная работа с памятью - никаких нулевых и потерянных указателей. Автоматическое управление памятью;
    • Контроль изменчивости. Объекты неизменяемы (Immutable) по умолчанию;
    • Безопасность динамического выполнения: обработка сбоев, исключения, ведение лога, RAII / dtors;
    • Typestate: возможность определения сложных инвариантов, контролирующих структуры данных.
  • Ориентация на параллельность и эффективность кода:
    • Явный контроль памяти, контролирование схемы распределения памяти;
    • Крайне лёгкие задачи, формируемые в виде сопрограмм. Лёгкость в порождении тысяч и миллионов подпроцессов;
    • Итераторы в стэке (фактически лямбда-блоки без распределения кучи);
    • Статическая, нативная компиляция с созданием исполняемых файлов ELF, PE, Mach-o;
    • Прямой и простой интерфейс для кода на языке Си;
  • Ориентация на практическое применение:
    • Мультипарадигмальный, функциональный, императивно-процедурный, объектно-ориентированный, поддерживающий параллельную actor-модель;
    • Функции высшего порядка с биндингами;
    • Нет номинальных типов или иерархии типов;
    • Мультиплатформенный, поддерживается Windows, Linux, Mac OS X, *BSD;
    • Хранение строк в UTF-8, разнообразие низкоуровневых типов;
    • Работает с существующими нативными наборами инструментов: GDB, Valgrind, Shark и т.д.;
    • Практическая возможность нарушения правил: возможность игнорирования правил безопасности, если чётко указано, когда и как их нарушать.
  1. Главная ссылка к новости (https://mail.mozilla.org/pipermail/rust-...)
  2. OpenNews: Выпуск языка программирования Rust 0.11, развиваемого проектом Mozilla
  3. OpenNews: Подготовлен вариант GNU Coreutils, переписанный на языке Rust
  4. OpenNews: Выпуск языка программирования Rust 0.10, развиваемого проектом Mozilla
  5. OpenNews: Для GCC подготовлен фронтэнд с поддержкой языка Rust, развиваемого проектом Mozilla
Тип: Программы
Ключевые слова: rust, (найти похожие документы)
При перепечатке указание ссылки на opennet.ru обязательно
Реклама
id=adv>
  1.1, Аноним, 10:45, 10/10/2014 [ответить] [смотреть все]     [к модератору] +/
systemd уже переписали на rust ... весь текст скрыт [показать]
 
  2.2, qqqq, 10:49, 10/10/2014 [^] [ответить] [смотреть все]    [к модератору]  +1 +/
не, пока тлько core utils - https://github.com/uutils/coreutils
 
1.3, yantux, 10:55, 10/10/2014 [ответить] [смотреть все]     [к модератору]  –3 +/
Если речь идёт об управлении памятью, то чем это лучше java Что такое сопрограм... весь текст скрыт [показать]
 
  2.5, Аноним, 11:22, 10/10/2014 [^] [ответить] [смотреть все]     [к модератору]  +5 +/
Оно более менее нормально компилируется в native приложение и не тянет за собой ... весь текст скрыт [показать]
 
2.8, cbs, 11:41, 10/10/2014 [^] [ответить] [смотреть все]    [к модератору]  +/ > Если речь идёт об управлении памятью, то чем это лучше java?

Дык ведь... что значит: "лучше"?
Насколько понимаю, задачи у этих языков слишком разные, чтобы ставить вопрос так.

 2.12, Аноним, 12:01, 10/10/2014 [^] [ответить] [смотреть все]     [к модератору]  +/
Вот дурачок Сборщику мусора java до модели памяти Rust как до луны пешком ... весь текст скрыт [показать]
 
1.4, beerseller, 10:57, 10/10/2014 [ответить] [смотреть все]    [к модератору]  –1 +/ А поддержка динамически подключаемых библиотек там намечается?
 
  2.6, Аноним, 11:33, 10/10/2014 [^] [ответить] [смотреть все]     [к модератору]  +2 +/
Хотеть криптолибы на Rust ... весь текст скрыт [показать]
 
2.7, Аноним, 11:38, 10/10/2014 [^] [ответить] [смотреть все]     [к модератору]  –2 +/
Зачем нам безопасность, нам надо чтобы все само подгружалось ... весь текст скрыт [показать]
 
1.11, Аноним, 11:57, 10/10/2014 [ответить] [смотреть все]     [к модератору]  +/
Практически доведена до готовности реализация типов с динамически изменяемым ра... весь текст скрыт [показать]
 
  2.13, Аноним, 12:11, 10/10/2014 [^] [ответить] [смотреть все]     [к модератору]  +/
Поддерживались ... весь текст скрыт [показать]
 

Ваш комментарий  

Read more http://www.opennet.ru/opennews/art.shtml?num=40791