Новости IT, хостинга
Новость от 16.10.2012

Адрес в интернете:
https://news.hostdb.ru/index/show/id/6970

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


Представлен релиз экспериментального языка программирования Rust 0.4, развиваемого проектом 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 поддерживает смесь императивных процедурных и объектно-ориентированных методов с такими парадигмами, как функциональное программирование и модель акторов, а также обобщённое программирование и метапрограммирование, в статических и динамических стилях.

С момента прошлого выпуска внесено около 2200 изменений. При подготовке новой версии основное внимание было уделено стабилизации синтаксиса языка и реализации поддержки передачи результатов функций через указатели. Поддержка ранее используемого метода передачи аргументов прекращена. Из других важный улучшений можно отметить начальную поддержку JIT-компиляции и "аккуратного" сборщика мусора. Вместо классов ('class') теперь предлагается использовать более простые структуры ('struct'). Переименованы некоторые неоднозначные элементы, например, вместо ret теперь следует использовать return, вместо alt - match, вместо import - use. Для эффективного взаимодействия между задачами реализована поддержка неименованных каналов (pipe), добавлена новая библиотека с инструментами синхронизации (std::sync).
fn main() {
for ["Alice", "Bob", "Carol">.each |name| {
let name = copy *name;
do task::spawn {
let v = rand::Rng().shuffle([1, 2, 3">);
for v.each |num| {
io::print(fmt!("%s says: '%d'
", name, *num))
}
}
}
}


Базовые возможности языка:
Ориентация на безопасность:
Аккуратная работа с памятью - никаких нулевых и потерянных указателей. Автоматическое управление памятью;
Контроль изменчивости. Объекты неизменяемы (Immutable) по умолчанию;
Безопасность динамического выполнения: обработка сбоев, исключения, ведение лога, RAII / dtors;
Typestate: возможность определения сложных инвариантов, контролирующих структуры данных.
Ориентация на параллельность и эффективность кода:
Явный контроль памяти, контролирование схемы распределения памяти;
Крайне легкие задачи, формируемые в виде сопрограмм. Лёгкость в порождении тысяч и миллионов подпроцессов;
Итераторы стека (фактически лямбда-блоки без распределения кучи);
Статическая, нативная компиляция с созданием исполняемых файлов ELF, PE, Mach-o;
Прямой и простой интерфейс для кода на языке Си;
Ориентация на практическое применение:
Мультипарадигменный, функциональный, императивно-процедурный, объектно-ориентированный, поддерживающий параллельную actor-модель;
Функции первого класса с биндингами;
Нет номинальных типов или иерархии типов;
Мультиплатформенный, поддерживается Windows, Linux, Mac OS X, *BSD;
Хранение строк в UTF8, разнообразие низкоуровневых типов;
Работает с существующими нативными наборами инструментов: GDB, Valgrind, Shark и т.д.;
Практическая возможность нарушения правил: возможность игнорирования правил безопасности, если чётко указано, когда и как их нарушать.


Распечатано с HostDB.ru.