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)

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

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

Ну то есть скриптование. Ну так никто ж не говорит, что Quake 3, например, написан на QuakeC.

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

Mono есть в составе Unity и может и использовалось для скриптов, но сама игра на С++.

Это Unity3D на плюсах. Игры пишутся на C#. C++ можно использовать для плагинов. Если честно, не в курсе есть ли у wl2 нативные плагины.

Ситуация, тем не менее остаётся прежней. На плюсах пишут только авторы Unity3D, 90-99% разработчиков, купивших Unity3D плюсов и в глаза не видят.

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

Стало интересно, проверил на http://rimworldgame.com/ . Вот тут http://ludeon.com/blog/faq/ автор пишет, что игра написана на C# с использованием Unity. Скачиваем бинарную сборку под x86_64, смотрим внутрь:

[RimWorld785Linux]$ file RimWorld785Linux.x86_64 
RimWorld785Linux.x86_64: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.24, BuildID[sha1]=99b071104d24c8777e05ab2ca4836a56fd316bce, stripped
[RimWorld785Linux]$ ldd RimWorld785Linux.x86_64 
	linux-vdso.so.1 (0x00007ffec1db1000)
	libdl.so.2 => /usr/lib/libdl.so.2 (0x00007f08dcf8b000)
	libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007f08dcd6e000)
	librt.so.1 => /usr/lib/librt.so.1 (0x00007f08dcb66000)
	libGLU.so.1 => /usr/lib/libGLU.so.1 (0x00007f08dc8e5000)
	libGL.so.1 => /usr/lib/libGL.so.1 (0x00007f08dc587000)
	libX11.so.6 => /usr/lib/libX11.so.6 (0x00007f08dc245000)
	libXcursor.so.1 => /usr/lib/libXcursor.so.1 (0x00007f08dc03a000)
	libm.so.6 => /usr/lib/libm.so.6 (0x00007f08dbd35000)
	libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x00007f08dbb1f000)
	libc.so.6 => /usr/lib/libc.so.6 (0x00007f08db77c000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f08dd18f000)
	libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007f08db46d000)
	libnvidia-tls.so.349.16 => /usr/lib/libnvidia-tls.so.349.16 (0x00007f08db26a000)
	libnvidia-glcore.so.349.16 => /usr/lib/libnvidia-glcore.so.349.16 (0x00007f08d84fb000)
	libXext.so.6 => /usr/lib/libXext.so.6 (0x00007f08d82e9000)
	libxcb.so.1 => /usr/lib/libxcb.so.1 (0x00007f08d80c7000)
	libXrender.so.1 => /usr/lib/libXrender.so.1 (0x00007f08d7ebd000)
	libXfixes.so.3 => /usr/lib/libXfixes.so.3 (0x00007f08d7cb7000)
	libXau.so.6 => /usr/lib/libXau.so.6 (0x00007f08d7ab3000)
	libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0x00007f08d78ad000)
[RimWorld785Linux]$ ls RimWorld785Linux_Data/Managed/
Assembly-CSharp.dll                 Boo.Lang.dll       mscorlib.dll              System.dll           System.Xml.Linq.dll  UnityEngine.UI.dll
Assembly-CSharp-firstpass.dll       Mono.Posix.dll     System.Configuration.dll  System.Security.dll  UnityEngine.dll      UnityScript.Lang.dll
Assembly-UnityScript-firstpass.dll  Mono.Security.dll  System.Core.dll           System.Xml.dll       UnityEngine.dll.mdb
Очевидно, разработчики просто делают АОТ компиляцию перед тем, как распространять продукт. Нативный бинарник без зависимости от mono еще не означает, что разработка велась на С++.

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

Ситуация, тем не менее остаётся прежней. На плюсах пишут только авторы Unity3D, 90-99% разработчиков, купивших Unity3D плюсов и в глаза не видят.

Ну так скрипты никогда и не были нишей С++. В других играх используются lua, python, js и пр., в том числе самописные. Это было еще в 90-х. Просто видно ты тот же TES, например, не ковырял. То, что к скриптовым языкам прибавился C#, особо ничего не меняет.

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

Ты какой то глупенький. В Rust блоки unsafe - это стандартное средство программирования. Компилятор не в курсе что такое куча и не знает о лайфтаймах сырых указателей, в том числе получаемых через FFI. Указывая unsafe ты говоришь компилятору, что ты знаешь что делаешь, и это позволяет создать безопасную обертку вокруг сырых указателей. Все базовые типы данных в std, в том числе Box, Vector, Rc и т.д. реализованы средствами языка через unsafe блоки. Все биндинги к C либам сделаны так же. Это норма.

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

благодаря такой хай-тек технологии, как name mangling

Ты снова обосрался так как в расте mangling, внезапно, тоже есть.

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

Ну так скрипты никогда и не были нишей С++.

«Профессор, вспомните тему лекции.» (C) Unity3D приводился в качестве примера распространения C#, потому что он сам может быть написан на чём угодно (хотя часть его библиотеки функций точно на C#), но те >9000 человек, кто его использует для разработки игр, пишут на C#, а не на C++. И уже не важно на чём там пишут сами авторы Unity3D.

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

У Си++ давно уже стабильный ABI.

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

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

Возблагодари Господа нашего Билла Гейтса и пророка его Баллмера!

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

У Си++ давно уже стабильный ABI.

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

Какие версии линуксовых llvm и gcc имеются в виду?

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

Какие версии линуксовых llvm и gcc имеются в виду?

Ну дык, разработчики clang поставили себе цель добиться совместимости. Ничего подобного в стандарте ведь нет. И почему сразу линуксовых? С++ есть и на других платформах.

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

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

