LINUX.ORG.RU

Rust 0.12

 ,


5

9

Вышла новая версия инструментов разработки языка программирования Rust. Rust — язык системного программирования, предназначенный для написания быстрых и в то же время безопасных (в том числе и во многопоточной среде) приложений.

В данном релизе упор был сделан на переработку документации языка, приведение к единому виду стандартной библиотеки, улучшение пакетного менеджера Cargo и поддержки Windows.

Обзор обновлений в новой версии:

  • Около 1900 изменений в коде.
  • Основные изменения
    • Вводный документ (и набор сопроводительной документации) был полностью переписан и теперь называется The Rust Guide.
    • Множественные улучшения пакетного менеджера Cargo и его поддержка большим числом библиотек.
    • Большое количество изменений API в стандартной библиотеке std для соответствия текущим стандартам разработки Rust. Все изменения отражены в документации.
    • Ряд библиотек был вынесен из дерева Rust во внешние проекты на Github: uuid, semver, glob, num, hexfloat, fourcc. Они могут быть установлены с помощью Cargo.
    • Новая возможность: lifetime elision - позволяет во многих случаях не указывать явно аннотацию времени жизни (lifetime) в сигнатурах методов.
    • Появилась версия компилятора для Windows 64-bit.
  • Язык
    • Операцию индексации теперь можно перегрузить в своих типах данных с помощью трейтов (trait) Index и IndexMut.
    • Конструкция if let теперь выполняется только при совпадении let-паттерна.
    • Новый синтаксис для срезов (slices), например: [0..4]. Поддержать подобный синтаксис в своих типах данных можно с помощью трейтов Slice и SliceMut.
    • Синтаксис для сравнения с образцом срезов стал постфиксным, теперь он имеет вид: [a, b, c..].
    • При использовании интервалов с включением в сравнении с образцом теперь верхняя границы считается не включенной: вместо 0..3 стоит указывать 0...4.
    • Элементы кортежей и кортежных структур теперь могут быть получены с помощью нового синтаксиса индексации: value.0.
    • Атрибут #[crate_id] теперь не поддерживается, версионирование выполняется исключительно пакетным менеджером.
    • Импорт библиотек с переименованием теперь записывается как extern crate foo as bar вместо extern crate bar = foo.
    • Оператор use с переименованием теперь имеет новый синтаксис: use foo as bar вместо use bar = foo.
    • Добавлен новый, более эффективный тип замыканий: unboxed closures. Со временем текущий тип замыканий будет заменен новым.
    • Добавлено ключевое слово move, которое описывает замыкания, захватывающие переменные по значению.
    • Модификация (mutation) и присваивание теперь не могут использоваться в pattern guards.
    • Параметризованные структуры и перечисления теперь могут быть ограничены (иметь trait bounds).
    • Новый, более гибкий синтаксис указания ограничений типов с помощью ключевого слова where
    • Трейт Share переименован в Sync для того, чтобы термин shared обозначал только shared reference.
    • Для типов динамического размера добавлен трейт Sized. Чтобы указать, что параметр типа не должен иметь строгий размер, стоит использовать ограничение: <Sized? T>.
    • Замыкания теперь могут возвращать !, примеры сигнатур: || -> !, proc() -> !.
    • Границы времени жизни (lifetime bounds) теперь могут быть применены к параметрам типа и типам объектов.
    • Старый тип автоматически автоматически управляемых ссылок со сборкой мусора GC<T> окончательно был удален. В будущем появится новая реализация управления памятью со сборкой мусора.
  • Библиотеки
    • Улучшена документация к ряду библиотек.
    • Обновлены битовые векторы: collections::bitv.
    • Библиотека url признана устаревшей. Рекомендуется использовать http://github.com/servo/rust-url, устанавливаемую с помощью Cargo.
    • Почти все типы данных потоков (stream) ввода-вывода теперь могут быть клонированы и закрыты в других потоках (thread) выполнения.
    • Добавлен тип std::time::Duration для использования в методах ввода-вывода, зависящих от таймера.
    • The runtime I/O abstraction layer that enabled the green thread scheduler to do non-thread-blocking I/O has been removed, along with the libuv-based implementation employed by the green thread scheduler. This will greatly simplify the future I/O work.
    • collections::btree переписана с учетом более эффективного и близкого к Rust проектирования.
  • Утилиты
    • Вывод rustdoc теперь содержит метку об уровне стабильности API.
    • Флаг --crate-name теперь может указывать имя компилируемой единицы кода (crate), что ранее указывалось в коде атрибутом #[crate_name.
    • Флаг -C metadata указывает дополнительные метаданные, хэш которых должен попасть в символьные имена собираемого бинарника.
    • Флаг -C extra-filename указывает дополнительную информацию, добавляемую в имя выходного файла для использования пакетным менеджером.
    • Улучшена генерация отладочной информации, которая теперь лучше совместима при отладке через gdb и lldb.
    • Добавлена экспериментальная поддержка параллельной компиляции с помощью флага rustc -C codegen-units.
    • Компилятор теперь не добавляет по умолчанию в бинарные файлы путь для поиска библиотек (rpath).
  • Прочее
    • Оптимизировано использование стека с помощью аннотаций LLVM.
    • Rust для Linux более совместим со старыми версиями ядер и дистрибутивов.

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



Проверено: maxcom ()
Последнее исправление: CYB3R (всего исправлений: 3)
Ответ на: комментарий от O02eg

Самая бесполезная вещь.

Это ещё почему? Имхо удобная система сборки «из коробки» - это очень хорошо. К тем же плюсам наделали 100500 вариантов и продолжают делать. Хорошего в этом мало.

Плюс этакий «пакетный менеджер» для либ - тоже очень здорово. В своё время, хаскелевский кабал весьма впечатлил.

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

Свою систему сборки пилят сейчас, Cargo: https://github.com/rust-lang/cargo

Самая бесполезная вещь.

плюсирую. лучше бы к cmake плагин сделали

Сargo - это прежде всего пакетный менеджер, а не система сборки.

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

Сargo - это прежде всего пакетный менеджер, а не система сборки.

Очередной убийца portage, rpm и пр.?

Нет. Даже непонятно, что вообще заставило тебя так подумать.

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

Тебе что-то не нравится?

Да, обилие несовместимых друг с другом программ, выполняющих одно и то же.

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

выполняющих одно и то же

Нет. Дистрибутивные пакетники привязаны к дистру, а языковые - к языку. Очевидненько, не правда ли? Разрабы сидят на самых разных дистрах и осях, но система доставки у них одна. Когда изобретешь и внедришь универсальный и простой пакетный менеджер, умеющий в многоверсионность, приходи поговорим.

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

И прочие попытки скрестить ужа с ежом типа maven, cabal, ...

А чем они плохи? Вот я на практике С++ использую. Когда хаскель изучал, то кабал показался очень и очень удобным. Одна билд система вместо 100500 плюсовых. Плюс возможность легко либы ставить - такого в плюсах вообще нет.

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

Одна билд система вместо 100500 плюсовых.

При этом они не завязаны на чисто только C/C++.

Плюс возможность легко либы ставить - такого в плюсах вообще нет.

У меня этим занимается portage, ЧЯДНТ?

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

У меня этим занимается portage, ЧЯДНТ?

Все делаешь правильно, у меня apt этим занимается, у кого-то yum. А если мы решим вместе что-то написать, то ручками каждому нужные версии либ ставить придётся. А тут не придётся. Удобно.

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