LINUX.ORG.RU

Rust 0.10

 ,


2

8

Вышла новая версия Rust, языка программирования разрабатываемого Mozilla. Релиз несет в себе около 1500 изменений и исправлений ошибок.

Основные изменения:

  • Язык:
    • новый процесс RFC для изменения языка;
    • паттерны с '@'-указателями удалены из языка;
    • паттерны с '~[T]'-векторами удалены из языка;
    • паттерны с '~str'-строками удалены из языка;
    • '@str' удален;
    • '@[T]' удален;
    • '@self' удален;
    • '@Trait' удален;
    • заголовки, содержащие '@'-boxes для подсчета ссылок внутри типа, при '~'-аллокациях удалены;
    • семантика времени жизни временных выражений (temporary expressions) изменена. Подробнее в #3511, #11585;
    • добавлен новый cross-crate синтаксис расширений (доступен через feature gates). Подробнее в #11151. Эта возможность включает в себя макросы 'macro_rules!' и 'format!' как синтаксические расширения;
    • добавлены новые режимы lint, использование старых по умолчанию выдает предупреждения:
      • лишние скобки;
      • static в верхнем регистре;
      • Camel Case типы;
      • переменные в верхнем регистре;
      • приватные типы с публичной видимостью;
      • '#[deriving]' с raw-указателями.
    • unsafe-функции больше не преобразуются к замыканиям;
    • некоторые макросы с неясными названиями, например 'log_syntax!', теперь доступны через feature gates;
    • атрибут '#[simd]' теперь доступен через feature gates;
    • запрещены инструкции 'extern crate' в настройках видимости, модификатор 'priv' запрещен к использованию вместе с 'use' инструкциями;
    • замыкающие запятые запрещены в списках аргументов и шаблонах кортежей;
    • ключевое слово 'do' теперь является резервированным ключевым словом;
    • добавлены параметры типов по умолчанию, доступно через feature gates;
    • изменен механизм захвата borrowed-переменных в замыкания;
    • 'extern mod' изменен на 'extern crate';
    • удален 'Freeze' trait;
    • добавлен 'Share' trait для типов которые могут разделяться между потоками;
    • labels в макросах теперь гигиенические;
    • вызовы макросов теперь могут ограничиваться через '{}';
    • добавлен возможность перегрузки операторов '*' и '.' через 'Deref' и 'DerefMut' traits;
    • '~Trait' и 'proc' больше не реализуют 'Send' по умолчанию;
    • добавлена поддержка partial type hints через маркер типа '_';
    • введен тип 'Unsafe' для внутренней мутабельности. Преобразование '&T' в '&mut T' без использования 'Unsafe' является неопределенным;
    • реализован атрибут '#[linkage]' для внешних функций;
    • внутренний синтаксис атрибутов изменен с '#[foo];' на '#![foo]';
    • 'Pod' переименован в 'Copy'.
  • Библиотеки:
    • 'libextra' более недоступна. Она была разделена на более мелкие компоненты. Подробности в документации;
    • 'std::condition' удален. Все ошибки I/O передаются через тип 'Result'. Изменена работа макроса 'try!', подробности в #12039;
    • std: модуль 'vec' переименован в 'slice';
    • std: добавлен новый тип 'Vec<T>' для DST. В будущем это будет единственный вектор с изменяемым размером;
    • std: увеличено число публичных reexports 'std::io'. Типы, такие как 'BufferedReader' доступны через 'std::io::BufferedReader' вместо 'std::io::buffered::BufferedReader';
    • std: 'print' и 'println' более не доступны в prelude, используйте вместо них макрос 'println!';
    • std: 'Rc' теперь имеет 'Weak' указатель для прерываемых циклов и больше не пытается статически предотвращать циклы;
    • std: в стандартной поставке используется политика обработки ошибок пользователем вместо падения в библиотеках. Многие функции, такие как 'slice::last()' теперь возвращают 'Option<T>';
    • std: 'fmt::Default' переименован в 'fmt::Show', добавлен новый deriving mode: '#[deriving(Show)]';
    • std: 'ToStr' реализован для всех типов, реализующих 'Show';
    • std: trait для форматированного вывода принимает '&self' вместо '&T';
    • std: метод итераторов 'invert()' был переименован в 'rev()';
    • std: добавлена возможности вывода backtrace при падении task'a, если выставлено значение переменной 'RUST_BACKTRACE';
    • std: стандартизованы соглашения по наименованию для итераторов. Подробнее в wiki;
    • std: 'eof()' удален из 'Reader';
    • std: сетевые типы (networking types) теперь cloneable, разрешено одновременное чтение/запись;
    • std: 'assert_approx_eq!' удален;
    • std: добавлены спецификаторы форматирования 'e' и 'E' для вывода чисел с плавающей точкой в экспоненциальном формате;
    • std: удален 'Times';
    • std: добавлен тип 'std::kinds::marker' для выборочного вывода встроенных привязок (bounds);
    • std: 'hash' был переписан, 'IterBytes' удален, доступен '#[deriving(Hash)]';
    • std: 'SharedChan' был удален, 'Sender' теперь cloneable;
    • std: 'Chan' и 'Port' были переименованы в 'Sender' и 'Receiver';
    • std: 'Chan::new' заменен на 'channel()';
    • std: реализован новый тип синхронных каналов;
    • std: макрос 'select!' доступен для выбора 'Receiver'-ов;
    • std: 'hashmap' и 'trie' были перемещены в 'libcollections';
    • std: 'run' перемещен в 'io::process';
    • std: 'assert_eq!' теперь использует '{}' вместо '{:?}';
    • std: реорганизованы механизмы сравнения и проверки на равенство trait-ов;
    • std: 'rand' перемещен в 'librand';
    • std: 'to_{lower,upper}case' реализован для 'char';
    • std: функциональность логгирования перенесена в 'liblog';
    • collections: 'HashMap' переписана для увеличения производительности и уменьшения потребления памяти;
    • native: в качестве рантайма по умолчанию используется 'libnative'. 'libgreen' доступен для загрузки вручную, подробнее в документации;
    • native: реализована весь I/O функционал, за исключением сигналов;
    • green: оптимизировано создание task-ов в 'libgreen';
    • green: task-и, создаваемые через 'libgreen' используют unmapped guard page;
    • sync: модуль 'extra::sunc' был обновлен на современный rust, перемещен в библиотеку 'sync';
    • sync: добавлен новый тип 'Barrier';
    • sync: реализованы эффективные мьютексы для нативных и зеленых task-ов;
    • serialize: улучшен модуль 'base64';
    • fourcc: добавлен макрос 'fourcc!';
    • hexfloat: реализован макрос 'hexfloat!';
  • Инструментарий
    • 'rustpkg' объявлен устаревшим и удален из основного репозитория. Его замена ('cargo') в разработке;
    • доступны ночные сборки;
    • значительно улучшено использование памяти 'rustc';
    • отключена поддержка rpath для rustc в процессе сборки;
    • улучшен механизм кодогенерации;
    • восстановлена совместимость debuginfo с lldb на OSX;
    • флаги вывода централизованы в один флаг '--emit';
    • флаги crate типов централизованы в один флаг '--crate-type';
    • флаги кодогенерации объединены через флаг '-C';
    • улучшены сообщения об ошибках возникающих при линковке с устаревшими crates;
    • сообщения об ошибках с временем жизни теперь часто показывают как объявить функцию чтобы исправить ошибки;
    • значительно расширена документация;
    • улучшения в 'rustdoc':
      • подсветка синтаксиса и блоки кода;
      • генерация standalone markdown файлов;
      • флаг '--test' проверяет все блоки кода по умолчанию;
      • отображение экспортированных макросов;
      • reexported типы имеют встроенную документацию в месте первого reexport;
      • результаты работы по поиску в crate-ах теперь генерируется в выходную директорию.

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

