LINUX.ORG.RU

Rust 0.9

 ,


2

7

Сегодня было объявлено о выходе очередной версии Rust — языка программирования, разрабатываемого Mozilla.

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

  • Язык:
    • удален тип float, для чисел с плавающей точкой используются типы f32, f64;
    • добавлена возможность включения экспериментальных фич (feature gating) на уровне crate'ов (атрибут '#[feature(foo)]');
    • managed boxes (@) теперь включаются с помощью атрибута '#[feature(managed_boxes)]' и в будущем будут удалены. Вместо них используются типы Gc и Rc;
    • '@mut' удален, вместо него используется тип 'std::cell::{Cell, RefCell}';
    • для возврата в начало цикла используется ключевое слово 'continue' вместо 'loop';
    • запрещено изменение строк через индексацию;
    • новый синтаксис для создания raw-строк ('r"foo"'). Также можно создать raw-строку с помощью совпадающих хэш-разделителей 'r###«foo»###';
    • тип '~fn' теперь пишется как 'proc (args) -> retval { ... }' и может вызываться только однажды;
    • тип '&fn' теперь пишется как '|args| -> ret';
    • тип '@fn' удален;
    • ключевое слово 'do' теперь работает только с procs-лямбдами;
    • одноэлементные tuple-like структуры больше не могут быть разыменованы для получения внутреннего значения. Более полное решение для перегрузки оператора разыменования будет предоставлено в будущем;
    • атрибут '#[link(...)]' был заменен атрибутом '#[crate_id = «name#vers»]';
    • пустые реализации (impl) должны прерываться пустыми фигурными скобками, использование ';' для этого запрещено;
    • ключевые слова больше не могут использоваться как lifetime-имена, 'self'-lifetime больше не имеет особого смысла;
    • удален макрос 'fmt!';
    • удалены макросы 'printf!' и 'printfln!', вместо них используются 'print!' и 'println!';
    • pattern matching поддерживает 'mut' ('let (mut x, y) = (1, 2);'
    • вместо синтаксиса 'extern mod foo (name = «bar»)' теперь следует использовать 'extern mod foo = «bar»';
    • новые зарезервированные слова 'alignof', 'offsetof', 'sizeof';
    • макросы могут иметь атрибуты;
    • макрос 'asm!' теперь включается feature-gated атрибутом '#[feature(asm)]';
    • комментарии могут быть вложенными;
    • значения неявно преобразуются к типам trait'ов которые они реализуют (раньше необходимо было явно использовать 'as');
  • Библиотеки:
    • std: API для 'option' и 'result' был переработан для того чтобы сделать его более простым, консистентным и композабельным;
    • std: Полностью заменен модуль 'std::io', включая планировщик. Полностью реализованы File, TCP, UDP, Unix сокеты, именованные каналы и таймеры;
    • std: в модуль 'io::util' добавлены полезные реализации типов 'Reader' и 'Writer', включая 'NullReader', 'NullWriter', 'ZeroReader', 'TeeReader';
    • std: Тип 'extra::rc' перемещен в std;
    • std: Тип 'Gc' в модуле 'gc' заменит тип '@';
    • std: Удален тип 'Either';
    • std: 'fmt::Default' может быть реализован для любого типа с помощью синтаксиса 'format!(«{}», myfoo)';
  • Инструментарий:
    • команды 'rust' и 'rusti' были удалены из-за отсутствия поддержки;
    • 'rustdoc' был полностью переписан;
    • 'rustdoc' может тестировать примеры кода из документации;
    • 'rustpkg' может тестировать пакеты с аргументом 'test';
    • 'rustpkg' поддерживает произвольные зависимости, включая библиотеки на C;
    • улучшен механизм генерации отладочной информации в 'rustc';
    • улучшены сообщения об ошибках для несбалансированных разделителей в 'rustc';
    • удалена поддержка JIT в 'rustc';
    • исполнимые файлы и статические библиотеки могут быть собраны с LTO (ключ '-Z lto');
    • в 'rustc' добавлен флаг '--dep-info' для вывода сообщения зависимостей инструментам сборки.

Детальный обзор изменений с примерами

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

★★★★★

Проверено: Shaman007 ()
Последнее исправление: Shaman007 (всего исправлений: 2)

Один из жирных минусов еще этого вашего Rust это Compile Time, на больших проектах поведение будет схожим с С++, что является очередным минусом для Rust и плюсом для Go (он компилится в тыщу раз быстрее)

so slow: http://huonw.github.io/isrustfastyet/buildbot/

Regardless of all that, yes, the Rust compiler *is* slower than the Go compiler. Not a factor 25, when you make a fair comparison, but still quite a lot slower. This has two reasons. Firstly, the Go language has partially been designed with compiler speed in mind. It is a simple language,compared to Rust, and thus the compiler simply has to do less work. Secondly, Rob Pike has probably implemented more compilers than all of the Rust team combined, so there's the issue of the Rust compiler simply not being written as cleverly as the Go compiler. This second factor can, and will, be mitigated in the future as the language stabilizes and the compiler gets streamlined further. The first issue means that Rust will probably never compile quite as quickly as Go, because it trades developer ergonomics for compilation time.

so damn slow: https://mail.mozilla.org/pipermail/rust-dev/2012-October/002465.html

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

Go (он компилится в стопицот раз быстрее)

fixed

Кстати, компилятор PHP еще быстрее.

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

Один из жирных минусов еще этого вашего Rust это Compile Time

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

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

Это совершенно бесполезная хар-ка компилятороа

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

если финальный код работает значительно быстрее.

самое смешное, что он не быстрее, делайте выводы.

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

компилить с утра до обеда

Ты выдаешь свои фобии за реальность.

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

Хедеры, в ржавчине нет хедеров. Там отличная система модулей. Такого ада со скоростью сборки больших проектов, как в С++ с бустом и еще каким говном не будет.

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

Такого ада со скоростью сборки больших проектов, как в С++ с бустом и еще каким говном не будет.

Будут точно так же использоваться generic'и и макросы во все места, будет похожий «ад».

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

Будут точно так же использоваться generic'и и макросы во все места, будет похожий «ад».

Точно так же - не будут. Кроме того, дженерики хранятся уже в виде AST.

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

Точно так же - не будут. Кроме того, дженерики хранятся уже в виде AST.

Проблема макросов и generic'ов это кодогенерация с последующей оптимизацией под конкретное инстанцирование, а не этап их синтаксического разбота. Закостылить чтение .h можно даже в плюсах через какие-нибудь «precompiled headers», но это симльно погоды не меняет.

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

Проблема макросов и generic'ов это кодогенерация с последующей оптимизацией под конкретное инстанцирование

Это не проблема, а плата за возможности.

Закостылить чтение .h можно даже в плюсах через какие-нибудь «precompiled headers»

Вот именно - закостылить. С кучей неочевидных ограничений.

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

Это не проблема, а плата за возможности.

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

Вот именно - закостылить. С кучей неочевидных ограничений.

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

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

Факт, что за это приёдтся платить значительно дольшим временем сборки.

Факт, что время компиляции будет бОльшим. Не факт, что намного большим. Особенно если учесть современные техники метапрограммирования на Си++, когда шаблоны используются в качестве языка программирования.

Вот именно - закостылить. С кучей неочевидных ограничений.

Тебе то, как пользователю, какая пичаль?

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

Это проблема разработчиков помпилятора и системы сборки.

Эту проблему невозможно решить в рамках Си++. См. статьи по новой модульной системе LLVM.

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

Один из жирных минусов еще этого вашего Rust это Compile Time, на больших проектах поведение будет схожим с С++, что является очередным минусом для Rust и плюсом для Go (он компилится в тыщу раз быстрее)

Что-то я не понял...

В С++ проблемы с тем, что нет модулей. В том же D с модулями компиляция гораздо быстрее, хотя присутствyют и шаблоны и прочая фигня. С какой стати Rust медленным-то будет?

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

В том же D с модулями компиляция гораздо быстрее

в том же D и без модулей компиляция тормозная, лично проверено, а вот компилятор rust действительно шустр

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