Анонс Rust 1.10

оригинал: The Rust Core Team • перевод: Михаил Панков • новости • поддержите на Patreon

Мы рады представить новую версию Rust 1.10. Rust — это системный язык программирования, нацеленный на безопасную работу с памятью, скорость и параллельное выполнение кода.

Как обычно, вы можете установить Rust 1.10 с соответствующей страницы официального сайта, а также ознакомиться с подробным списком изменений в этой версии на GitHub. В этот релиз вошло 1276 патчей.

Что вошло в стабильную версию 1.10

В Rust 1.10 стала доступна одна из наиболее желаемых сообществом возможностей: прерывание работы (abort) при панике вместо размотки стека. Это поведение управляется флагом -C panic=abort или настройкой в Cargo.toml. Зачем это нужно? Как вы помните, паника означает непредвиденную проблему, и для многих приложений abort — разумный выбор. При использовании panic=abort генерируется меньше кода, что означает меньшие по объёму исполняемые файлы и чуть меньшее время компиляции. Очень приблизительная оценка говорит об уменьшении на 10% и размера файла, и времени компиляции. Эта возможность была определена в RFC 1513.

Вторая большая возможность в 1.10 — новый тип контейнера — cdylib. Существующий формат динамических библиотек dylib отныне используется только для динамических библиотек, используемых в проектах на Rust, а cdylib будет использоваться при компиляции кода на Rust для встраивания в другие языки. В выпуске 1.10 cdylib поддерживается компилятором, но пока не поддерживается Cargo. Этот формат был определён в RFC 1510.

Также в ряде случаев была улучшена производительность компилятора, использовать документацию и сам rustdoc стало удобнее, а сообщения об ошибках стали читабельнее.

Наконец, произошло большое изменение в процессе разработки Rust. Оно не влияет на пользователей непосредственно, но сильно поможет тем, кто занимается распространением Rust. Компилятор Rust написан на Rust, что означает использование Rust для сборки Rust. Этот процесс называется «бутстрэпинг» (англ. «bootstrapping»). Исторически, мы делали с помощью снапшотов компилятора определённой версии, из которых всегда и бутстрэпились; при этом снапшот периодически обновлялся, при необходимости. Более того, т. к. компилятор Rust использует нестабильные возможности Rust, чтобы собрать компилятор, нужна была конкретная версия nightly. Это хорошо работало годами, но мы переросли такой процесс. Его главный недостаток состоит в том, что он требует загрузки снапшота в бинарном виде, что плохо подходит для дистрибутивов Linux. В частности, мейнтейнеры дистрибутивов хотели бы собирать последние версии Rust, используя только версии, доступные в предыдущих версиях пакетов, а не недоверенные бинарники. По сути, мы изменили нашу систему сборки так, что Rust 1.10 собирается компилятором Rust 1.9. В будущем, этот способ будет использоваться дальше — Rust 1.11 будет собран с помощью Rust 1.10. Более того, теперь компилятор можно собрать стабильным компилятором. Это упрощает весь процесс бутстрэпинга, и значительно помогает мейнтейнерам дистрибутивов, т. к. им больше не нужно два отдельных пакета. Подробнее можно прочитать в комментариях к pull request.

Подробнее о изменениях в языке в целом можно прочитать в замечаниях к выпуску.

Стабилизация библиотек

Было стабилизировано примерно 70 интерфейсов:

В дополнение, для &CStr, CString, UnsafeCell, fmt::Error, Condvar, Mutex, и RwLock теперь реализован Default.

Наконец, на Linux, если HashMap не может быть инициализирован с помощью getrandom, он временно откатится на использование /dev/urandom, чтобы не блокироваться рано в процессе загрузки.

Подробнее смотрите замечания к выпуску.

Возможности Cargo

В этом выпуске Cargo получил несколько небольших улучшений.

Подробнее смотрите замечания к выпуску.

