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)

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

Что это за синтаксис в котором задействованы практически все спецсимволы

Какие из них не задействованы в Си?

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

В Rust нет наследования в смысле ООП.

Нет наследования реализации. Но наследование интерфейсов присутствует. И этого вполне достаточно для ООП.

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

В Rust нет наследования в смысле ООП.

Нет наследования реализации.

Назови мне ООП-язык, в котором нет наследования реализации.

Но наследование интерфейсов присутствует. И этого вполне достаточно для ООП.

*здесь цитата о том, что чистый Си достаточен для ООП*

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

Назови мне ООП-язык, в котором нет наследования реализации.

IDL :) ООП это не только языки программирования...

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

Назови мне ООП-язык, в котором нет наследования реализации.

IDL :)

Ну как бы interface definition language - это не язык объектно-ориентированного _программирования_.

ООП это не только языки программирования...

А IDL - это не только CORBA IDL.

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

Когда необходимо чтобы в условии были выполнены все операторы, очевидно же.

A-234 ★★★★★
()
Ответ на: комментарий от www_linux_org_ru

Да, потребуется, поэтому в паскале была опция компилятора как интерпретировать логические операторы. Но что мешает сделать operator | (bool,bool) ленивым а operator | (uint,uint) нет?

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

Какие из них не задействованы в Си?

Как минимум @ и #.

@ использовался для GC-указателей, которые решено удалить. Насчет # - это заявка, что препроцессор не является частью Си? В сад.

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

Что это за хрень? Не знаю на каком языке это правильно, но на С++ этот код ни разу не идентичен.

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

А почему именно 0xffffffff?

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

кстати, тут неявно полагается, что uint = array<32,boolean>

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

Не знаю на каком языке это правильно, но на С++ этот код ни разу не идентичен.

да, не идентичен

и если узнаешь на каком языке это правильно — скажи, я обязательно на него посмотрю :-)

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

Насчет # - это заявка, что препроцессор не является частью Си?

Блин, действительно про препроцессор забыл. Впрочем, по вечерам и не такие тупняки бывают. :-)

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

морально готовился к такому же ответу, только без ++

MyTrooName ★★★★★
()

Названо в честь великого немца, показавшего, что советское ПВО - дутый ноль?

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

А как вы используете Go?

Для флуда в камментах к новостям же.

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

Использую Го в НО.

в Научных Обоснованиях? :)

Го-в-НО. ГовНО. Господин регистрант — копрофил.

Manhunt ★★★★★
()

Кстати, что в ржавчине является аналогом embedding в го? Вообще, какая-либо форма делегирования?

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

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

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

ты тут за главного идиота благодаря которым лор похож на 1 класс отсталых

Продолжай наблюдение.

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

Наверное поэтому в С есть зарезервированное слово explicit.

Нет такого слова в Си.

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