LINUX.ORG.RU

Rust 1.12

 


1

6

Команда разработчиков Rust рада представить релиз Rust 1.12 — системного языка программирования, нацеленного на безопасную работу с памятью, скорость и параллельное выполнение кода. В этот релиз вошёл 1361 патч.

Новое в 1.12

По словам разработчиков, релиз 1.12 является, возможно, самым значительным с момента выпуска релиза 1.0. Самое заметное для пользователей изменение в версии 1.12 — это новый формат ошибок, выдаваемых rustc. Сообществом была проделана многочасовая работа по переводу вывода ошибок на новый формат. Кроме того, для лучшей интеграции и взаимодействия со средой разработки и другим инструментарием ошибки теперь можно выводить в формате JSON при помощи специального флага --error-format=json.

Самое большое внутреннее изменение — это переход на новый формат внутреннего представления программы MIR. Незаметное сегодня, это изменение открывает путь к череде будущих оптимизаций компилятора, и для некоторых кодовых баз оно уже показывает улучшения времени компиляции и уменьшение размера кода. Переход на MIR открывает ранее сложнодоступные возможности анализа и оптимизации. Первое из многочисленных грядущих изменений — переписывание прохода, генерирующего промежуточное представление LLVM, того, что rustc называет «трансляцией». После многомесячных усилий новый бэкенд, основанный на MIR, доказал, что готов к реальной работе. MIR содержит точную информацию о потоке управления программы, поэтому компилятор точно знает, перемещены типы или нет. Это значит, что он статически получает информацию о том, нужно ли выполнять деструктор значения. В случаях, когда значение может быть перемещено или не перемещено в конце области действия, компилятор просто использует флаг из одного бита на стеке, что, в свою очередь, проще для оптимизации проходов в LLVM. Конечный результат — уменьшенный объем работы компилятора и менее раздутый код во время исполнения.

Другие улучшения:

  • Множество мелких улучшений документации.
  • rustc теперь поддерживает три новые цели MUSL на платформе ARM: arm-unknown-linux-musleabi, arm-unknown-linux-musleabihf и armv7-unknown-linux-musleabihf. Эти цели поддерживают статически скомпонованные бинарные файлы. Однако, в собранном виде они пока не распространяются.
  • Повышена читабельность описаний ошибок в ссылках и неизвестных числовых типах.
  • Компилятор теперь может быть собран с LLVM 3.9.
  • Тестовые бинарные файлы теперь поддерживают аргумент --test-threads для указания количества потоков для запуска тестов, который действует точно так же, как переменная окружения RUST_TEST_THREADS.
  • В случае продолжительности выполнения тестов больше минуты показывается предупреждение.
  • Вместе с выпусками Rust теперь доступны пакеты с исходными кодами, которые можно установить при помощи rustup через команду % rustup component add rust-src. Исходные коды могут быть использованы для интеграции и взаимодействия со средой разработки и другим инструментарием.
  • Ускорено обновление индекса реестра.
  • cargo new получил флаг --lib.
  • Добавлен вывод профиля сборки (release/debug) после компиляции.
  • cargo publish получил флаг --dry-run.
  • Сокеты на Linux в подпроцессах теперь закрываются правильно через вызов SOCK_CLOEXEC.
  • Определения Unicode обновлены до 9.0.

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

  • Cell::as_ptr и RefCell::as_ptr.
  • IpAddr, Ivp4Addr и Ipv6Addr получили несколько новых методов.
  • LinkedList и VecDeque теперь имеют новый метод contains.
  • iter::Product и iter::Sum.
  • Option реализует From для содержащегося в нём типа.
  • Cell, RefCell и UnsafeCell реализует From для содержащихся в них типах.
  • Cow<str> реализует FromIterator для char, &str и String.
  • String реализует AddAssign.

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

Самая большая возможность, добавленная в Cargo в этом цикле — «рабочие области». Описанные в RFC 1525, рабочие области позволяют группе пакетов разделять один общий файл Cargo.lock. Это позволяет намного легче придерживаться единственной версии общих зависимостей при наличии у вас проекта, который делится на несколько пакетов. Для включения этой возможности в большинстве мультипакетных проектов достаточно добавить одну единственную строчку [workspace] в Cargo.toml верхнего уровня, более сложным установкам может потребоваться дополнительная настройка.

Другая существенная возможность — переопределение источника пакета. При помощи инструментов cargo-vendor и cargo-local-registry можно переопределять зависимости локально (vendoring). Со временем это станет фундаментом для построения инфраструктуры зеркал crates.io.

>>> Подробный список изменений

>>> Подробности

★★★★★

Проверено: Falcon-peregrinus ()
Последнее исправление: Falcon-peregrinus (всего исправлений: 10)

Ответ на: комментарий от shkolnick-kun

