Представлен (https://blog.rust-lang.org/2016/09/29/Rust-1.12.html) релиз языка программирования Rust 1.12 (http://www.rust-lang.org), развиваемого проектом Mozilla, обеспечивающего автоматическое управление памятью и предоставляющего средства для высокого параллелизма выполнения заданий, при этом обходясь без использования сборщика мусора и runtime. Параллельно с Rust совместно с компанией Samsung развивается экспериментальный браузерный движок Servo (https://www.opennet.me/opennews/art.shtml?num=44712), написанный (https://github.com/servo/servo/) на языке Rust и отличающийся поддержкой многопоточного рендеринга web-страниц и распараллеливанием операций с DOM (Document Object Model).
В состав нового выпуска принято 1361 изменений от 176 разработчиков. Основные новшества (https://github.com/rust-lang/rust/blob/master/RELEASES.md):- Переход на новый бэкенд компилятора, использующий модель трансляции, основанную на дополнительном промежуточном представлении MIR (https://blog.rust-lang.org/2016/04/19/MIR.html) (mid-level IR), применяемом после HIR (high-level IR), но перед LLVM IR. MIR предоставляет всю необходимую информацию о потоке управления программы, позволяя компилятору точно судить об изменении типов и необходимости вызова деструкторов, манипулируя простейшими структурами в стеке, легко транслируемыми в вид, поддающийся оптимизации в LLVM.
MIR также позволяет обойтись значительно более простым языком, упрощающим создание фаз компиляции и проверки корректности, без необходимости выполнения манипуляций только с достаточно сложным абстрактным синтаксическим деревом (AST). Для некоторых типов кода после внедрения MIR наблюдается сокращение времени компиляции и размера результирующего кода. В дальнейшем, MIR позволит добавить новые режимы оптимизации, труднореализуемые при ранее используемой схеме работы компилятора;
- Представлен новый формат сообщений об ошибках, выводимых компилятором rustc. Новый формат в наглядном виде доводит до разработчика внутреннюю информацию о причинах возникновения ошибки, подсвечивая цветом части кода, связанные с проблемой, и приводя в примечании данные о том, что именно не так с кодом. При этом показывается не только строка в коде, на которой непосредственно возникла ошибка, но и контекстно связанные с ошибкой строки. Например, при ошибке вызова функции из-за неверного указания аргументов, дополнительно показывается строка с определением аргументов функции. Новый формат может выводиться не только на экран, но и в виде конструкций JSON ("--error-format=json") для автоматизированной обработки результатов сборки;
- В пакетный менеджер Cargo добавлена поддержка "рабочих областей" (workspaces), позволяющих использовать в группе пакетов единый файл блокировки Cargo.lock. Для проектов, разбиваемых на несколько пакетов, новая возможность позволит упростить поддержание общих зависимостей. В cargo также добавлена возможность переопределения источника исполняемых контейнеров (crate), что позволяет при помощи команд cargo-vendor и cargo-local-registry организовать обращение к локальной копии зависимостей, что в будущем послужит основой для возможности создания локальных зеркал репозитория crates.io;
- В rustc добавлена поддержка трёх новых целевых платформ библиотеки MUSL: arm-unknown-linux-musleabi, arm-unknown-linux-musleabihf и armv7-unknown-linux-musleabihf, для которых генерируются статически связанные исполняемые файлы;
- Добавлена поддержка сборки компилятора с использованием LLVM 3.9;
- В тестовые исполняемые файлы добавлена опция "--test-threads" для задания числа потоков, используемых при запуске тестов. При выполнении тестов дольше 60 секунд теперб выводится предупреждение;- В разряд стабильных переведена новая порция функций и методов.
Напомним, что язык Rust сфокусирован на безопасной работе с памятью и обеспечении высокого параллелизма выполнения заданий. При этом Rust обходится без использования сборщика мусора или runtime, что делает возможным создания на Rust библиотек, которые могут выступать в роли прозрачной замены библиотекам для языка Си. Для распространения библиотек на языке Rust, обеспечения сборки и управления зависимостями проектом развивается пакетный менеджер Cargo (http://blog.rust-lang.org/2014/11/20/Cargo.html), позволяющий получить нужные для программы библиотеки в один клик. Для размещения библиотек введён в строй репозиторий crates.io (https://crates.io/).
По структуре язык Rust напоминает C++, но существенно отличается в некоторых деталях реализации синтаксиса и семантики. Автоматическое управление памятью избавляет разработчика от манипулирования указателями и защищает от проблем, возникающих из-за низкоуровневой работы с памятью, таких как обращение к области памяти после её освобождения, разыменование нулевых указателей, выход за границы буфера и т.п. Rust поддерживает смесь императивных, процедурных и объектно-ориентированных методов с такими парадигмами, как функциональное программирование и модель акторов, а также обобщённое программирование и метапрограммирование, в статических и динамических стилях.
URL: https://blog.rust-lang.org/2016/09/29/Rust-1.12.html
Новость: http://www.opennet.me/opennews/art.shtml?num=45256
> Добавлена поддержка сборки компилятора с использованием LLVM 3.9Как-никак ровно 4 недели назад вышел.
> и модель акторовКочует из новости в новость эта самая модель акторов. Кто-то может объяснить, что имеется ввиду, ибо в стандартной библиотеке никаких акторов нет.
Возможно были ранее (до 1.0) и их убрали из стандартной библиотеки как не production-ready реализацию.Как я понимаю, для actor model в языке уже есть необходимые механизмы (channels), а реализации можно поискать на крейтс:
> Возможно были ранее (до 1.0) и их убрали из стандартной библиотеки как не production-ready реализацию.
>
> Как я понимаю, для actor model в языке уже есть необходимые механизмы (channels), а реализации можно поискать на крейтс:
>
> https://crates.io/search?q=actorНу так речь именно про стандартную библиотеку, в крейтах много чего есть.
Скорее всего имеются ввиду таски, которые были весьма схожи с акторами. Но их выпилили, как и зелёные потоки.
Так и зачем это писать из новости в новость?
Потому что это шаблон для копипасты, с которым нюьсмейкером влом разбираться.
В этом и заключается весь rust - сплошной булшит из фантазий его апологетов N-летней давности.
разрешите уточнить: фантазии или апологеты N-летней давности?
Уже можно чисто на Rust писать Android-приложения? Никто не в курсе?
"Чисто на расте" можно писать то же, что и "чисто на сях".
Можно, начиная с компилятора и загрузчика
> По структуре язык Rust напоминает C++...Вообще никак не напоминает, зачем такие глупости постоянно переписывать из новости в новость.
так про все языки пишут, у которых блоки в фигурных скобках. так писали про пёрл, про свифт, про го.Просто когда читаете такую надпись не воспринимайте ее всерьёз.
Эрлангисту оно напоминает эрланг (без OTP и, к сожалению, без лёгких процессов).Хаскелисту... нет, хаскелисту оно, наверное, ничего не напоминает из-за отсутствия монад и жутко красивой, но практически бесполезной "ленивости".