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)

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

«каких-то функций в стиле ref/unref тотже malloc/free» - может я проглядел, ээто где там такое было?

ок. Вот он там пишет:
1)
let mut m = HashMap::new();
take(m);
И дальше нельзя написать:
take_again(m);

Ну ок, хотя и странновато, но такой тип указателя, ничего не поделаешь.
Далее:
2)
let mut m = HashMap::new();
let b = m.get(1);
и дальше мне нельзя сделать ни
take(m);
ни return b;.
Это какого фига.) Ну с return b; ещё понятно. А take(m) почему нельзя? И что мне сделать чтобы было можно?

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

Он словами сказал, не предирайся к презентации. Хотя она, конечно, не супер крутая и продуманная.

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

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

Нет.

Ясно.

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

brson opened this issue 2 years ago

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

umren ★★★★★
()

Кто объяснит простым и доступным языком (безо всякого троллинка и подъёбов), зачем нужен ещё один язык программирования, если для всего есть C/C++, Java.

// WBR, Dr.Green (Москва).

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

А это важно разве? Мне не кажется, что ржавчина для такой затеи полезна.

Я только видел где-то, что это неплохо бы сделать для страничек-обучалок с интерактивными кусками кода. Но если и сделают, то после версии 1.0, как мне кажется.

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

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

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

это наверное было бы самой важной вещью для этого языка

Почему?

то на чем он бы мог взлететь :)

asm.js и emscripten предназначены для исполнения легаси-кода.

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

Я веба сторонюсь и не компетентен в этом вопросе.

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

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

Почему?

потому-что хороший юзкейс использования LLVM сгенерированого кода, asm.js будет горячей темой (и уже является), а генерится все это из C/C++, как раз созреет Rust (который якобы круче, модней и безопасней) - народ подтянется, Rust займет нишу, светлое будущее языка/все счастливы.

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

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

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

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

Rust займет нишу, светлое будущее языка

В этой нише (когда она появится) конкуренция будет ровно такая же, как и в любой уже существующей. Наличие emscripten как цели кодогенерации в Rust 1.0 ничего не изменит.

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

Rust быстрей жабки + не требует жвм, проще и безопаснее плюсов.

anonymous
()

Без своего языка программирования нынче ни один проект не обходится. :)

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

Язык же делается не просто так «что бы побольше людей его использовали», а для решения определенных задач. И мне, например, не кажется, что asm.js сильно поможет в решении этих задач.

Если они это сделают (и компилятор ради этого не придется сильно усложнять), то здорово, никому не помешает. Может и популярность немного поднимет, хотя мне не верится особо. Только на это тоже надо время потратить, а у них других вещей для доработки, важных для основных целей, более чем хватает к релизу.

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

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

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

Без этого вероятность равна примерно нулю. Я понимаю, что с этим - тоже, но никогда не признаю этого, потому что я тупо троллю.

fixed this for you

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

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

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

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

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

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

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

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

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

wota ★★
()

Не взлетит

Учитывая, сколько раз в новости встречается слово «удалено» разработчики ЯП сами с ним не определились или их покусали разработчики Gnome3. Вообще странно, для чего нужен очередной недоязык? Есть классика же: C/C++ для системного программирования, ASM для низкоуровнего и критического по скорости, Pascal для неуклюжих прикладных программ студентов виндузятников и прочих поделок, Python для кроссплатформенных скриптов и программок, JAVA для тормозов ;) , PHP для серверов и сайтов, LISP для развлечения, BASH для администрирования, JavaScript для веба, а это чудо где планируется применять?

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

а то перл уже давно не торт,

а что с ним не так?

пора вернуть свободу изложения мыслей программистам :)

а Rust(ориентированный на «безопастность») тут причём?

тред не читал

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

У Rust есть макросы - перепиши «нечеловеческий синтаксис» в человеческий.

И до свидания возможность адекватной поддержки кода третьими лицами.

