- PVSM.RU - https://www.pvsm.ru -
Мы рады представить новую версию Rust 1.12.1. Rust — это системный язык программирования, нацеленный на безопасную работу с памятью, скорость и параллельное выполнение кода.
Как обычно, вы можете установить Rust 1.12.1 [1] с соответствующей страницы официального сайта, или с помощью rustup [2] выполнив команду rustup update stable
.
Секундочку… один-точка-двенадцать-точка… один?
Несколько недель назад, в анонсе версии 1.12 [3], мы сказали:
Выпуск 1.12 — возможно, самый значительный с момента выпуска 1.0.
И это правда. Одним из важных изменений был масштабный рефакторинг компилятора. Новый бэкенд MIR [4] изменил его архитектуру и некоторые детали реализации. В целом процесс модернизации прошел так:
--enable-orbit
,-Z orbit
, что бы пользователи ночныхСтоль глобальные изменения даются нелегко и очень важны. Поэтому важно сделать всё правильно и тщательно. Вот почему этот процесс идёт так долго. Мы регулярно тестируем компилятор с каждым из пакетов на crates.io, мы просим пользователей проверить -Z orbit
на их исходниках, и после шести недель бета-тестирования, так и не возникло существенных проблем. Поэтому мы приняли решение использовать MIR по умолчанию в версии 1.12.
Но большие изменения это всегда риск, хоть мы старались свести его к минимуму. И так, после выхода 1.12, были найдены регрессии, которые мы не смогли обнаружить при тестировании. Не все из них связаны с MIR, просто, при столь масштабных изменениях, легко проявляются ошибки в других местах.
Учитывая, что у нас шестинедельный цикл выпуска, и мы на полпути к Rust 1.13, почему мы решили выпустить исправление к версии 1.12, а не предложить пользователям просто подождать следующего релиза? Ранее мы говорили нечто подобное: "промежуточные релизы будут происходить только в крайних случаях, таких как уязвимость в стандартной библиотеке".
Мы заботимся не только о стабильности, но и о удобстве использования языка. Мы могли бы сказать всем вам подождать, но мы хотим, чтобы вы знали насколько серьезно мы настроены. Выпуск промежуточного релиза, в данной ситуации, это еще и способ показать наше стремление как можно быстрее исправлять ошибки.
Кроме того, раз уж речь не идёт о проблемах безопасности, это хороший повод попрактиковаться в выпуске промежуточных релизов. Мы никогда не делали этого раньше, и хотя процесс выпуска новой версии частично автоматизирован [8], но не полностью. Наличие промежуточного релиза позволит выявить ошибки [9] среди других инструментальных средств, например rustup [2]. А еще убедиться, что всё пройдёт по плану, если нам когда-нибудь понадобится, выпустить аварийный релиз из-за проблем безопасности или по любой другой причине.
Это первый промежуточный релиз Rust после выхода Rust 0.3.1 [10], случившегося в 2012, он знаменует 72 недели с момента выпуска Rust 1.0, когда мы приняли наш шестинедельный такт выпуска релизов со строгими гарантиями стабильности. И хотя нам очень жаль, что в 1.12 есть регрессии, мы гордимся стабильностью Rust и будем прилагать все усилия, что бы сделать его платформой на которую можно положиться.
Мы хотим, чтобы Rust был самой надежной в мире платформой для разработки программного обеспечения.
Есть кое-что, что вы, как пользователь Rust, можете сделать, чтобы помочь нам исправить ошибки как можно раньше: проверяйте свой код с использованием бета-версий! Каждый бета-релиз, это релиз-кандидат следующей стабильной версии, так давайте использовать средства непрерывной интеграции. Так вы сможете сообщить нам о проблемах еще до того как они попадут в стабильный релиз! Это совсем не сложно. Например, если вы используете Travis [11], добавьте это в свой .travis.yml
:
language: rust
rust:
- stable
- beta
И ваши тесты будут выполняться для двух версий компилятора. Кроме того, если вы не хотите, что бы ошибка в бета-версии приводила к ошибке всей сборки, добавьте это:
matrix:
allow_failures:
- rust: beta
Сборка с бета-версией может стать красной, но ваша стабильная сборка останется зелёной.
Большинство других систем непрерывной интеграции, таких как AppVeyor [12], должны иметь подобную возможность [13]. Обратитесь к документации используемой вами системы.
В версии 1.12.1 было исправлено девять ошибок, естественно, все эти исправления были перенесены в бета-версию 1.13.
Кроме того, есть еще четыре регрессии. Мы решили не включать их в 1.12.1 по разным причинам, но постараемся устранить их как можно скорее.
Полный перечень изменений между версиями 1.12.0 и 1.12.1 здесь [27].
Автор: aka-demik
Источник [28]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/programmirovanie/207583
Ссылки в тексте:
[1] установить Rust 1.12.1: https://www.rust-lang.org/install.html
[2] rustup: https://www.rustup.rs/
[3] анонсе версии 1.12: https://habrahabr.ru/post/311384/
[4] MIR: https://blog.rust-lang.org/2016/04/19/MIR.html
[5] октября: https://github.com/rust-lang/rust/pull/28748
[6] MIR бэкендом по умолчанию: https://github.com/rust-lang/rust/pull/34096
[7] будет доступен только MIR: https://github.com/rust-lang/rust/pull/35764
[8] частично автоматизирован: https://forge.rust-lang.org/release-process.html
[9] выявить ошибки: https://github.com/rust-lang/rust/pull/37173#issuecomment-253938822
[10] Rust 0.3.1: https://mail.mozilla.org/pipermail/rust-dev/2012-July/002152.html
[11] Travis: https://travis-ci.org/
[12] AppVeyor: https://www.appveyor.com/
[13] подобную возможность: https://www.appveyor.com/docs/build-configuration/#allow-failing-jobs
[14] ICE: 'rustc' паниковал с сообщением 'assertion failed: concrete_substs.is_normalized_for_trans()' #36381: https://github.com/rust-lang/rust/issues/36381
[15] Путаница с двойным отрицанием и логическими переменными: https://github.com/rust-lang/rust/issues/36856
[16] rustc 1.12.0 завершался с SIGSEGV при сборке релиза для пакета syn 0.8.0: https://github.com/rust-lang/rust/issues/36875
[17] Rustc 1.12.0 Windows-сборка пакета ethcore прерывалась с ошибкой LLVM: https://github.com/rust-lang/rust/issues/36924
[18] 1.12.0: Использовалось много памяти при линковке релиз-версии с отладочной информацией: https://github.com/rust-lang/rust/issues/36926
[19] Повреждение памяти после перехода на 1.12: https://github.com/rust-lang/rust/issues/36936
[20] "Let NullaryConstructor = something;" приводит в внутренней ошибке компилятора: "tried to overwrite interned AdtDef": https://github.com/rust-lang/rust/issues/37026
[21] Fix ICE: inject bitcast if types mismatch for invokes/calls/stores: https://github.com/rust-lang/rust/issues/37112
[22] debuginfo: Более правильная обработка spread_arg в MIR-trans.: https://github.com/rust-lang/rust/issues/37153
[23] ICE, возможно, связанный с типами ассоциированных типов?: https://github.com/rust-lang/rust/issues/36325
[24] Ошибка компиляции пакета использующего большой static phf::Map, на i686-pc-windows-gnu Beta: https://github.com/rust-lang/rust/issues/36799
[25] Регрессия: ошибка "no method found" при вызове метода дважды, с HRTB impl: https://github.com/rust-lang/rust/issues/37154
[26] ICE: фиктивный тип sizing_type_of: https://github.com/rust-lang/rust/issues/37109
[27] здесь: https://github.com/rust-lang/rust/pull/37173
[28] Источник: https://habrahabr.ru/post/314702/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best
Нажмите здесь для печати.