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)

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

ты так и будешь уходить от ответа?

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

а на простой вопрос ответить не можешь.

У Rust есть сайт, на котором кратко расписано, зачем он нужен. Человек, которому тема реально интересна, задавал бы другие вопросы :)

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

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

Бессмысленно - это то, как ты выставляешь себя знакотом, а потом не можешь на «детский» вопрос ответить.

У Rust есть сайт, на котором кратко расписано, зачем он нужен. Человек, которому тема реально интересна, задавал бы другие вопросы :)

у меня есть сайт, на котором написано что у меня член длиной полтора метра и встаёт с полпинка. Думаю, многим это было бы весьма интересно, да только не верит мне никто :(

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

у меня есть сайт, на котором написано что у меня член длиной полтора метра и встаёт с полпинка. Думаю, многим это было бы весьма интересно,

Если бы это было кому-то интересно, у тебя бы спрашивали об этом. Но тебя не спрашивают %)

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

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

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

Троллина ты мохнатая, фэ.

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

чб-мониторы и 486й процессор - с ними тоже можно жить, а можно и поудобней чего подобрать уже.

я наверное открою для тебя америку, но чб-экраны до сих пор имеют своё применение. Насчёт i486 не знаю, но встраиваемые клоны i186 до сих пор встречаются.

Ржавчина еще лучше «подходит для низкоуровневового кода и для бэкенда для других языков».

Для низкоуровневого кода Rust не подходит вообще никак: рантайм слишком жирный. Как бэкенд для кодогенерации тоже: слишком упоротый и изменчивый синтаксис. Упс.

По крайней мере, есть люди так считающие.

Мнения отдельных людей и объективные факты - это как бы разные вещи.

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

Для низкоуровневого кода Rust не подходит вообще никак: рантайм слишком жирный. Как бэкенд для кодогенерации тоже: слишком упоротый и изменчивый синтаксис. Упс.

«Троллина ты мохнатая», чтд.

tailgunner ★★★★★
()
let f = BufferedReader::new(File::open(&Path::new("rust_is_awesome.txt")).unwrap());

Уж лучше кресты с бустом.

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

очень репрезентативно! какой-то опросик в твиттере? смешно же, я даже tiobe больше верю, там аддекватней.

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

и если что: PHP уже давно не торт, it just works.

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

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

Deleted
()

Как сделать мегапопулярный язык, о котором твердят во всех (г)углах, но на котором никто не пишет? Берем невменяемый синтаксис. Приглашаем толпу евангелистов в шарфиках и очках без диоптрий. Профит!

Ржавый не взлетит. Сколько было уже «убийц Си». А ему уже скоро 45. И язык ягодка опять :) Убийца Си должен обладать более человеческим синтаксисом, а пока убийцописатели клепают нечто полностью противоположное.

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

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

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

ведь ты засунул туда яблоко по ошибке?

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

или ты при программировании допускаешь всегда только лишь один вид ошибок? (путаешь яблоки и апельсины, и ничего более)

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

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

вот она — проблема стиоготипизированных ООП языков — постоянно оказывается что сейчас выбрана неверная объектная модель архитектуры :-) ..

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

постоянно оказывается что сейчас выбрана неверная объектная модель архитектуры

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

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

даже если именно я хреновый архитектор (что совершенно не интересно:)) — то как быть с другими «архитекторами», которые потом начинают городить костыли, отказываясь признавать что опять объектная модель не подошла?

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

Убийца Си должен обладать более человеческим синтаксисом, а пока убийцописатели клепают нечто полностью противоположное.

У Rust есть макросы - перепиши «нечеловеческий синтаксис» в человеческий. Но ты в итоге получишь текста в 2 раза больше, чем в плюсах. Это твоя цель? А кому-то и потомки APL «по душе».

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

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

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

дада, главная мысль которую не понимают ржавые фанатики, убийца си должен быть с «человеческим» лицом, что бы конечные пользователи (то бишь тут разработчики) ЗАХОТЕЛИ им пользоваться, но пока это вызывает больше рвотные позывы.

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

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

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

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

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

У LISP'a это же вроде главная фишка, и что? в каждом доме, в каждой семье? никому не интересно переписывать весь язык через макросы, потом будешь встречаться с миллионом вариаций Rust, в мире сейчас потребность в разработке только растет, а справляться с этими объемами можно только языками которые несут прагматический подход, а не дают тебе 100500 вариантов сделать одно и тоже (еще и 2^100500 вариантов изменяя язык с помощью макросов).

Rust не претендует на место жабки и пыха, потому манки-кодеры могут спать спокойно