В стандарте Си++ - нет, но есть же стандарт на ABI. Внезапно, GNU C++ его реализует.

И почему сразу линуксовых?

А что, есть другие ОС? Кажется, я слышал о какой-то «венде», в ней ABI основного Си++-компилятора вообще не опубликован... там, наверное, вообще люди с песьими головами живут.

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

А с какой-то версии эту проблему исправили?

ХЗ. У меня в Wheezy хелловорлд, скомпилированный clang++, дает следующее:

$ ldd ./a.out 
	linux-gate.so.1 =>  (0xf76ec000)
	libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0xf75e7000)
	libm.so.6 => /lib/i386-linux-gnu/i686/cmov/libm.so.6 (0xf75c1000)
	libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xf75a3000)
	libc.so.6 => /lib/i386-linux-gnu/i686/cmov/libc.so.6 (0xf743f000)
	/lib/ld-linux.so.2 (0xf76ed000)

Насколько я могу судить, он использует libstdc++ от GNU C++.

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

Игрушечные ядра ОС пишут на всем.

На всём, кроме Си. :-)

Это ты об этом:
"Привет всем пользователям minix! Я тут пишу (бесплатную) операционную систему (любительскую версию - она не будет такой большой и профессиональной, как gnu) для 386-х и 486-х AT."

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

Насколько я могу судить, он использует libstdc++ от GNU C++.

Помню, мне приходилось использовать родной libcxx для c++11, и я натыкался на несовместимости при работе моего приложения с библиотекой gtkmm, собранной, естественно, с libstdc++. Причём, вроде, в строках.

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

мне приходилось использовать родной libcxx для c++11, и я натыкался на несовместимости при работе моего приложения с библиотекой gtkmm, собранной, естественно, с libstdc++. Причём, вроде, в строках.

/me подсчитывает возможные объяснения и молча пожимает плечами

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

В стандарте Си++ - нет

Ну собственно, вот и всё.

В стандарте Си тоже нет, но всё так всё.

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

/me подсчитывает возможные объяснения и молча пожимает плечами

Вроде, Glib::ustring имеет конструктор из std::string, и вот этот конструктор нехорошо реагировал, когда ему std::string приходил от libcxx, а не от libstdc++, с которым glibmm был собран.

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

Это компромисс между опасным С и безопасным GC. Ты сам себе связываешь руки, пишешь больше малочитабельного текста, усложняешь код и свою жизнь, но говоришь себе - зато это безопасно и нет оверхеда как в этих ваших Go или Java!

Я и сейчас довольно безопасно пишу на C++. Баги бывают крайне редко. А вот ускорит ли раст скорость разработки - большой вопрос.

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

Выжать и компромис - это разные вещи.

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

сейчас он таков

С чего ты это взял? И прямо вот для всех задач? На js я не пишу, ибо язык отвратительный по своему дизайну, но вполне использую erlang, scala и python. И если я беру C++, то беру его осознанно, а не из фанатизма

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

Реально суровый Челябинский программист :-) Зато в русте нет тебя :-)

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

/me подсчитывает возможные объяснения и молча пожимает плечами

Ты думаешь, что ты в IRC сидишь? :-)

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

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

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

В C++ shared_ptr только по желанию, да и с ним можно накопировать объектов когда не надо. Кроме того никто не мешает тебе в C++ вернуть указатель на локальную переменную в стеке в качестве результата или выстрелить себе в ногу иным спсобом при работе с памятью.

А зачем это делать? Случайно это как можно написать? А специально так не делают.

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

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

C++. Был совместим с C.

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

Вот плюсисты доморощенные и занимаются только тем, что «выжимают из железа всё» (пепси). :-)

Не тормози, накрести!

Ну так для этого C++ и нужен. Чтоб твой софт не тупил.

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

Вот именно. Специально только корпят днями и ночами над объектными моделями :-)

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

Все знают для чего нужен C++ — чтобы сделать кодинг смыслом жизни :-)

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

Ложь. C++ - надмножество C11. Ты немного устарел

Ага, поэтому C++11 появился раньше C11. Ты ошибаешься.

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

Возьми любой достаточно большой проект и посмотри, сколько там unsafe-кода в сравнении с остальным кодом. Его будет на порядок меньше. Это значит, что в нём будет на порядок меньше багов и общая стабильность проекта будет выше.

Так и в C++ небезопасного кода меньше обычного=) И баги, связанные с памятью и пр. ковыряниями возникают именно там. А в Rust они будут возникать в unsafe. Учитывая, что у него проблемы даже с такими примитивными вещами, как двусвязный список, то багов таких будет много.

Rust - неплохая штука, но нужно идти чуть другим путём.

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

Разница в «minor exceptions», коллега :-)

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

Так и в C++ небезопасного кода меньше обычного=) И баги, связанные с памятью и пр. ковыряниями возникают именно там. А в Rust они будут возникать в unsafe.

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

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

Понятное дело - учить математику. :-) А эти ваши unsafe, safe, поинтеры, шмоинтеры, русты, хрусты, цепепешки - это всё временное.

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

Так же как и на других языках.

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

В C++ почти всегда тоже. Требует немного времени, но опасный код видно. Кроме того, обычно его комментируют. Не, я понимаю, что в Rust ситуация лучше. Но вот насколько?

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

Переименуйся в (tail gunner). Мне бы так было приятнее тебя читать :-)

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

Больше контроля времени компиляции. Нужно сделать так, чтоб unsafe был только для вызовов сишных функций. И при этом можно было бы писать, блин, двусвязные списки. Это возможно.

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