LINUX.ORG.RU

Вышел Rust 1.3

 ,


2

7

17 сентября вышел очередной стабильный релиз Rust 1.3 — языка программирования общего назначения, разрабатываемого Mozilla совместно с сообществом. Данный релиз в целом сохраняет обратную совместимость с Rust 1.0, вышедшим в мае этого года.

Основные изменения:

  • В стандартную библиотеку добавлен модуль Duration, предоставляющий API для работы с промежутками времени.
  • Документация пополнилась книгой The Rustonomicon, посвященной низкоуровневому программированию на Rust.
  • Изменен механизм вывода lifetime по-умолчанию.
  • Дальнейшее повышение производительности стандартной библиотеки и компилятора.
  • Реализована предварительная поддержка Windows XP в компиляторе.

Одновременно была выпущена бета-версия Rust 1.4, в которой разработчики планируют реализовать полноценную поддержку MS Visual C++ как среды сборки, что позволит использовать Rust под Windows без инструментария GNU.

>>> Официальный сайт

>>> Примечания к выпуску

>>> Ссылка на скачивание

>>> Официальная документация

>>> Подробности



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

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

через год добявят implicit cast литерала в String

И вообще, смысл от implicit cast, если тип всё равно тогда придётся указывать? Или ты думаешь, все литералы сделают String по умолчанию?

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

Откуда я должен узнать, что такое *, например?

ВНЕЗАПНО открыть Книгу или rustbyexample и выучить основы?
inb4: вдругихязыкахвсёясна — нет, не ясно: начинающим нужен учебник и примеры даже для таких простых вещей, как циклы и рекурсия.

Можно ли прочитав документацию понять вот это: Вышел Rust 1.3 (комментарий)

После The Rust Programming Language или rustbyexample — да, можно.

print!(«Hello {}», world); vs print!(«Hello» + world); — что приятнее выглядит?

Возможно, ты имел в виду: print!("Hello {}!", world); vs print!("Hello" + world + "!");?

Не надо оправдывать свою лень сложностью языка. Раст — системный язык, но в отличие от С/C++ он намного дружелюбнее к новичку: правила установлены заранее и являются частью языка, а в случае ошибки компилятор поясняет что не так, вместо того, чтобы собрать заведомо некорректную программу с непредсказуемым поведением.

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

А ничего что в шарпе тоже два вида (String/StringBuilder)? ...

Так понятно даже без документации, что String — это финальная строка, а StringBuilder — это класс который поможет тебе построить строку, какую только пожелаешь. Просто сел и начал работать.
А что в Rust: String (строка наверное) и &str (сслыка на ??!!!) энтропии добавляет &'static str и to_string(). Как нормальный человек может понимать вот такое без разрыва шаблонов??
А ещё больше доставляет факт: чтобы написать что-то посложнее «Hello World!» во всём этом разбираться придётся.

Это с какой стати-то?

Зайдём с обратной стороны. Кто-то создал тип Lowercase (это только пример). И теперь ему какой-то другой тип нужно преобразовать в Lowercase, он напишет to_lowercase() верно? И как человеку особо не углубляясь в код понять, что именно делает эта функция? Откуда он вообще может знать, что где-то там есть Lowercase?)

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

Быстро?) Всю надо прочитать, иначе не получится ничего!
Ну да ладно, на этой стадии развития языка простительно

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

Или ты думаешь, все литералы сделают String по умолчанию?

Я уже понял где моя ошибка. Нет, не сделают, владением не выйдут. http://hermanradtke.com/2015/05/03/string-vs-str-in-rust-functions.html

Это песец, товарищи. Я просто сейчас смотрю на библиотеки и там какое-то говно твориться, складывается ощущение что авторы хотят везде &str, но там где компилятор бьет по рукам вставляют String.

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

Да и в любом случае — компиляция, просмотр выводов это лишние телодвижения —> сложнее, особенно для тех кто ценит своё время.

А юзкейс-то какой? Не зная языка, открыть произвольный проект и «всё понять»? Мне это кажется каким-то надуманным.

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

Rust с нуля изучил? О_о

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

Можно ли прочитав документацию понять вот это: Вышел Rust 1.3 (комментарий)

Начать с этого и потом это (тоже лучше начать с лайфтаймов). В теме ссылки были, кстати.

Откуда я должен узнать, что такое *, например ? Ну ладно, мне повезло однажды увидеть это в C, а что остальным людям делать?

Прочесть главу про указатели (ссылки)?

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

Возможно. И это, разумеется, не очень хорошо. Но раст, вроде, и не позиционируют как «язык, которым надо заменить все остальные». Зато у него есть вполне объективные достоинства, так что я надеюсь, что к нему люди всё-таки будут приходить.

print!(«Hello {}», world); vs print!(«Hello» + world); — что приятнее выглядит?

Не вижу принципиальной разницы, если честно. Опять же, первый вариант легче расширяется.

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

Не смущает. Мне кажется, что исчерпание диска, исчерпание оперативки, и исчерпание адресного пространства — это три абсолютные не похожие друг на друга ситуации:

