LINUX.ORG.RU

Вышел Rust 1.0

 , ,


12

10

15 мая 2015 года, в соответствии с планом, вышел публичный релиз Rust 1.0 - языка программирования общего назначения, разрабатываемого Mozilla совместно с сообществом. Язык ориентирован на разработку безопасных и эффективных приложений, имеет развитую систему типов, оптимизирующий кодогенератор на основе llvm и предоставляет расширенные гарантии потокобезопасности и безопасного доступа к памяти без использования сборщика мусора. В частности, Mozilla использует Rust для разработки браузерного движка следующего поколения servo.

Выход релиза 1.0 означает стабилизацию языка и стандартной библиотеки, их дальнейшее развитие будет происходить с сохранением обратной совместимости. В то же время, выход релиза не означает остановки развития языка - одновременно с релизом 1.0 разработчики выпустили бета-версию Rust 1.1, и в дальнейшем планируют выпускать новую версию каждые 6 недель. Среди ожидаемых изменений - заметное уменьшение времени компиляции и дальнейшее расширение стандартной библиотеки.

Перед релизом сообществом была проделана большая работа по обновлению пакетов в официальном репозитории crates.io , где подавляющее большинство из 2000 пакетов приведены в соответствие с версией 1.0. Онлайн-компилятор play.rust-lang.org претерпел редизайн и теперь позволяет выбирать между версиями компилятора. Менеджер пакетов и система сборки cargo так же получил ряд улучшений. Большинство популярных редакторов уже имеют полноценную поддержку языка, с подсветкой ошибок и автодополнением на основе racer, дополнительно вчера вышел Visual Rust 0.1 - расширение для поддержки Rust в Visual Studio. Официальная документация (The Book, The Rust Reference, Rust By Example и документация стандартной библиотеки) была приведена в соответствие со стабильным релизом, сегодня же стала доступна для предзаказа книга Programming Rust издательства O'Reilly, выход которой ожидается в ноябре 2015 года.

Некоторые изменения со времени альфа-версии, вышедшей в феврале:

Официальный сайт: http://rust-lang.org/.

Примечания к релизу: https://github.com/rust-lang/rust/blob/master/RELEASES.md.

Ссылка на скачивание: http://www.rust-lang.org/install.html.

Официальная документация: http://doc.rust-lang.org/stable/.

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



Проверено: maxcom ()
Последнее исправление: cetjs2 (всего исправлений: 14)

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

И это плюс. Просто таскать везде to_string() копируя(!) байты из дата секции как-то глупо для системного языка.

Я тебя не понял. Если тебе достаточно слайсов, то зачем копировать?

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

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

Смущает String и str что ли? Вообще, типы с большой буквы, но для «примитивных» типов сделано исключение: i32, i8, str и т.д.

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

То есть это просто сахар для того, что бы везде не писать <A, B, C<A, B>>, никакая рефлексия о типах в сам объект не кладётся, верно?

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

Если тебе достаточно слайсов, то зачем копировать?

Везде в примерах используют String. И «my string».to_string()

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

Это всё понятно. Меня интересует конкретно что меняется на уровне байтов в случае внесения Associated Types.

Ответ не знаю, но подозреваю, что ничего - есть же PhantomData как раз для помечания типов без внесения «рантайм оверхеда».

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

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

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

Как ты собираешься индексировать символы в utf8-строке? Операция индекса подразумевает константную сложность, символы же могут быть разного размера. Если очень хочется, можешь делать chars().nth() и терпеть линейную сложность. Если же надо индексирования, делай collect в vec<char> и индексируй.

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

Смущает String и str что ли?

Смущает почему не сделали str как String просто со ссылкой на данные и пустым drop. Естественно String тогда нужен немутабельным. Кстати, в свете того что отдельными чарами все равно не поиграешь, то от мутабельности пользы практически никакой.

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

Везде в примерах используют String. И «my string».to_string()

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

Ну а если строка будет меняться, то понятное дело, что слайс не подойдёт.

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

let a: String = "eee"; // fail
Потому и приходится писать to_string, если мы хочем строку.

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

Как ты собираешься индексировать символы в utf8-строке?

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

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

Нет конечно, все в компайлтайме проверяется, в рантайме никаких типов нет, рефлексии тоже.

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

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

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

Поэтому, живя в мире победившего utf8, нормальные языки при каждом вводе-выводе активно конвертят свои особенные внутренние сроки туда-обратно. Сомнительная радость.

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

Это не аналог.

Ну да, ну да. Для множества случаев это не аналог, а намного лучше.

Да, конечно, ведь нам только и надо, что редакторы встраивать.

Не только. Поэтому если в слабой экосистеме Qt опенсорцный встраиваемый текстовый редактор есть, пусть и кривой, то что-то более редкое может вообще отсутствовать напрочь.

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

Смущает почему не сделали str как String просто со ссылкой на данные и пустым drop.

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

