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 ()

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

А что там со сборкой мусора? Я пропустил какую-то новость?

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

В фейсбучеке же. А одной такой компании достаточно для успеха

этот тот самый громкий успех, когда Александреску написал тысячу строк, но зачем они и, что из себя представляют, никому не рассказал?

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

А что там со сборкой мусора?

http://pcwalton.github.io/blog/2013/06/02/removing-garbage-collection-from-th...

В фейсбучеке же.

Скуя^WС чего бы это? Они выкатили в продакшен Hack, наваяют свою VM и всё у них будет в порядке.

А одной такой компании достаточно для успеха

О, здесь ты гарантированно ошибаешься.

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

отличная замена

ты разупорин то прими. язык по сути не существует, а ты его называешь отличной заменой?

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

Ты серьезно думаешь что публика знает хотя бы 1% происходящего внутри фейсбука?

Вообще-то да. Впрочем, если фейсбук 100% перейдет на D, но об этом никто не узнает, на популярность D это никак не повлияет %)

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

В таких компаниях как фейсбук с первого для всем понято что конфиденциален даже цвет толчка

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

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

Похоже, после перехода на работу в Гугл ты под впечатлением от корпораций. За год? Нехилую инфраструктуру? Зачем это фейсбуку? Они сделают инфраструктуру _для решения своих задач_, и не более. И даже ее они будут делать в случае перехода на D, никаких признаков которого нет даже на горизонте.

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

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

Мой поинт был в том, что если фейсбук не орет о D на каждом углу, это не означает ровным счетом ничего. Может быть и так, и так.

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

удалены
удалены
удалены

Убийца всех языков прямо.

Готовятся стать новым основным языком разработки Gnome.

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

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

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

Это обыгран факт, что любимое занатие разрабов гнома - удалять функционал.

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

Вообще, всем тыкающим Ржавчину, вроде как, все равно на эти релизы пока что - все используют ночные сборки (или сами с гита собирают, если им чего-то надо в компиляторе править).

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

C++капец?

Это он так позиционируется Mozilla'вцами?
И когда они будут переписывать свои продукты (Firefox, Thunderbird) с крестов на Rust, если он такой крутой?

EXL ★★★★★ ()

Херасебе его колбасит.

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

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

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

Чего ты не понял?

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

anonymous ()

std: 'print' и 'println' более не доступны в prelude, используйте вместо них макрос 'println!';

Ну и нахрена так сделали? Или новый макрос заодно и работу fmt! делает?

/* язык и доки новой версии не смотрел пока */

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

Разве не быстрее загуглить было?

Ах, ну да, это же ЛОР...чего это я? перепутал, вопрос зачем-то задал...надо было орать «нинужно!!!» или «the best, убийца си, крестов и иже с ними!!!»

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

Ты какой-то обидчивый, я же ответил тебе. :)

Но я вижу мало смысла в задавании на форуме таких вопросов, ответы на которые гарантированно ищатся в сети за минуту.

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

встрять не осилив две странички это нечто

Ахпростите. Ничего, что я без справки от христианского священника?

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

делающие заключение об отличной замене на основе пригодности языка для серво

Не на основе пригодности для Серво, это пример проекта на Ржавчине был. Просто меня тошнит от плюсов и я не вижу, почему Ржавчина не может быть заменой им. За исключением незрелости (что временное) и большим количеством уже написанного кода на плюсах (с чем уже ничего не поделаешь).

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

За 40 лет с момента появления Си замену ему так и не создали

Замену С давно создали - это Ада. Она же замена С++.

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

Замену С давно создали - это Ада.

Как замена Си она полностью зафейлилась.

Она же замена С++.

Замена Си++ до появления Си++? Впрочем, как замена Си++ Ада тоже зафейлилась.

Но да, фейловых замен Си разработана не одна.

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

Как замена Си она полностью зафейлилась.

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

http://www.adacore.com/customers

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

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

Вообще-то сейчас Ада - стандарт для сложных систем

Ада всего лишь один из языков, используемых для таких систем. Но никто не говорит, что Ада мертва.

http://www.adacore.com/customers

Заметь, сколько там military и navy. Заметь, что речь часто идет о софте для _компонентов_ систем («787 Dreamliner (Air Conditioning Control Unit)»).

Вот это порадовало:

Ship Self-Defense System (SSDS) Mk 2 using GNAT Pro for LynxOS

Wind River’s VxWorks mission-critical real-time operating system (RTOS)

LynxOS сделана на Си. Си (и, по слухам, Си++) используется даже для заказов МО США на равных правах с Адой.

Популярность С объясняется тем, что на нем можно программировать в гораздо более распиздяйском стиле

Это дискуссионный вопрос... у Ады не получилось заменить Си. При том, что ее не быстро разработали.

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

Всё норм. Я вас понимаю. Если всё читать, то времени не останется чтобы на пять звёзд настрочить.

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

Впрочем, как замена Си++ Ада тоже зафейлилась

Сложно придумать язык, который бы фейлил в сравнении с крестами. С++ - эталон фейла и плохого дизайна. В той же Аде буквально все лучше сдалано: нормальная модульность, нормальное ООП с интерфейсами, алгебраические типы данных, ссылки только в аргументах функций, темплейты без тьюринг-полноты.

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

сколько там military и navy

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

Си++

С++ у МО очень сильно урезанный, но это все равно от проблем не спасает: у рэптора весь софт был на Аде написана и работал без проблем, у F-35 - на С++, и это череда сплошных фейлов.

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

После фейла с педалью газа у Тойоты,

По слухам, у Тойоты был эпичный говнокод. Вряд ли Ада от этого спасет.

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

Откуда инфа?

у F-35 - на С++, и это череда сплошных фейлов.

Не припомню сообщений о фейлах в открытой прессе.

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

Вряд ли Ада от этого спасет.

На Аде говнокод на порядок сложнее писать, плюс система типов от многих проблем защищает.

Откуда инфа?

У них же на сайте про тойоту написано: http://www.adacore.com/customers/toyota-itc-japan/

Не припомню сообщений о фейлах в открытой прессе.

http://spectrum.ieee.org/riskfactor/aerospace/aviation/software-testing-probl...

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

Объясни тогда как некий «существующий» язык можно расценивать как замену чему либо, если вероятнее всего к релизу он будет изменён приблизительно процентов на девяносто? Это больше похоже на слепую веру в чудо, основанную на том что «Просто меня тошнит от плюсов», а не на логической оценке языка.

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