★★★★★

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

во влажных фантазиях мазиловцев

anonymous
()

Урааа!

Проект и не думает останавливать темпов развития, это же отлично!

Хотя я не уверен, что имело смысл весь лог изменений в новость пихать)

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

C++капец?

если и будет, то когда в чейнджлоге rust'а станет поменьше кардинальных изменений

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

Зачем они тогда запиливали не нужное? До 1.0 этим невозможно пользоваться. Каждый релиз новый язык. С новым окружением. Упорыши.

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

Так это же отлично, что удаляют ненужное.

чтобы удалить что-нибудь ненужное, нужно сначала добавить что-нибудь ненужное (с)

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

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

ozkriff
()

С одной стороны, этим сейчас невозможно пользоваться в неакадемических целях, а с другой - никто и не предлагает; а тот факт, что его пилят, пилят и пилят, при этом, очевидно, еще и не в худшую сторону, только радует.

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

Ну до радикального минимализма Компонетного Паскаля языку. конечно, далеко. Но мне совершенно не очевидно, почему он достоин звания «помойка». Ты не мог бы более развернуто аргументировать?

ozkriff
()

Отличное развитие у ЯП! Осталось только еще вот тут чутка удалить, там добавить и будет всё ништяк! (Сам сишник/плюсовик. Коленки аж затряслись от новости, ага)

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