все могут спать спокойно, манки-кодерам Go, джавистам скалу, плюсы тоже спят спокойно, никто не ломанется на Rust, только совсем уже «скучающие», массе людей он наврядли будет нужен, нельзя победить C++ делая язык еще сложнее, чем он. Причины простые, люди вложили кучу времени в изучении его, тут они видят Rust и думают «работает так же, профита мало, учить долго», может быть в академических кругах оно повертится пару лет, потом на помойку. Servo тут не помощник.

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

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

Это ты так набрасываешь, или порыв откровения?

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

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

для раста ничего не появится потому что ненужно

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

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

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

Зато сегодня вышла новая версия GNU Source Release Collection.

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

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

абсолютно наоборот, наглядный пример - C# и Java, простота разработки и чуть ли не нулевые требования к разработчикам, в том числе и потому, что компилятор помогает находить ошибки, которые user_id_68054 упорно не желает видеть

Херовый из тебя адвокат, бро.

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

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

У LISP'a это же вроде главная фишка, и что? в каждом доме, в каждой семье? никому не интересно переписывать весь язык через макросы, потом будешь встречаться с миллионом вариаций Rust

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

в мире сейчас потребность в разработке только растет, а справляться с этими объемами можно только языками которые несут прагматический подход, а не дают тебе 100500 вариантов сделать одно и тоже (еще и 2^100500 вариантов изменяя язык с помощью макросов)

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

И да, что есть «прагматический подход»? По мне, «копактификация» кода в пределе до оперирования определениями предметной области без лишнего «бойлерплейта» - весьма прагматично.

нельзя победить C++ делая язык еще сложнее, чем он

вообще-то для «победы» не надо «добавлять новые достоинства», надо «убрать старые недостатки». Сложность синтаксиса примерно на том-же уровне. Противники нового будут всегда.

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

люди вложили кучу времени в изучении его, тут они видят Rust и думают «работает так же, профита мало, учить долго»

есть профит или нет можно сказать только после обретения опыта работы с обоими. «Учить» - не аргумент.

Я, конечно, не «дам зуб», что Rust взлетит, но из всего того, что появилось в последнее время, он более всего соответствует моим представлениям о «нормальном low level языке».

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

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

ну почти.. :) я лучше перефразирую так:

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

такую модель, которая потом [с бОльшей вероятностью] во время доработки не потребует полного переделывания или закостылевания :)

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

а вот для ООП-со-строгой-типизацией — ну прям к годалке не ходи — потом придётся либо всё переделывать, либо навешивать говнокод :) .... в случае если оказался плохим архитектором [то есть 99% вероятности].

то есть: если например именно ты ( wota) крутой редкий архитектор, то тебе хорошо.. но как же быть остальным? :-)

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

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

Тоже так думаю. Так что, можно на Сишку еще ставки делать еще на 10 лет вперед.

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

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

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

то есть: если например именно ты (wota) крутой редкий архитектор, то тебе хорошо

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

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

Если починить то, на что он указывает, выйдет годно.

buddhist ★★★★★
()

Тут всё ещё типы удаляют, а вы его как очередного убийцу всего продвигаете :}

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

почти изобрели брейнфак.

Брейнфак проще, я на нём писал примитивные консольные програмки.

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

В native что ли? Зачем, когда есть llvm?

Не совсем понял. LLVM в натив ведь компилит, то есть это не виртуальная машина несмотря на название.

Или подразумевалось именно не использование LLVM по каким-то «идеалогическим причинам»?

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

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

главное чтобы эта проверка корректности — не увеличивала бы сам код :) ..

[unit-тесты не в счёт — так как они отдельными файлами идут. в том смысле что будем считать что unit-тесты не увеличивают код]

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

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

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

Допустим, нужна, но какая к чëрту замена Си может получиться из языка, которого лишили [как минимум] одного из преимуществ этого самого Си и [большинства] основанных на нëм языков — проверки типов во время компиляции? Ошибки, при которых код на C/C++/Java/C#/... просто не скомпилируется, в Rust-е выявятся только в неопределëнной отдалëнности будущем в рантайме. Хороша замена, блин.

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

что бы конечные пользователи (то бишь тут разработчики) ЗАХОТЕЛИ

ЭКСПЕРТЫ-ЭКСПЕРТУШКИ.

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

какая к чëрту замена Си может получиться из языка, которого лишили [как минимум] одного из преимуществ этого самого Си и [большинства] основанных на нëм языков — проверки типов во время компиляции? Ошибки, при которых код на C/C++/Java/C#/... просто не скомпилируется, в Rust-е выявятся только в неопределëнной отдалëнности будущем в рантайме

O'RLY?

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

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

Это ты так набрасываешь

Это я так вижу.

или порыв откровения?

Это ты путаешь откровение и откровенность? %)

tailgunner ★★★★★
()

жуть. убейте его кто-нибудь...

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

Сначала Rust казался интересным, но чем дальше, тем больше упарываются разработчики

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

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

вот она — проблема стиоготипизированных ООП языков

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

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