[Перевод] Анонс Rust 1.2
Сегодня завершаются циклы стабильного Rust 1.2 и бета-Rust 1.3! Читайте дальше об основных изменениях или переходите к более подробным release notes.
Что вошло в стабильный релиз 1.2
Как сообщалось ранее, Rust 1.2 принёс два существенных улучшения в компиляторе:
- Общее повышение производительности компилятора, что наиболее заметно в пакетах hyper (компилируется в 1.16 раза быстрее), html5ever (в 1.62 раза), regex (в 1.32 раза) и rust-encoding (в 1.35 раза). Вы можете посмотреть подробную статистику производительности на этом сайте (сделанном Nick’ом Cameron’ом), выставив даты с 2015–05–15 по 2015–06–25.
- Параллельная кодогенерация теперь работает и даёт прирост в 33% скорости на начальных стадиях компиляции компилятора Rust на четырёхъядерной машине. Параллельная кодогенерация особенно полезна для отладочных сборок, потому что она предотвращает использование некоторых оптимизаций;, но она также может использоваться и при включённых оптимизациях, давая, по факту, уровень
-O1
. Активировать параллельную генерацию можно, передавrustc
флаг-C codegen-units=N
, гдеN
— желаемое количество параллельных потоков.
Производительность Cargo также существенно улучшилась:
- Сборки, которые не требуют перекомпиляций («no-op-сборки») в больших проектах стали гораздо быстрее; например, в Servo время сборки упало с 5 секунд до 0.5 секунды.
- Cargo теперь поддерживает разделяемые «целевые» директории, в которых кешируются скомпилированные зависимости для разных пакетов, что значительно уменьшает время сборки в сложных проектах.
Также в релиз 1.2 вошла поддержка тулчейна MSVC (Microsoft Visual C), в дополнение к вариантам от GNU. В итоге, код на Rust теперь может напрямую линковаться с кодом, собранным нативными для Windows утилитами. Сам компилятор способен bootstrap’иться на MSVC, у нас уже есть предварительные ночные сборки, и мы тестируем все библиотеки rust-lang на MSVC. Поддержки раскрутки стека (unwinding) ещё нет (процесс завершается при паниках), но работа над её внедрением ведётся.
С точки зрения языка, в Rust 1.2 завершилась работа над поддержкой типов с динамическим размером, что дало возможность умным указателям вроде Rc
напрямую работать с массивами и трейт-объектами, т.е., например, Rc<[T]>
полностью готов к использованию. Это улучшение применимо ко всем умным указателям из стандартной библиотеки. Поддержка для сторонних типов указателей доступна в ночных сборках и вскоре будет стабилизирована полностью.
Что нового в 1.3 beta
Одной из наиболее интересных разработок в цикле 1.3 было создание Растономикона — новой книги о «тёмных искусствах продвинутого и небезопасного программирования на Rust». Пока что эта книга только в самом начале написания, но уже сейчас в ней есть совершенно бесценное описание более тонких аспектов Rust.
В цикле 1.3 также имеются улучшения производительности, в основном, в стандартной библиотеке:
Мы также предприняли отдельные шаги к предварительной поддержке Windows XP. Хоть мы и не собираемся делать Windows XP платформой «первого класса», теперь стало возможным программировать на Rust под XP, если избегать использования отдельных элементов стандартной библиотеки.
Со стороны Cargo мы добавили возможность ограничения lint’ов, согласно ранее принятому RFC. Идея этой функциональности в том, что lint’ы зависимостей вашего проекта не должны мешать вам скомпилировать проект, что, в свою очередь, даст нам возможность подстраивать поведение lint’ов, не оказывая негативного влияния на экосистему в целом.
Контрибьюторы релиза 1.2
Стабильный релиз 1.2 является плодом упорной работы 180 человек:
Aaron Turon
Abhishek Chanda
Adolfo Ochagavía
Aidan Hobson Sayers
Akshay Chiwhane
Alex Burka
Alex Crichton
Alex Stokes
Alexander Artemenko
Alexis Beingessner
Andrea Canciani
Andrew Foote
Andrew Kensler
Andrew Straw
Ariel Ben-Yehuda
Austin Hellyer
Barosl Lee
Ben Striegel
Björn Steinbrink
Brian Anderson
Brian Campbell
Brian Leibig
Brian Quinlan
Carol (Nichols || Goulding)
Chris Hellmuth
Christian Stadelmann
Chuck Bassett
Corey Farwell
Cornel Punga
Cruz Julian Bishop
Dave Huseby
David Campbell
David Stygstra
David Voit
Eduard Bopp
Eduard Burtescu
Eli Friedman
Emilio Cobos Álvarez
Emily Dunham
Eric Ye
Erik Michaels-Ober
Falco Hirschenberger
Felix S. Klock II
FuGangqiang
Geoffrey Thomas
Gleb Kozyrev
Guillaume Gomez
Gulshan Singh
Heejong Ahn
Huachao Huang
Huon Wilson
Ivan Ukhov
Iven Hsu
Jake Goulding
Jake Hickey
James Miller
Jared Roesch
Jeremy Schlatter
Jexell
Jim Blandy
Johann Tuffe
Johannes Hoff
Johannes Oertel
John Hodge
Jonathan Reem
Joshua Landau
Kevin Ballard
Kubilay Kocak
Lee Jeffery
Leo Correa
Liigo Zhuang
Lorenz
Luca Bruno
Luqman Aden
Manish Goregaokar
Marcel Müller
Marcus Klaas
Marin Atanasov Nikolov
Markus Westerlind
Martin Pool
Marvin Löbel
Matej Lach
Mathieu David
Matt Brubeck
Matthew Astley
Max Jacobson
Maximilian Haack
Michael Layzell
Michael Macias
Michael Rosenberg
Michael Sproul
Michael Woerister
Mihnea Dobrescu-Balaur
Mikhail Zabaluev
Mohammed Attia
Ms2ger
Murarth
Mário Feroldi
Nathan Long
Nathaniel Theis
Nick Cameron
Nick Desaulniers
Nick Fitzgerald
Nick Hamann
Nick Howell
Niko Matsakis
Nils Liberg
OlegTsyba
Oliver «ker» Schneider
Oliver Schneider
P1start
Parker Moore
Pascal Hertleif
Paul Faria
Paul Oliver
Peer Aramillo Irizar
Peter Atashian
Peter Elmers
Philip Munksgaard
Ralph Giles
Rein Henrichs
Ricardo Martins
Richo Healey
Ricky Taylor
Russell Johnston
Russell McClellan
Ryan Pendleton
Ryman
Rémi Audebert
Sae-bom Kim
Sean Collins
Sean Gillespie
Sean Patrick Santos
Seo Sanghyeon
Simon Sapin
Simonas Kazlauskas
Steve Gury
Steve Klabnik
Steven Allen
Steven Fackler
Steven Walter
Sébastien Marie
Tamir Duberstein
Thomas Karpiniec
Tim Ringenbach
Tshepang Lekhonkhobe
Ulrik Sverdrup
Vadim Petrochenkov
Wei-Ming Yang
Wesley Wiser
Wilfred Hughes
Will Andrews
Will Engler
Xuefeng Wu
XuefengWu
Yongqian Li
York Xiang
Z1
ben fleis
benaryorg
bluss
bors
clatour
diwic
dmgawel
econoplas
frankamp
funkill
inrustwetrust
joliv
klutzy
marcell
mdinger
olombard
peferron
ray glover
saml
simplex
sumito3478
webmobster