Ты ничего не понимаешь. Это же Раст! Это стабильность! Это скорость! Это безопасность! Это дважды безопасность!

anonymous
()

RefCell::as_ptr

Норм изменение, ждал, теперь можно собирать проект без #![...]

Вместе с выпусками Rust теперь доступны пакеты с исходными кодами, которые можно установить при помощи rustup через команду % rustup component add rust-src. Исходные коды могут быть использованы для интеграции и взаимодействия со средой разработки и другим инструментарием.

Тоже нужная вещь, для intellij idea плагин есть, там это для автокомплита нужно.

anonymous
()
Ответ на: Да ну его.... от anonymous

Только памяти в среднем программа на Go жрет раза в три больше.

consensus
()

Эти цели поддерживают статически скомпонованные бинарные файлы. Однако, в собранном виде они пока не распространяются.

Поясните пожалуйста что именно это значит.

realloc ★★★★
()
Ответ на: комментарий от FilosofeM

Compatibility Notes

When printing Windows OsStrs, unpaired surrogate codepoints are escaped with the lowercase format instead of the uppercase When formatting strings, if «precision» is specified, the «fill», «align» and «width» specifiers are no longer ignored The Debug impl for strings no longer escapes all non-ASCII characters

anonymous
()
Ответ на: комментарий от realloc

Как я понимаю, для кросскомприляции, например, тебе нужно будет собрать rustc самому.

consensus
()

Имплементация From для типов-оберток — очень радует, можно будет делать еще более удобный API.

mersinvald ★★★★★
()
Ответ на: комментарий от realloc

These targets produce statically-linked binaries.
Эти цели поддерживают статически скомпонованные бинарные файлы.
produce
поддерживают

consensus
()

Программист Armin Ronacher перестал генерировать код после того как объявил Rust языком своего выбора. Прошли годы.
Или он работает только с python.

Таких людей как Fabrice Bellard среди пользователей Rust так и не наблюдается.

tp_for_my_bunghole
()
Последнее исправление: tp_for_my_bunghole (всего исправлений: 2)
Ответ на: комментарий от realloc

Авторы еще не собрали бинари. Перевод странный.

RazrFalcon ★★★★★
()

Впечатления.

Ребята! Неужели рождается противостояние Go и Rust 😲 а?

Как в своё время Фортран и Алгол, Паскаль и Си, C++ и Java.

anonymous
()
Ответ на: Впечатления. от anonymous

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

mersinvald ★★★★★
()
Ответ на: Впечатления. от anonymous

Ребята! Неужели рождается противостояние Go и Rust 😲 а?

Как в своё время Фортран и Алгол, Паскаль и Си, C++ и Java.

Какое противостояние? Они из разных ниш. Go тут боком зацепило.

anonymous
()
Ответ на: Впечатления. от anonymous

По популярности Go сильно ускакал вперед. Потому сложно увидеть, что есть противостояние, или нет. По причине малого количества проектов на Rust.

consensus
()
Ответ на: комментарий от anonymous

Они из разных ниш.

Ага. Go это чтобы побыстрому набросать код для всяких хайп-проектов, а Rust, чтобы этим потом можно было пользоваться.

consensus
()
Ответ на: Впечатления. от anonymous

На benchmarksgame Golang не сравнивают с Rust.
Но в сравнении с C потребление памяти в одной категории, что выглядит кaк фантастика для языка с GC.

tp_for_my_bunghole
()
Последнее исправление: tp_for_my_bunghole (всего исправлений: 2)
Ответ на: комментарий от Manhunt

Можно кодогенерацию испльзовать, хоть и дерьмо, но лучше чем копипаста.

zloelamo ★★★★
()

Традиционный вопрос — а IDE нормальное запилили? Чтоб с нормальной навигацией и автодополнением.

Deleted
()
Ответ на: комментарий от mersinvald

А рефактринг и навигацию по коду регэкспом делать? Вообще, в курсе, что такое «нормальное IDE» или только на картинках видели?

foror ★★★★★
()
Последнее исправление: foror (всего исправлений: 2)
Ответ на: комментарий от Deleted

юзай vim, и будет тебе счастье

anonymous
()
Ответ на: комментарий от foror

Навинация по символам есть, рефакторинг пока что нет.
Ребята там пилят некий oracle, демон для предоставления IDEшкам информации о коде, типах и проч. Как запилят — будет «нормальное IDE»

mersinvald ★★★★★
()
Ответ на: комментарий от mersinvald

Любой редактор на вкус и цвет + racer + rustsym.

С каких пор текстовый редактор + индексер сорцов == IDE? Я с тем же успехом могу в голом Kate писать код. Где рефакторинг, отладка, проверка ошибок на лету и т.д?

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от Deleted

Чтоб с нормальной навигацией и автодополнением.

Где рефакторинг, проверка ошибок на лету и т.д

Аппетиты растут на ходу :)

tailgunner ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.