Представлен релиз экспериментального языка программирования Rust 0.3, развиваемого проектом Mozilla. Rust является языком со строгой типизацией, сфокусированным на безопасной работе с памятью и обеспечении высокого параллелизма выполнения заданий (возможность порождать тысячи и даже миллионы подпроцессов). Исходные тексты проекта распространяются под лицензией MIT. Компилятор поддерживает сборку для платформ Linux (x86 и x86_64), FreeBSD (x86_64), Mac OS X (x86 и x86_64) и Windows (x86), включая возможность кросс-компиляции и сборки сразу для нескольких целевых платформ. Параллельно с Rust развивается экспериментальный браузерный движок Servo, написанный на языке Rust и отличающийся поддержкой многопоточного рендеринга web-страниц и распараллеливанием операций с DOM (Document Object Model).
По структуре язык напоминает C++, но существенно отличается в некоторых деталях реализации синтаксиса и семантики, а также ориентацией на блочную организацию структуры кода, которая позволяет реализовать задачи в виде легковесных сопрограмм. Автоматическое управление памятью избавляет разработчика от манипулирования указателями и защищает от возникающих из-за низкоуровневой работой с памятью проблем, таких как обращение к области памяти после её освобождения, разыменование нулевых указателей, выход за границы буфера и т.п. Rust поддерживает смесь императивных процедурных и объектно-ориентированных методов с такими парадигмами, как функциональное программирование и модель акторов, а также обобщённое программирование и метапрограммирование, в статических и динамических стилях.
С момента прошлого выпуска внесено около 1900 изменений. В язык добавлена серия улучшений, направленных на упрощение процесса кодирования, таких как более компактный синтаксис замыканий, контроль вывода предупреждений на уровне отдельных элементов и поддержка выражения 'do' (вместо do-while). Проведена чистка семантики языка, выполнена реорганизация компилятора, расширен спектр библиотечных функций, добавлены новые экспериментальные возможности, такие как поддержка деструкторов и iface для классов, оптимизированный для совместного доступа к памяти тип 'const'.
Базовые возможности языка:
- Ориентация на безопасность:
- Аккуратная работа с памятью - никаких нулевых и потерянных указателей. Автоматическое управление памятью;
- Контроль изменчивости. Объекты неизменяемы (Immutable) по умолчанию;
- Безопасность динамического выполнения: обработка сбоев, исключения, ведение лога, RAII / dtors;
- Typestate: возможность определения сложных инвариантов, контролирующих структуры данных.
- Ориентация на параллельность и эффективность кода:
- Явный контроль памяти, контролирование схемы распределения памяти;
- Крайне легкие задачи, формируемые в виде сопрограмм. Лёгкость в порождении тысяч и миллионов подпроцессов;
- Итераторы стека (фактически лямбда-блоки без распределения кучи);
- Статическая, нативная компиляция с созданием исполняемых файлов ELF, PE, Mach-o;
- Прямой и простой интерфейс для кода на языке Си;
- Ориентация на практическое применение:
- Мультипарадигменный, функциональный, императивно-процедурный, объектно-ориентированный, поддерживающий параллельную actor-модель;
- Функции первого класса с биндингами;
- Нет номинальных типов или иерархии типов;
- Мультиплатформенный, поддерживается Windows, Linux, Mac OS X, *BSD;
- Хранение строк в UTF8, разнообразие низкоуровневых типов;
- Работает с существующими нативными наборами инструментов: GDB, Valgrind, Shark и т.д.;
- Практическая возможность нарушения правил: возможность игнорирования правил безопасности, если чётко указано, когда и как их нарушать.