ну дайте же людям почувствовать свою особенность

anonymous
()

Мое мнение конечно малокомпетентно, но судя по динамике развития пока его допилят до релиза, D и Go уже будут плотно в продакшене

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

Надо еще много чего добавить и еще больше удалить. А что не так-то?

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

че они столько выпилили?

Удаление встроенной поддержки GC планировалось давно (это выпиливание всего на @); удаление ~[], ~str и прочего - это чистка перед введением DST. Остальное мелочи.

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

Много изменений? Ну так значит его активно разрабатывают. Если бы проект был полумертв и изменений почти не было - разве было бы лучше?

ozkriff
()

... объявлен устаревшим и удален из основного репозитория. Его замена ... в разработке

Время идет, ничего не меняется. Упоротость и метания разработчиков.

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

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

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

Сборка мусора нужна.

В низкоуровневом языке, позиционируемом как убийца Си? Никогда ему не стать убийцей Си в таком случае.

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

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

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

Да ты философ.

Упоротость и метания разработчиков.

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

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

Сборка мусора нужна.

В низкоуровневом языке, позиционируемом как убийца Си?

Да.

Никогда ему не стать убийцей Си в таком случае.

Неужели? А ничего, что для самого Си есть реализации сборщиков мусора?

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

Прикинь, именно в этом состоит план (на самом деле, план даже лучше - сборщики мусора как библиотеки). И именно поэтому выпилены @-указатели, встроенные в язык.

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

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

Ну и у Go и D, о которых мы говорили, экосистема тоже чертовски далека от плюсовой.

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

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

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

раз в год из любопытства смотрит ченджлог

Уже да, энтузиазм сменился разочарованием. Это как какой-то безумный долгострой, который можно было бы возвести и побыстрее, но подрядчик все время меняется и каждый новый застройщик начинает процесс подготовки проектной документации заново. Впрочем, название языка соответствует.

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

Это как какой-то безумный долгострой

Это вполне разумный долгострой.

который можно было бы возвести и побыстрее

Нельзя. За 40 лет с момента появления Си замену ему так и не создали (хотя пытались много раз).

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

У них определен срок, они не до бесконечности пилят.

Насколько я понимаю, изначально недооценили сложность создания специфичного для языка пакетного менеджера. Теперь вот осознали ошибку и позвали крутого парня специально для этой задачи:

https://mail.mozilla.org/pipermail/rust-dev/2014-March/009090.html

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

Теперь вот осознали ошибку и позвали крутого парня специально для этой задачи:

Двух крутых парней :)

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

Впрочем, название языка соответствует.

Ну наконец-то! Ты следующий раз так долго не томи...

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

Тем что предназначен для написания реальных программ же, ну

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

В общем случае их сравнивать никак нельзя. Их области применения могу пересекаться и для чего-то из пересечения будет практичней хаскель, а для чего-то ржавчина.

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

Еще до 1.0 долго скакать, потому пусть удаляют на здоровье

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