LINUX.ORG.RU

Rust 0.11

 , ,


1

6

Спустя несколько месяцев разработки тихо и незаметно вышла новая версия Rust — языка программирования, разрабатываемого Mozilla и нацеленного на безопасность, производительность и параллелизм.

В данном релизе усилия разработчиков были главном образом сосредоточены на доведение до ума системы типов и стандартной библиотеки. Так, одной из основных задач являлось введение инфраструктуры для типов переменного размера. Также, как и обещано, был полностью удалён ~ и @ синтаксис в пользу использования стандартных типов Box и Gc.

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

  • Синтаксис ~[T] был удален из языка, вместо него используется Vec<T>;
  • Синтаксис ~str был удален из языка, вместо него используется String;
  • Синтаксис ~T был удален из языка, вместо него используется Box<T>;
  • Синтаксис @T был удален из языка, вместо него используется std::gc::Gc<T>;
  • Байтовые символы, строки и сырые строки теперь предваряются префиксом b;
  • Изменился синтаксис для указания времени жизни замыканий: <'a>|A, B|: 'b + K -> T;
  • Модульная арифметика для вещественных типов была убрана из языка;
  • Синтаксис use foo, bar, baz; был удален из языка;
  • Ключевое слово priv было удалено из языка;
  • Поля структур стали по умолчанию приватными;
  • Приватные перечислимые типы теперь запрещены;
  • Замыкание более не может быть вызвано через &-указатель;
  • Индекс вектора и размер битового сдвига теперь может быть представлен только в виде uint;
  • Стандартная библиотека теперь являет собой один унифицированный интерфейс к набору нижлежащих библиотек;
  • Добавлена новая библиотека libcore, призванная облегчить разработку встраиваемого программного обеспечения;
  • Был добавлен модуль regex, также включающий в себя набор статически скомпилированных регулярных выражений;
  • Набор I/O примитивов получил возможность прерывать операции по таймауту;
  • Добавлен макрос bitflags! для упрощения работы с битовыми флагами.

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

★★★★★

Проверено: fallout4all ()
Последнее исправление: CYB3R (всего исправлений: 2)

ух как колбасит-то это существо

жалко становится, пристрелить надо, пока оно на людей бросаться не начало

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

Еще и зарезервировали слово box :/

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

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

Про синтаксис - вроде как, просто нефатальные изменения синтаксиса, мало на что влияющие.