Естественно String тогда нужен немутабельным.

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

DarkEld3r ★★★★★
()

А что если написать общую библиотеку для голубых на Rust и назвать её Pede.rust? :-) На C++ такое не напишешь уже :-)

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

Ну да, ну да. Для множества случаев это не аналог, а намного лучше.

А для других хуже. Но ты опять о чём-то своём.

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

Для Qt есть как минимум еще:

И тащить с собой KDE. Отличная идея.

И уровня kate встраиваемых редакторов на JS нет. А всякие codemirror и пр. - как раз прямые аналоги scintilla.

Смешно.

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

Смущает почему не сделали str как String просто со ссылкой на данные и пустым drop.

Потому что это принципиально разные вещи.

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

более редкое может вообще отсутствовать напрочь,

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

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

Смущает String и str что ли? Вообще, типы с большой буквы, но для «примитивных» типов сделано исключение: i32, i8, str и т.д.

Вот меня это и смущает. Зачем это исключение? Код сразу начинает выглядеть в два раза хуже. Как будто сперва пришёл один программист и накалякал по одним naming conventions, через два часа его сменил другой и накалякал по другим.

Понимаю, претензия дурацкая, но меня это момент раздражает.

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

Выходи из криокамеры

Не раньше, чем софт на JS перестанет тормозить и жрать память/гигагерцы.

JS повсюду

Как будто в этом есть что-то хорошее.

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

И тащить с собой KDE. Отличная идея.

Для тех, кто в заморозке:

http://en.wikipedia.org/wiki/KDE_Frameworks_5

Тащить придется уж точно не больше чем для JS.

Смешно.

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

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

Да, и, разумеется, любой ORM/FRM/DSL враппер для SQL-запросов про эти различия знает.

То-то куча народу жалуется на производительность Hibernate. А те, кто умеют выжимать из Hibernate максимум скорости, признаются, что достичь такого уровня мастерства оказалось совсем не просто.

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

Естественно String тогда нужен немутабельным.

Вот, кстати, да, немутабельные строки — вполне нормальная практика, избавляющая от кучи геморроя.

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

А ты представь, что в качестве языка для браузера использовался бы C++. Я могу представить Lisp в качестве такого языка, но не C++. Вот взять Node.js. Ну согласись ты, что приятнее работать с JavaScript и получать отличный результат в производительности, чем пыхтеть ради принципа на C++.

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

Вот взять Node.js. Ну согласись ты, что приятнее работать с JavaScript и получать отличный результат в производительности

Уж лучше Java, чем это.

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

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

Батхёрт засчитан :-) Наконец-то :-)

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

А где можно почитать про str и String? Чтение доков вызвало недоумение и неуловимый бугурт. Язык сам по себе вроде неплох, но вот это разделение как-то пованивает. Есть такое ощущение что если бы строки были немутабельными, как в питончике или жабке, то двух типов не надо было бы изобретать.

&str из Rust это String из Java. String из Rust это StringBuilder из Java.

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

А ты представь, что в качестве языка для браузера использовался бы C++.

Я так понимаю, что речь идет о Web-приложении, которое крутится внутри браузера, правильно?

Вообще-то говоря, были такие вещи как CINT (это интерпретатор C++) и Ch (это такой скриптовый язык по мотивам C и C++). Их наличие демонстрирует, что C++ не обязательно должен транслироваться в нативный код. Собственно, emscripten лишнее тому свидетельство.

Однако, не думаю, что написание клиентских приложений для браузера на C++ было бы хорошей идеей. Но даже использование Python или Ruby вместо JS было бы, на мой взгляд, намного лучше. Не говоря уже про статически типизированные языки, вроде Java.

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

Ага, всяко лучше, чем C++. :-)

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

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

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

Как хорошо, что такие решения принимаешь не ты :-)

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

Пока он еще ничего не уничтожил. А кресты пытались «уничтожить» много раз=) Посмотрим, что будет дальше.

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

Хрена лысого. str не может в индексацию.

А зачем тебе индексация строк? Ты в KOI8R живёшь? В юникоде индексация бесполезна.

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

Обычно, в нормальных языках, есть юникодные строки, которые состоят из широких чаров.

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

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

Rust это один из немногих языков с адекватной реализацией строк.

Legioner ★★★★★
()

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

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

Я наверно какую то другую документашку читал, но String большинство методов тянет из str через Deref. То есть там inplace методов с гулькин хрен, обычный жабский StringBuilder. О какой эффективности может идти речь если надо постоянно аллоцировать память в куче?

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

аха, тоже всплакнул с этого клоуна. каждый день сталкиваюсь с этим «надежным» кодом

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

String это строка с произвольной длиной. Естественно она будет в куче. Какую задачу ты пытаешься решить эффективно?

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

Все остальное - ненужный оврерхед. Не можешь на C++ - иди на рынок директором.

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

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

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