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)
Ответ на: комментарий от kot_otbelivatel

Начинался язык вроде хорошо, но такими темпами они себе перл сделают.

Наоборот же: убирают лишние спец. символы (boxed ptr), приводят к общему виду (замыкания), всё движется в правильном направлении.

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

тебе это никогда писать не придётся.

никогда не говори никогда

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

вангую в след. версии std::cell::{System::Cell^ %arg, <Template<RefCell<...>?^%>};))]fmt!.

Не страшно — вывод типов же присутствует

Этот высер основан на конструкции импорта. Никакой вывод типов ее не упростит.

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

А ты, выходит, весёлый дебил? На мой взгляд, синтаксис языка стал чуть менее удобен и я просто высказал свою точку зрения. Что такого дебильного в моём сообщении?

Safort
()

Короче, я так понял, всё идёт к усложнению синтаксиса. Вангую, что для раста появится некий аналог CoffeeScript, который посахарит всё обратно.

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

один говорит ';##[[[$$$_hrvalsttr_STD__]] ахаляй махаляй пыщ пыщ, а другой ему отвечает @!()**^^^^<>....

Бростеп: теперь и ЯП.

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

там присутствует ], оно закрывает вообще всё

unt1tled ★★★★
()

в сравнении с этим даже хаскелл - псевдокод.

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

А я, выходит, человек, который немного в теме.

Ну так и будь в теме молча, а не оскорбляй людей. Или объясни в чём проблема.

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

читабельности нет.

Твои личные привычки.

статики нет.

И это хорошо.

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

Ну perl же стал =)

И не только он. Я на то и намекаю :)

Кстати, а у авторов Rust что на счёт бороды?

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

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

Ну так не проблема - это можно и в Rust, и в Java, и в Си++.

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

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

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

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

Покажи свой код на нем и расскажи что он делает.

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

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

А у этого раста есть свой компилятор

В native что ли? Зачем, когда есть llvm? Он, собственно, для этого и создавался.

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

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

ЛОРовец во всей красе.

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

Как же ты тогда можешь утверждать о удобстве разработки

Где я это утверждал?

говоря, что раст «нужен»

А это я где утверждал? Ссылки или GTFO.

Си уже давно нужна замена. Я надеюсь, что Rust ей будет, но, естественно, не могу этого утверждать.

ЛОРовец во всей красе.

Лучше на себя посмотри.

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

А это я где утверждал?

Я пришел к такому выводу, почитав твои комментраии в треде.

Си уже давно нужна замена. Я надеюсь, что Rust ей будет

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

do spawn_with((constellation_port,
                   constellation_chan.clone(),
                   profiler_chan.clone(),
                   compositor_chan,
                   opts.clone()))
            |(constellation_port,
              constellation_chan,
              profiler_chan,
              compositor_chan,
              opts)| {
        let opts = &opts;
pub extern "C" fn android_start(argc: int, argv: **u8) -> int {
    do std::rt::start_on_main_thread(argc, argv) {
        let mut args:~[~str] = ~[];
        for i in range(0u, argc as uint) {
            unsafe {
                args.push(str::raw::from_c_str(*argv.offset(i as int) as *i8));
            }
        }
        run(opts::from_cmdline_args(args))
    }
}

Лучше на себя посмотри.

Не отрицаю :-)

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

Короче, я так понял, всё идёт к усложнению синтаксиса.

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

Go > Rust во все места в этом плане.

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

Уже сейчас видно, что исходный код будет похож на перл.

Если это и видно, то не мне. Сырцы Servo похожи на обычный Си, немного разбавленный Ocaml.

Все эти разные виды скобочек, решеток и пр.?

Это всё есть в Си.

Насколько я понял, первый из приведенных тобой кусков кода - «pyramid of doom», что уже считается плохим стилем; второй - граница Rust и Си.

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

Его не стоит противопоставлять Go. Тот всё-таки значительно более высокоуровневый. И функциональных вкусняшек лишён.

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

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

Пфф. Лично меня интересуют не ядра ос и не браузеры, а игры. Ржавчина далеко не идеальна, конечно, но вполне себе кандидат на роль языка для игрописания, если хочется чего-то получше С++.

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

Просто некоторые не видят сути за типобезопасностью, сиподобностью и lightweight threads.

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

Игрописание с нуля? если вы хотите сделать игру, а не просто ее делать, то будете смотреть в сторону кроссплатформенных движков, unity3d тот же.

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

Ну вообще да, так быстрее получить прототип игры.

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

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

ozkriff
()

Я всё-таки не понял, зачем нужен хаскель без монад? Для того, чтобы сишники не пугались?

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

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

umren ★★★★★
()

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

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

Да заткнись уже, фанатик.

Кстати, в кои-то веки не-жвм язык со строками с поддержкой юникода не через жопу. Поднимем чашки с какао!

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

Ну в, кхм, «сурьезный продакшн» ржавчину до версии 1.0 (или даже до 1.1-1.2) все равно нельзя толкать. Unity, впрочем, тоже, как мне кажется.

Или ты что имеешь ввиду, почему «никогда не дойдет»?

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

А чуть конкретней, где он именно _неоправданно_ переусложнён? Довольно адекватные ребята его пишут, как по мне, у них есть вполне себе четкие цели и просто так они обычно ничего не делают.

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

Unity, впрочем, тоже, как мне кажется.

Unity3d уже сто лет как продакшен, миллион саццесстори, бро. Или ты подумал о каком-то другом юнити?

почему «никогда не дойдет»?

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

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

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

не преувеличивайте, с подсветкой синтаксиса все выглядит не так страшно. Намного кошернее пёрла или лиспа.

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

Си уже давно нужна замена.

но зачем? Каждый из языков, продвигаемых как «замена C», оказывается в итоге или переусложнённым говном (C++), или просто никому не нужен (Go), или и то и другое (сабж).

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

Си уже давно нужна замена.

но зачем?

Те, кто задает этот вопрос, в принципе не способны понять ответ.

Go

Только несложному мозгу анона Go может казаться заменой Си.

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

Те, кто задает этот вопрос, в принципе не способны понять ответ.

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

Только несложному мозгу анона Go может казаться заменой Си.

Мне кажется, или авторы языка (Пайк и Томсон) его именно в таком ключе и продвигали? C done right, blah-blah-blah.

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

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

Так по-детски толсто.

Мне кажется, или авторы языка (Пайк и Томсон) его именно в таком ключе и продвигали? C done right, blah-blah-blah.

Тебе кажется.

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

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

Пайк говорил одно, а сделал нечто (может и совсем неплохое само по себе и в некоторых нишах) между си и питоном.

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

Так по-детски толсто.

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

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

Потому что в си устарел,

Что значит устарел?

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

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

anonymous
()

Жесть какая. Changelog — простыня из «@#$% теперь пишется как $%^». Таких языков, да не хватало, крестов было мало.

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