Да просто в большинстве пунктов указано как было и как стало, а в этом нет. (:

Это составная часть удаления «priv».

Да я потому и спросил, что вообще не знаю, что такое «priv», а в гугле все ссылки ведут как раз на информацию о том, что это удалили.

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

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

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

Не надоело лужи газифицировать? Ты можешь придумать вариант лучше «box»? Этим идентификатором уже нельзя пользоваться, захочешь назвать переменную «ящиком», а фиг.

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

Ну вот тебе пример, не совсем корректный, для Python:

virtuos86@eho ~ $ python
Python 2.7.5+ (default, Feb 27 2014, 19:61:55) 
[GCC 4.8.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from keyword import kwlist; kwlist # список ключевых слов Python
['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 
'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']
>>> # идентификаторов, которые могли бы пригодиться тут почти нет
... 
>>> import __builtin__ as b
>>> dir(b)[dir(b).index('abs'):] # список встроенных функций (и классов, "косящих" под функции)
['abs', 'all', 'any', 'apply', 'basestring', 'bin', 'bool', 'buffer', 'bytearray', 'bytes', 'callable', 'chr', 'classmethod', 
'cmp', 'coerce', 'compile', 'complex', 'copyright', 'credits', 'delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval', 'execfile', 
'exit', 'file', 'filter', 'float', 'format', 'frozenset', 'getattr', 'globals', 'hasattr', 'hash', 'help', 'hex', 'id', 'input', 'int', 
'intern', 'isinstance', 'issubclass', 'iter', 'len', 'license', 'list', 'locals', 'long', 'map', 'max', 'memoryview', 
'min', 'next', 'object', 'oct', 'open', 'ord', 'pow', 'print', 'property', 'quit', 'range', 'raw_input', 'reduce', 'reload', 'repr', 'reversed', 
'round', 'set', 'setattr', 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'unichr', 'unicode', 'vars', 'xrange', 'zip']
>>> 
Здесь всё гораздо интересней, велика вероятность написать свою функцию с идентификатором из этого списка, каждый python-программист хотя бы раз сталкивался с этим и получал сеанс приятной отладки, потому что интерпретатор позволяет затенять встроенные функции (собственно, в этом плане они ничем не отличаются от остальных объектов). Отсюда всевозможные корявые «list_» и т.д.

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

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

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

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

Мне не очень понятно, что именно тебя приводит в ужас и что тебя запутало с памятью. Можно чуть более развернуто?

ozkriff
()

shybovycha

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

С большими числами, лол? Тут есть ровно два варианта:
1. Либо ваш хацкель для работы с большими числами использует написанную на Си библиотеку GMP.
2. Либо вдрызг сливает ей по производительности.

Что до «математики и так далее», то для этого есть Mathlab и Wolfram Mathematica, которые по мощи и удобству заведомо превосходят эти ваши general-purpose язычки и среды.

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

Вот и получается, что ниша хацкеля — это бессистемное программирование, в той её части, где почему-то не подходит Java :)

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

что тебя запутало с памятью

«It’s not obvious, for example, that &mut T implies no aliasing. Moreover, the notation &mut T suggests that &T implies no mutability, which is not entirely accurate, due to types like Cell.»

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

Да я потому и спросил, что вообще не знаю, что такое «priv», а в гугле все ссылки ведут как раз на информацию о том, что это удалили.

Раньше в языке чего-то было приватным по умолчанию, а чего-то публичным. Для явного указания использовались ключевые слова priv и pub.

Потом это дело привели в порядок - теперь все по-умолчанию приватно и смысл в ключевом слове priv пропал. Его и убрали, оставили только pub.

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

Была сомнительная возможность объявить enum, где часть вариантов была публичной, а часть приватной: pub enum Foo{Bar, priv Baz} . Ее убрали, теперь варианты enum наследуют видимость у enum`а. Лично я ни разу нужды в ней не испытывал и не видел, что бы оно использовались в каких-то библиотеках.

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

что тебя запутало с памятью

«It’s not obvious, for example, that &mut T implies no aliasing. Moreover, the notation &mut T suggests that &T implies no mutability, which is not entirely accurate, due to types like Cell.»

А, хех, mutпокалипсис? Мне кажется, разработчики вообще боятся чего-то говорить по этому поводу теперь, после того недельного ада, когда весь реддит, список рассылки, все irc-каналы были забиты безумными RFC и срачами)))

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

Раньше в языке чего-то было приватным по умолчанию, а чего-то публичным.

А... ну это хорошо, что «исправили».

теперь все по-умолчанию приватно и смысл в ключевом слове priv пропал.

Правильно понимаю, что в расте надо для каждой фигни указывать pub отдельно? А не как в С++, где как бы «секции»?

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

Вот теперь тоже интересно где такое применить можно...

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

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

Зато вот кукарекнуть что-нибудь про хацкель эксперт был просто обязан.

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

Зато вот кукарекнуть что-нибудь про хацкель эксперт был просто обязан.

Ну кто ж виноват, что в тред о Rust ворвалась кучка хацкоебов, и начала вещать всем о своих наболевших проблемах? :D

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

Раньше в языке чего-то было приватным по умолчанию, а чего-то публичным.

А... ну это хорошо, что «исправили».

А почему в кавычках? На самом деле жутко неудобно было.

Правильно понимаю, что в расте надо для каждой фигни указывать pub отдельно? А не как в С++, где как бы «секции»?

Да, pub везде явно указывается.

Вот теперь тоже интересно где такое применить можно...

Думаю, уже не особенно важно)

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

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

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

Мляяя, опять он вышел... Ну скока можно уже?

nerdogeek
()

Читаю очередной чейнжлог Раста и думаю - сколько же в этом языке всего, неужели оно всё реально нужно?

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

Если этот аргумент имеет особое значение значит и передаваться он должен особым образом, либо вести себя как обычный аргумент. А тут вроде идея красивая но недоделанная получается.
Память это вообще шедевр, два вида указателей. Нафига? Не проще было бы перегружать new, delete и ->

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

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

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

сколько же в этом языке всего, неужели оно всё реально нужно?

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

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

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

Я не понял, чего ты хочешь доделывать.

Он и так при вызове передается особым образом (obj.func(arg1, arg2), а не meth(func, arg1, arg2)). И в сигнатуре он записывается особым образом - всегда на первом месте, и со специальным синтаксисом: нет явного указания типа, только «имя» (self) и вид передачи (по значению, ссылке или мутабельной ссылке).

Ну, кстати, были какие-то RFC о том, что бы убрать специальный синтаксис для self и писать его просто как self: &Self или вроде того, с указанием нормального типа.

Память это вообще шедевр, два вида указателей. Нафига? Не проще было бы перегружать new, delete и ->

Ох, ты точно хоть чуть-чуть почитал о работе с памятью в Ржавчине, перед тем как обзываться «шедевром»? :(

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

Я в Раст не погружался совсем и потому ответить на сей вопрос обоснованно не могу.

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

Вот такое вот богатство на минимализме. Тут, конечно, речь идет не о Си++ (мой основной рабочий), а о Хаскеле со Смолтоком.

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

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

Как банальный пример:

  • Синтаксис ~[T] был удален из языка, вместо него используется Vec<T>;
  • Синтаксис ~str был удален из языка, вместо него используется String;
  • Синтаксис ~T был удален из языка, вместо него используется Box<T>;
  • Синтаксис @T был удален из языка, вместо него используется std::gc::Gc<T>;
ozkriff
()

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

dizza ★★★★★
()

Даа, раст оправдывает свои версии аля 0.хх.. Все порывался его куда-нибудь пристроить, а они вон что, все ломают да переделывают...

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

В плюсах у меня нет явной передачи указателя на объект, вместо этого используются ключевые слова при декларации метода: const и static. Аргументы как хочу так и передаю и нет разницы первый это аргумент или последний. Тут я должен изгаляться на ровном месте, писать неудобочитаемые конструкции которые отличаясь одним символом меняют поведение объекта внутри метода. Это во-первых неудобно, во-вторых плохо читаемо.

А по поводу memory management да я не достаточно подробно изучил этот вопрос. Все ограничено двумя реализациями которые облегчат жизнь студенту, рад за них. Но, судя по тому что ~ и @ выкинули - все идет к плюсам, это закономерно.

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

Со временем оно превращается в C++, похоже.

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

В плюсах у меня нет явной передачи указателя на объект, вместо этого используются ключевые слова при декларации метода: const и static. Аргументы как хочу так и передаю и нет разницы первый это аргумент или последний. Тут я должен изгаляться на ровном месте, писать неудобочитаемые конструкции которые отличаясь одним символом меняют поведение объекта внутри метода. Это во-первых неудобно, во-вторых плохо читаемо.

Это же вкусовщина в чистом виде. Так можно дойти до признания языка негодным из-за того, что там вместо {} какая-нибудь разновидность begin end или, о боже, отступы :) .

А по поводу memory management да я не достаточно подробно изучил этот вопрос. Все ограничено двумя реализациями которые облегчат жизнь студенту, рад за них.

box-указатели, это встроенный аналог unique_ptr, это как в С++. А вот ссылки (&) в Ржавчине имеют контролируемую компилятором область жизни и не могут пережить объект, на который ссылаются. Что тебе в этом подходе не нравится?

И при чем тут студенты? У программистов-не-студентов сегфолтов в С++ не происходит и память не течет? :)

Но, судя по тому что ~ и @ выкинули - все идет к плюсам, это закономерно.

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

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

красивые, изящные абстракции, сами будучи минимальными
Хаскеле со Смолтоком.

Тем не менее:

Си++ (мой основной рабочий)

Странно, да?

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

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

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

Это во-первых неудобно, во-вторых плохо читаемо.

Насчёт читаемости, пожалуй согласен. Подход плюсов где всё-таки нормальные ключевые слова (static, const, override) для этого использовать решили тоже больше нравится. С другой стороны «= 0» для абстрактных функций несколько не вписывается.

А насчёт удобства хз. Наверняка, кому-то покажется удобным/красивым, что this передаётся не неявно, а как остальные параметры.

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

Там дело не в том, что «реализации» доступны из коробки, а в том, что владение при компиляции проверяется. В плюсах такого со смартпоинтерами нет и не будет.

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

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

Дай угадаю: это были брейнфак и форт?

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

богатство на минимализме. Тут, конечно, речь идет не о Си++ (мой основной рабочий), а о Хаскеле со Смолтоком.

Про минимализм Хаскеля - это тонко, ящитаю.

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

апи неблокирующего ввода вывода

Вроде вместо неблокирующего io хотят делать тонны легковесных нитей, каждая из которых на io таки блокируется. И уже под капотом тредовой библиотеки — асинхронный io с ядром ОС.

Manhunt ★★★★★
()
Последнее исправление: Manhunt (всего исправлений: 2)
Ответ на: комментарий от A-234

В плюсах у меня нет явной передачи указателя на объект, вместо этого используются ключевые слова при декларации метода: const и static.

Ну вот и в Rust используется ключевое слово self в декларации метода :)

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

Нет, это не вкусовщина и сравнения некорректные. Сравнивать надо с комментариями в фортране, например, или с синтаксисом make. Оба являют собой примеры устаревшего, неудобного синтаксиса.

У программистов-не-студентов сегфолтов в С++ не происходит и память не течет?

lol. Дело не в течет-не течет, а в том сколько времени тратится на их поиск и устранение. Разница в проектировании и подходах к анализу кода, опыт позволяет не впадать в уныние при сегфолтах а оперативно их устранять, даже в чужом коде.


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

Вот не надо. Изначально прямая поддержка была нужна, это потом все начали выносить в библиотеки. Это и есть движение в сторону плюсов. Осталось не много ;)

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

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

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