Ладно, я не готов сильно спорить. Разве что замечу, что oom killer не всегда и не везде присутствует.

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

Всё детакльно расписано и задокументировано.

И? В расте от тебя прячут различия между видами строк? Оно точно так же «детально расписано».

получит по шее при первом же code review.

Это к языку отношения не имеет.

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

авторы хотят везде &str

потому, что он универсальней и эффективней. Это же логично, не!?

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

В расте я вижу, по крайней мере в servo — &str вовсю используется в клиентских интерфейсах, чтоб не сильно мозолили глаза to_string у литералов.

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

Ну и как по мне, то &str вполне вписывается в идею слайсов. И по сути, тоже для оптимальности существует.

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

Оно точно так же «детально расписано»

Опять лукавишь. Разницу между String и &str надо набить походив по граблям. Иначе бы не было этой кучи тредов в интернетах.

И самое показательное: без StringBuilder можно прекрасно обойтись, то есть вообще, это просто такая оптимизация. А в расте нужны оба типа.

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

Console.WriteLine(«args1: {0} args2: {1}», value1, value2);

Кто так пишет? Зачем?
Я в основном только System.out.println(val1, val2); видел.
Иногда так: System.out.println(TAG, val1 + " " + val2);
Очень редко, «в продакшене»: System.out.println(«args1: » + val1 + «args2: » + val2)
Вообще, у каждого способа свои преимущества, я прекрасно понимаю, что в системных языках печатать в консоль надо чаще. Оставим формат.
Подойдём к другой, очень часто используемой операции над строками — конкатенации. Мне лень всё расписывать, сами догадайтесь что с ней не так.

Мне вообще не хочется говорить о этих строках

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

Нет же.

Да, ведь ты выдаёшь свои ощущения за истину.

Здесь: Вышел Rust 1.3 (комментарий)

Ну и? Один раз обьявляем (в <>), два раза используем.

Оптимист, ахаха )))

Причём здесь оптимизм? while позволяет дополнительные вещи делать, которые нельзя в <> записать.

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

Ну и как по мне, то &str вполне вписывается в идею слайсов.

Да, эта симметрия с векторами есть. Но в Go есть слайсы, но нет двух типов для строк и как бы никто не тужит.

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

Начать с этого и потом это (тоже лучше начать с лайфтаймов).

Лайфтаймы проще всего учить по Rust by Example, инфа 100%.

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

В джаве и шарпе один тип строки

Хорошо, пусть так. Но я и С++ упомянул.

В отличие от &str/String

Разные условия, разные требованиям всё нормально в общем.

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

А в расте нужны оба типа.

Нет. String - это такая абстракция высокого уровня. Вообще можно всё сделать буферами на стеке и сишными функциями. А можно вообще не юзать &str, все функции тоже под String затачивать, хоть делать так не нужно; ну, ещё тогда придётся в библиотечные функции их через & передавать.

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

Что ещё расскажешь?

Расскажу, что не у каждого есть друг, который ещё и не против Rust'у обучить. Не каждый захочет себе голову морочить.
Вот я одному веб программисту Iron framework показал, он выдал что-то типа: «божимой низкоуровневые макаки пытаются в веб они ничего не добьются» и перестал вообще все разговоры о производительности и безопасности воспринимать всерьёз

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

Но я и С++ упомянул.

Ты постоянно скатываешься в «раст не плохой, потому что плюсы говно»)

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

Для системщины возьму Go, а раст забуду как страшный сон, нет никакой необходимости следить за владением ради пары процентов cpu.

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

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

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

Нет. String - это такая абстракция высокого уровня.

Не ври, еще скажи что на расте можно без &[T] писать. Просто признайте, сложный язык требует осиливания разработчиком сложных вещей.

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

Если я ещё не в игноре: даже этот пример не заслужил конструктивной критики? Я старался

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

Мне лень всё расписывать, сами догадайтесь

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

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

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

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

Так понятно даже без документации...

Правда что ли понятно? И если никогда не программировал до этого? Ну не надо лукавить, основы всё равно изучить придётся.

А что в Rust: String (строка наверное) и &str (сслыка на ??!!!) энтропии добавляет &'static str и to_string(). Как нормальный человек может понимать вот такое без разрыва шаблонов??

Не понимаю зачем ты свалил в кучу статик лайфтайм и, тем более, функцию. Вот как раз в расте всё весьма логично: есть строки, которыми можно нормально манипулировать (String). И «ссылка на строку». Причём остальные механизмы языка как раз отлично сочетаются и единообразно работают. static не какое-то магическое слово для строк, он везде так себя ведёт. И слайсы есть и для массивов/векторов. Просто надо хоть немного почитать матчасть. Кстати, про строки даже в документации (не книге/мануале) нормально написано.

И нормальный человек это отлично понимает.

