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

Не взлетит

p.s. какое предполагаемое основное применение этого языка? системное программирование?

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

Регексы так и не запилили

Вместо них используются типы Gc и Rc;

Зря

Полностью заменен модуль 'std::io', включая планировщик.

Если выбросят green threads с континюейшнами, то можно будет на помойку. Не на Go же писать в конце то концов

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

тип '~fn' теперь пишется как 'proc (args) -> retval { ... }' и может вызываться только однажды; тип '&fn' теперь пишется как '|args| -> ret';

какой-то перловый зверинец

удалена поддержка JIT в 'rustc';

ну теперь-то хаскелю капец

Bad_ptr ★★★★ ()

И кстати, почему в этой куче мелочей не упомянуты libgreen и libnative? Trait coercion? Или это тупо перевод поста в rust-dev@?

tailgunner ★★★★★ ()

'r###«foo»###'

в оригинале было r###"foo"###

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

а по делу?

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

tailgunner ★★★★★ ()

вместо него используется тип 'std::cell::{Cell, RefCell}';

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

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

Легко могу высказываться, я предполагаю что это все же системный софт и всякий рилтайм, игрушки может еще, C\С++ не подвинет явно, так зачем столько сил тратить? (+еще лет 5 на раскрутку потом).

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

Ну ты б хоть на википедии прочитал про него что ли. Прежде чем выносить свои икспертные оценки.

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

ага. И так начав с чёткого лёгкого и понятного язычка переизобрели мутанта С++ скрещённого с перлом.))

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

Servo — попытка создать веб-браузер заново с нуля на современном оборудовании и переосмыслить старые посылки.

Принципиально новый браузер? Бред же.

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

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

Тут можно ожидаеть копипасту с Gecko с более коротким кодом и без костылей

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

Лучше расскажи, как там память-то менеджерится.
Можно туда гц-то прикрутить или всё вручную malloc/free.
Или там и так и так можно?

Bad_ptr ★★★★ ()

Большинство пунктов в списке изменений читаются как анекдоты:

  • атрибут ';##[[[$$$_hrvalsttr_STD__]]]{}' заменён типом '@!()**^^^^<>';
  • удалён макрос 'prntresltstrncmprsn', вместо него 'prntresltstrcmprsn';
  • новое зарезервированное слово 'fuckof'.

Хохма, а не язык!

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

Я не эксперт, я юзер. Я хочу, чтобы б%#@! браузер переходил по стрелочке «назад» НАЗАД а не куда захочет. (нажми на линк «комментарий» и попробуй перейти обратно.

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

О гугле так же говорили если че, а он как раз до этого браузеры не делал

Только гугл для этого не изобретал язык программирования. А тут он зачем? если бы они хотели крутой новый движок не целесообразно ли было изначально взять команду опытных С++ для его разработки? зачем нужно заниматься R&D и тратить миллион человекочасов на Rust? будет ли движок на нем быстрей работать? сомневаюсь, бенчмарки он не взрывает.

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

Все указатели завернуты в определенный тип указателя. Или GC через счетчик, или single reference, или «дай подержаться, я назад отдам». Нативные указатели со сторонних либ точно так же заворачиваются в эти типы.

Обычно GC никто не использует и компилятор может все выделения и освобождения вычислить статически на этапе компиляции. Если пользуются GC - тогда ref/unref все равно статически.

Отдельная тема - многопоточность. Там green threads, отправка сообщений, континьюешны для ввода вывода. GC привязан к потоку, lock-free. Это возможно потому что просто нельзя без адских костылей создать указатель, доступный в разных потоках

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

если бы они хотели крутой новый движок не целесообразно ли было изначально взять команду опытных С++ для его разработки?

Мнение Mozilla Corp на эту тему вполне очевидно.

будет ли движок на нем быстрей работать?

Это никому не нужно (разве что для целей троллинга). Servo делается как аналог LLVM в мире браузеров.

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

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

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

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

unt1tled ★★★★ ()

А стабильную версию в скором времени стоит ожидать?

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

ли это тупо перевод поста в rust-dev@?

Да.

Trait coercion?

Последний пункт в списке изменений языка

libgreen и libnative

Список изменений очень большой, здесь не все изменения.

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

Если багов которые тебя волнуют - 5, тогда зарепорть. Если 100, тогда браузер - говно. Вот не уверен что ты лично был свидетелем 100 багов хрома. Даже больше есть в любом браузере, но чтобы атаковали вместе - врядли.

Еще мера говнобраузера - плохая поддержка стандартов и производиьтельность. Что-то хром этим тоже не особо страдает

vertexua ★★★★★ ()

для возврата в начало цикла используется ключевое слово 'continue' вместо 'loop';

я, конечно, понимаю, что до релиза еще можно хоть скобки заменить на инденты...

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

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

А это даже не баги. Это так надо. Как можно менее юзабельно. Юзабилити хрома на уровне производного слова от названия. Кстати, еще скрипты и рекламу не режет и плагинов нормальных я не нашел.

unt1tled ★★★★ ()

Довольно много изменений, похоже, что язык колбасит похлеще D. Я сильно ошибаюсь?

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

Это что угодно, но не минорщина. Странно, что Андерсон об этом не написал (но по ссылке это есть).

tailgunner ★★★★★ ()
Последнее исправление: tailgunner (всего исправлений: 1)
тип '~fn' теперь пишется как 'proc (args) -> retval { ... }' и может вызываться только однажды;
тип '&fn' теперь пишется как '|args| -> ret';

мде... ну теперь он точно взлетит.

nanoolinux ★★★★ ()

Вот это жесть. Я сразу вспомнил пост того упоротого лиспера про то, что грамматика руби занимает на диске 10 гигабайт, а лиспа - 10 строчек.

Но это хорошие изменения.

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

Как скоро можно ждать твоего очередного поста «мама, я пхпшник с батхертом! все языки умирают, пхп жывет!»?

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