Rust не претендует на место жабки и пыха.

Вот если бы претендовал, я бы и не волновался. Но Rust позиционируется как язык для системного программирования, а ему там не место.

«Внизу» же, если не ограничивать себя кучей предустановок, без «видового разнообразия» никак.

Реализация Си имеется для абсолютного большинства платформ, ни одного подобного языка более не существует. С чего бы это, если он весь такой плохой и неудачный? Да потому что он обладает двумя главными преимуществами с точки зрения системного программирования: адекватный синтаксис и абсолютная (ну почти) свобода. В Rust нет ни того, ни другого. А потому не стать ему популярным низкоуровневым языком.

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

адекватный синтаксис

Назови 5 существенных отличий синтаксиса Rust от Си %)

и абсолютная (ну почти) свобода. В Rust нет ни того, ни другого

Ты что-нибудь читал о Rust, кроме этой новости?

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

«Сначала» - это когда, в 2010? 2011?

В начале 2012

С начала 2012 года язык изменился не сильно (по сравнению с тем, что было в 2010).

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

Нафиг никому не нужен

У вас мания величия.

Строгая типизация несовместима с низкоуровневым программированием. Хотя бы потому, что низкоуровневые типы - это в конечном счете байт, слово, двойное слово, строка (последовательность байт, слов, двойных слов) и т.п. Низкоуровневый язык должен допускать возможность произвольной интерпретации объекта данных, указателя и т.д.

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

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

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

И до свидания возможность адекватной поддержки кода третьими лицами.

Зависит от качества макро-библиотеки

Но Rust позиционируется как язык для системного программирования, а ему там не место.

До релиза - конечно не место. А там посмотрим.

С чего бы это, если он весь такой плохой и неудачный?

Как «макроассемблер» - почти супер. Но возможность «повышения уровней абстракций» (без тонн «бойлерплейта») - никакая.

адекватный синтаксис и абсолютная (ну почти) свобода. В Rust нет ни того, ни другого.

Ты не путаешь «адекватный» и «привычный»? «Паскалисты» тоже на си плюются ;) Что до свободы - чего конкретно тебе не хватает? Я вот «уткнулся» в довольно жирные бинарники и долгое (относительно) время запуска. Но, а) это оффтопик, б) это дефолтная сборка, в) я не особо разобрался с параметрами, г) язык ещё не релизнулся.

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

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

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

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

Системный язык без побитовых операций? O_o

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

Имеется в виду, что раз мы не можем написать

if(x || y) {...
а должны явно вывести логический результат
if(x != 0 || y != 0){...
То нет никакой необходимости в отдельных логических операциях, их поведение определяется только типами участвующими в выражении.

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

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

Несколько раз прочитал, нихрена не понял, но ты наверняка описал какой-то фатальный недостаток. Расту капец.

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

Вы это серьезно? Попробуйте придумать пример на Rust в котором замена «|» на «||» была бы в принципе возможна.

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

Попробуйте придумать пример на Rust в котором замена «|» на «||» была бы в принципе возможна.

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

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

Идеи и подходы программирования постоянно изучаются/меняются/дополняются. Некоторые взгляды просто несовместимы с существующими и вдолбить их в дядю-разраба невозможно.

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

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

если для всего есть C, C++, Java.

Исправлено во имя Луны

anonymous
()

Почитал немного про сабж. Всё-таки это больше прикладной язык чем системный. Ядро или драйвер устройства на нем будет сложно реализовать.

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

Это в вас говорит инертность мышления, они не должны быть взаимозаменяемы они и есть взаимозаменяемы, благодаря разработанному синтаксису. Это все равно что вводить специальный оператор деления для плавающей запятой. В самом деле, вы же понимаете разницу между целочисленным rounddown и «точным» плавающим. Но вы также понимаете что благодаря синтаксису С и наличию здравого смысла это будет абсурдным решением.

A-234 ★★★★★
()
Последнее исправление: A-234 (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.