Разработчики версии 1.10

В выпуске версии 1.10 участвовало 139 человек. Большое вам спасибо!

  • Adolfo Ochagavía
  • Alan Somers
  • Alec S
  • Alex Burka
  • Alex Crichton
  • Alex Ozdemir
  • Amanieu d’Antras
  • Andrea Canciani
  • Andrew Paseltiner
  • Andrey Tonkih
  • Andy Russell
  • Anton Blanchard
  • Ariel Ben-Yehuda
  • Barosl Lee
  • benaryorg
  • billyevans
  • Björn Steinbrink
  • bnewbold
  • bors
  • Brandon Edens
  • Brayden Winterton
  • Brian Anderson
  • Brian Campbell
  • Brian Green
  • c4rlo
  • Christopher Serr
  • Corey Farwell
  • Cristian Oliveira
  • Cyryl Płotnicki-Chudyk
  • Dan Fockler
  • Daniel Campoverde [alx741]
  • Dave Huseby
  • David Hewitt
  • David Tolnay
  • Deepak Kannan
  • Demetri Obenour
  • Doug Goldstein
  • Eduard Burtescu
  • Eduard-Mihai Burtescu
  • Ergenekon Yigit
  • Fabrice Desré
  • Felix S. Klock II
  • Florian Berger
  • Garrett Squire
  • Geordon Worley
  • Georg Brandl
  • ggomez
  • Gigih Aji Ibrahim
  • Guillaume Bonnet
  • Guillaume Gomez
  • Haiko Schol
  • Jake Goulding
  • James Miller
  • jbranchaud
  • Jeffrey Seyfried
  • jethrogb
  • jocki84
  • Johannes Oertel
  • Jonas Schievink
  • jonathandturner
  • Jonathan S
  • Jonathan Turner
  • JP Sugarbroad
  • Kaiyin Zhong
  • Kamal Marhubi
  • Kevin Butler
  • Léo Testard
  • Luca Bruno
  • Lukas Kalbertodt
  • Lukas Pustina
  • Luqman Aden
  • Manish Goregaokar
  • Marcus Klaas
  • mark-summerfield
  • Masood Malekghassemi
  • Matt Brubeck
  • Matt Kraai
  • Maxim Samburskiy
  • Michael Howell
  • Michael Tiller
  • Michael Woerister
  • mitaa
  • mrmiywj
  • Ms2ger
  • Murarth
  • Nerijus Arlauskas
  • Nick Cameron
  • Nick Fitzgerald
  • Nick Hamann
  • Nick Platt
  • Niko Matsakis
  • Oliver ‘ker’ Schneider
  • Oliver Middleton
  • Oliver Schneider
  • Patrick Walton
  • Pavel Sountsov
  • Philipp Matthias Schaefer
  • Philipp Oppermann
  • pierzchalski
  • Postmodern
  • pravic
  • Pyry Kontio
  • Raph Levien
  • Rémy Rakic
  • rkjnsn
  • Robert Habermeier
  • Robin Kruppe
  • Sander Maijers
  • Scott Olson
  • Sean Gillespie
  • Sébastien Marie
  • Seo Sanghyeon
  • silvo38
  • Simonas Kazlauskas
  • Simon Wollwage
  • Stefan Schindler
  • Stephen Mather
  • Steve Klabnik
  • Steven Burns
  • Steven Fackler
  • Szabolcs Berecz
  • Tamir Duberstein
  • Tang Chenglong
  • Taylor Cramer
  • Ticki
  • Timon Van Overveldt
  • Timothy McRoy
  • Tobias Bucher
  • Tobias Müller
  • Tomáš Hübelbauer
  • Tomoki Aonuma
  • Tshepang Lekhonkhobe
  • Ulrik Sverdrup
  • User
  • Vadim Chugunov
  • Vadim Petrochenkov
  • Val Vanderschaegen
  • Wang Xuerui
  • York Xiang