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 более совместим со старыми версиями ядер и дистрибутивов.

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

Этот ваш Рю есть в линуксовых репозиториях?

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

В кастомных репозиториях (например своих PPA типа https://launchpad.net/~hansjorg/+archive/ubuntu/rust) есть, в официальные вряд ли до 1.0 попадет, все-таки язык сейчас активно развивается и даже ночные сборки могут быть друг с другом несовместимыми.

Slackware-ch ()

а в толках и девелопменте нету) думал там будет

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

Ну и на этот раз хоть добавлено, добавлено... Вместо выкинуто, выкинуто, выкинуто...

Bad_ptr ★★★★ ()

А есть какой-нибудь интересный проект на этом языке?

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

С постоянным выбрасыванием и изменением синтаксисов то?

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

смотря что для тебя является интересным.
любительских поделок полно. Игровые движки всякие.

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

Мало ли. Я когда-то servo смотрел. Может еще что-то есть?

Из более-менее серьезного? Ну, компилятор Rust написан на Rust :)

Manhunt ★★★★★ ()

Со временем текущий тип замыканий будет заменен новым.
В будущем появится новая реализация управления памятью со сборкой мусора.

окай

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

Стандартная библиотека еще далека от стабилизации. Худо-бедно утрясли только сам язык.

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

Ну и на этот раз хоть добавлено, добавлено... Вместо выкинуто, выкинуто, выкинуто...

Казалось бы, именно выкинуто-выкинуто-выкинуто лучше всего отвечает ауре ЛОР-а («ненужно»).

Чему ж ты радуешься? :D

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

Стандартная библиотека еще далека от стабилизации

С чего это замыкания часть стандартной билиотеки?

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

Худо-бедно утрясли только сам язык.

Да и язык, судя по изменениям, еще колбасит.

anonymous ()

Если выкинуть из определения языка слово «системного», получится очень даже интересный экспериментальный проект по синтезу современного высокоуровневого языка.

В системные, очевидно, не годится. Вероятно, интересные наработки постепенно перетекут в стандарты C/C++ с поправкой на их философию.

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

Переписанные coreutils.

Возможно скоро shellrust какой-нибудь замутят. Ну или ядрышко.

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

В системные, очевидно, не годится.

А теперь поясните же нам, многоуважаемый, с чего бы то вдруг он не годится.

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

Что вы говорите. Его уже на голом железе запускали.

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

*присвистывая, валится со стула*
Нужно! Уже представляю себе RustOS:

  • Rust Kernel
  • Rust Init (rustd :) )
  • Rust *utils
  • Rustshell
  • Rust
  • Rust Graphics System
  • Rust Shell
  • Servo, etc.
nobodyabc ()
Ответ на: комментарий от northerner

В системные, очевидно, не годится.

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

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

Нужно! Уже представляю себе RustOS

Кстати, это нет такая абсурдная идея, какой она тебе кажется. В отличие от

  • C Kernel (linux)
  • C Init (systemd :) )
  • C coreutils
  • C
  • C Graphics System
  • C Shell (bash)
  • Webkit, etc.


оно не будет сегфолтиться и страдать от забытых мьютексов.

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

это не такая абсурдная идея, какой она тебе кажется

Кхм, я на полном серьезе говорил. Честно. И полностью с тобой согласен.

nobodyabc ()
Ответ на: комментарий от Manhunt

оно не будет сегфолтиться

Ну сделает оно, например, твою БД пустой и похерит ФС, вместо того, чтоб упасть, лучше станет?

и страдать от забытых мьютексов.

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

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

Уже представляю себе RustOS

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

anonymous ()

Что, неужели ни одного «ненужно закопать» не будет? ЛОР уже не торт...

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

Ну сделает оно, например, твою БД пустой и похерит ФС, вместо того, чтоб упасть, лучше станет?

Вообще-то легче должно стать от того, что некоторые оошибки сделать станет гораздо труднее.

tailgunner ★★★★★ ()

Что-то их всё колбасит то туда, то сюда в каждом выпуске. Чую я, долгострой будет похлеще D2.

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