А теперь, чтобы ты немного ощутил всю прелесть ситуации, давай посмотрим на С++. Где у нас есть «сишные строки» (char*, wchar_t*, char16_t*, char32_t*). Кстати, char может быть signed/unsigned. А ещё это всё «может быть» (и по сути является) массивом. Потом есть string, wstring, u16string и u32string, которые являются соответствующими тайпдефами для basic_string<>. Есть экспериментальный string_view (так же известный как string_ref), разумеется в четырёх вариантах. Ещё иногда строками манипулируют как массивом символов, особенно в старом коде, где непрерывность данных в строке не гарантировалась. Плюс каждый фреймворк добавляет свой тип, а то и не один: QString, CString, множество их.

Раст всё ещё кажется «разрывающим шаблоны»?

И как человеку особо не углубляясь в код понять, что именно делает эта функция?

Так можно сказать про абсолютно любую функцию абсолютно любого языка.

Но вообще можно посмотреть на тип, на котором это вызывают, и вбить в поиск документации to_lowercase.

Всю надо прочитать, иначе не получится ничего!

Читать надо мануал/книги, а в документации именно искать отдельные вещи. По крайней мере, я так делаю.

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

А, в твоём круге общения только PHP-макаки? Понятно, почему ты такой.

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

И ты не тужи.

А я и не тужу, наоборот, у меня сегодня наконец закончился бугурт. Как так, может быть сабж мне полезен, а я в него не могу? Нет, оказывается не полезен и не будет — есть другие инструменты, гораздо более заточенные под мои задачи. Спасибо товарищи за плодотворную дискуссию.

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

Мои требования: to_String() и нормальная конкатенация без вызова to_String() на литералах и слайсах + документация что to_String() вызывается. Это так много будет стоить?
Вообще, странно, лайфтаймы они значит опускают, можно иногда не писать, а вот строки нет: всегда пиши to_string() чтобы знать что в хипе выделяется память! Всегда.

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

Опять лукавишь. Разницу между String и &str надо набить походив по граблям. Иначе бы не было этой кучи тредов в интернетах.

Не убедил. Как по мне, то это примерно как передача по значению и по ссылке в С++. Ну или как char* vs std::string.

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

Что у тебя там за системщина такая?

Байтики помесить и по сети покидаться. Питончик не успевает.

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

Кто так пишет? Зачем?

Да все, так ведь удобнее.

Мне лень всё расписывать, сами догадайтесь что с ней не так.

Не получилось две строки сложить или что?

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

Лайфтаймы проще всего учить по Rust by Example, инфа 100%.

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

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

Да, эта симметрия с векторами есть. Но в Go есть слайсы, но нет двух типов для строк и как бы никто не тужит.

Я в Go не особо разбираюсь. Ориентируюсь на плюсовый опыт, а там string_ref вполне пригождается.

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

Ты постоянно скатываешься в «раст не плохой, потому что плюсы говно»)

Наверное, потому что на плюсах и пишу. (:

Хотя говном их не считаю, но не важно. Ну а «системщина» тоже разной бывает, так что найдётся и расту место.

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

Вот, адекватный человек зашел.
Два чаю

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

Вот я одному веб программисту Iron framework показал

Если бы ты сишнику какой-нибудь Go показал, то он тоже про макак мог бы что-то рассказать. Просто есть инструменты под разные задачи.

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

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

Как по мне, то это примерно как передача по значению и по ссылке в С++.

Очень далеко, от этого объяснения ни холодно ни жарко.

Ну или как char* vs std::string.

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

Хинт: от твоих объяснений должно стать понятно что и где использовать. И почему конкретный автор в конкретном коде использует определенный тип. Пока ты очень похож на все понимающую собаку)

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

to_String()

Это банально неудобно.

Ну и тебе правда кажется, что to_string выглядит неоднозначно при выборе между типами String и &str?

и нормальная конкатенация без вызова to_String() на литералах и слайсах + документация что to_String() вызывается. Это так много будет стоить?

Ну эти типы не умеют складываться. А неявного приведения в расте нет. Логично, что нет и тут.

Вообще, странно, лайфтаймы они значит опускают, можно иногда не писать

Так ведь это не влияет на производительность.

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

Хинт: от твоих объяснений должно стать понятно что и где использовать.

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

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

Почему акробатика? Страуструпе только так и рекомендует, если задача не диктует иначе. Авторы раста, правда другого мнения, ибо в расте ссылки по безопасности лучше даже, чем std::string.

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

И много сломали, скажем, в C#5?

Я не знаю. Могу питон в пример привести 2 и 3.

Там ответа не нашёл, хотелось бы подробнее.

Там есть ответ, ну и я вроде уже ответил на другое сообщение. Повторять утомительно.

Из сигнатуры вообще не видно, что Test лайфтаймы использует.

Какая сигнатура у структа? Кому с первого раза не доходит, что структ лайфтаймы использует, зачем ещё раз повторять?

более сложный пример интересен.

Придумаю на тот самый хардкорный вариант, который сюда скидывали. Только как пойму что он в своём исходном виде делает

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

Почему акробатика?

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

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

Если уж поддерживать, то лучше Java или C#. Или D, на него любой разумный крестовик потом легко переучится. А то я у нас в стране как-то тоже спецов в Go не особо часто встречаю. В прочем, дело твоё. А на кого работаешь, что тебе разрешили самому язык выбирать?

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