LINUX.ORG.RU

Rust 0.10

 ,


3

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 (smallcultfollowing.com). Остальное мелочи.

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 ★★★★★
()
Вы не можете добавлять комментарии в эту тему: топик перемещен в архив.