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)

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

std::cell::{System::Cell^ %arg, <Template<RefCell<...>?^%>};))]fmt!.

Какой-то гибрид перла и лиспа, написанный укуреным лоровцем

fixed

tailgunner ★★★★★
()

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

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

Какой-то гибрид перла и лиспа, написанный укуреным индусом.

ну, вообще-то я пытался описать гибрид .NET managed c++ с лиспом, нудаладно, суть все поняли)

unt1tled ★★★★
()

Да ну его нафиг, сами выпустили - вот сами пусть и пишут. На каждом углу блин извращаются.

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

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

unt1tled ★★★★
()

по синтаксису и фичам напоминает недо-Scala. по библиотекам еще пилить и пилить.

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

Тем временем стандарту common lispa исполнилось 20 лет. Языков его уровня так и не появилось.

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

x4DA имел в виду «безопасные и быстрые», видимо. На C/C++ так нельзя. Троллятам-икспертам: сами-то много на Си писали, раз уж он для вас является идеалом? Почитайте что-нибудь. Блог John Regehr, к примеру. Начал задумываться о безопасном языке.

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

Как будто нет безопасных и быстрых языков.

loz ★★★★★
()

omg

столько изменений в языке - жуть.

Stil ★★★★★
()

Песец... И _это_ они противопоставляют Golang? o_O

С такой кашей у языка, чую, есть все шансы стать популярным.

KRoN73 ★★★★★
()

Может проще написать компилятор для Perl?

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

Тем временем стандарту common lispa исполнилось 20 лет. Языков его уровня так и не появилось.

а что подразумевается под уровнем? например, умеет ли он в статическую типизацию (как все современные популярные ЯП общего назначения), имеет ли он платформу уровня Java, .NET (или хотя бы Qt)? или это очередные скобки на скобках списки и функции над списками? ну тогда да - на них можно многое сделать, как впрочем и на brainfuck, например

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

Один негатив в коментах, фу. Добра тебе, Ржавчина. Думаю взлетит повыше чем Go. Скорей бы версия 1.0.

ozkriff
()

удален тип float

бедный, всегда страдает.

splinter ★★★★★
()

Новость - унылая, Ржа - не нужна.

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

умеет ли он в статическую типизацию (как все современные популярные ЯП общего назначения)

тоже толсто

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

Все-таки взлетит, я думаю.

И сядет на красной площади.

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

Servo делается как аналог LLVM в мире браузеров.

Порвало.

И разбрызгало, я надеюсь?

Можешь раскрыть подробности? :D

Нет. Но ты можешь написать письмо Patrick Walton, одновременно разработчику Servo и ведущему разработчику Rust, и спросить, что он имел в виду.

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

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

Разработка Firefox

grim ★★☆☆
()

Ничего у них не выйдет.

Hertz ★★★★★
()

Вангую

Нужно, но не взлетит

GreenTea ★★
()

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

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

статическую типизацию

Типы у значений, переменные ссылаются на значения. Если ты про возможность проверки типов во время компиляции, то нет.

платформу уровня Java, .NET (или хотя бы Qt)?

Он не стремится собрать как можно больше в платформу/стандартную библиотеку, для этого нужна контроллирующая организация отсутствие которой есть один из плюсов стандарта.

очередные списки и функции над списками?

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

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

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

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

qwerky
()

Бедный Раст, что из него делают..

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

Учитывая несбалансированность скобок в твоëм примере, индус всë-таки был под веществами. :-)

anonymous
()

Красиво выглядит. Подождем 1.0

pi11 ★★★★★
()

std::cell::{System::Cell^ %arg, <Template<RefCell<...>?^%>};))]fmt!.
Бедный Раст, что из него делают..
один говорит ';##[[[$$$_hrvalsttr_STD__]] ахаляй махаляй пыщ пыщ, а другой ему отвечает @!()**^^^^<>....
Начинался язык вроде хорошо, но такими темпами они себе перл сделают.

Похоже, в тред сползлись все грустные дебилы ЛОР.

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

Если ты про возможность проверки типов во время компиляции, то нет.

ок

отсутствие которой есть один из плюсов стандарта.

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

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

в CL (ЯП на списках) нет даже такой простой вещи как двусвязные списки, их придется велосипедить, и раз мы в топике про Rust - в CL нет и тредов, зато там есть функции вроде cddddr :)

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

возможность проверки типов во время компиляции, то нет

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

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

а что именно в нем тебе кажется сложным?

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

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

Не страшно — вывод типов же присутствует, тебе это никогда писать не придётся.

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