В системные, очевидно, не годится.

Откуда такие выводы? Какими возможностями по твоему должен обладать «системый язык программирования», которых нет в Rust?

Вероятно, интересные наработки постепенно перетекут в стандарты C/C++ с поправкой на их философию.

Не перетекут. C++ повязан совместимостью с C и уже настолько перегружен, что расширять его не ломая обратную совместимость и совместимость с C будет крайне сложно. Поэтому растовые концепции владения и заимствования (основная фишка rust, IMHO) реализовать в ядре C++ невозможно, а следовательно компилятор не будет иметь те возможности проверки кода, которые имеет компилятор rust.

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

Что-то их всё колбасит то туда, то сюда в каждом выпуске.

И синтаксис все ублюдочнее :/

Чую я, долгострой будет похлеще D2.

Это вряд ли. Но добавление фич в последний момент и без нормального обсуждения выглядит хреново.

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

Ну сделает оно, например, твою БД пустой и похерит ФС, вместо того, чтоб упасть, лучше станет?

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

Конечно может подвесить, и конечно при опустошенной БД/ФС лучше не станет! И какой вывод ты из этого хочешь сделать?

Manhunt ★★★★★ ()
Последнее исправление: Manhunt (всего исправлений: 1)

Я смотрю, этот несчастный язык настолько часто переколбашивают и перекраивают, что его пора переименовать в Ukrt.

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

Да ладно тебе, всё не можешь смириться с заменой @ на box? По-моему, становится лишь лучше и лучше (всё так же смущает лишь синтаксис для lifetime), в любом случае он же не обрастает всякими static public virtual override final etc.

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

в любом случае он же не обрастает всякими static public virtual override final etc.

А вот это пока еще довольно смелое утверждение :-). Не так давно предложили зарезервировать кучу ключевых слов. Правда это конечно не значит, что они будут использоваться все сразу в одном месте.

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

Мне в крестах этих словечек порой не хватает.

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

И синтаксис все ублюдочнее :/

За то они упрощают core language. А он в этом определенно нуждается!

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

всё не можешь смириться с заменой @ на box?

На Box<> же. Мало того, что символов больше, так ещё и название неточное (это не box, а pointer to a boxed object), да ещё и сделали box зарезервированных словом.

он же не обрастает всякими static public virtual override final etc.

Судя по use ... as, они двигаются именно туда %)

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

В первых строчках упоминают Армстронга и его детище - зачётно.

Спасибо за ссылку.

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

Это вряд ли. Но добавление фич в последний момент и без нормального обсуждения выглядит хреново.

Синтаксис мне не нравится, но это мои субъективные проблемы (все эти <> и :: выглядят ужасно). Гораздо хуже то, что они не определились с концепцией толком. И тут у них два пути: либо долго и нудно идти к цельности (+20 лет), либо всё сломать, затем в командно-административном порядке зафиксировать и выпустить как есть. Первый вариант ведёт к долгострою, второй к тому, что получится лютый пиздец и понадобится Rust 2.0, полностью несовместимый с оригиналом, чтобы это исправить.

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

Игровые движки всякие.

Движки имело бы смысл подцеплять готовые, увы, почти все на плюсах, а с его (плюсов) импортом пока туго...

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

все эти <> и :: выглядят ужасно

Дайте угадаю - вы никогда не писали на плюсах. :)

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

Webkit, etc.

Ну ради этого-то (servo) всё и затевалось. Т.е. с конца идут. И правильно. Линус с эмулятора терминала начинал, а сейчас браузер актуальнее. :)

Кстати, coreutils тоже кто-то вроде взялся пилить. Пока for fun.

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

Ну так-то концепция языка вполне определенная: написать достаточно быстрый и «близкий к железу» (как C и С++) язык, при этом безопасно работающий с памятью - как языки со сборкой мусора - одновременно избавившись от оверхеда в виде этой самой сборки мусора. В этом смысле, мне кажется, логика синтаксиса и семантики языка вполне определена и подчиняется одному небольшому набору правил.

Или что-то другое имеется в виду?

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