Проект Mozilla представил (https://mail.mozilla.org/pipermail/rust-dev/2014-April/00938... выпуск Rust 0.10 (http://www.rust-lang.org/), экспериментального языка программирования со строгой типизацией, сфокусированного на безопасной работе с памятью и обеспечению высокого параллелизма выполнения заданий (возможность порождать тысячи и даже миллионы подпроцессов). Исходные тексты проекта распространяются (https://github.com/mozilla/rust/) под лицензией MIT. Параллельно с Rust совместно с компанией Samsung развивается экспериментальный браузерный движок Servo (http://www.opennet.me/opennews/art.shtml?num=36576), написанный на языке Rust и отличающийся поддержкой многопоточного рендеринга web-страниц и распараллеливанием операций с DOM (Document Object Model).С момента прошлого выпуска внесено около 1500 изменений (https://github.com/mozilla/rust/wiki/Doc-detailed-release-no.... В дополнение к архивам с исходными текстами для Linux и OS X началось формирование бинарных сборок. Из состава удалена библиотека libextra, которая разделена на серию мелких модулей. Добавлены атрибуты "#[macro_export]" и "#[phase(syntax)]", дающие возможность задания макросов и расширений синтаксиса, не привязанных к контейнерам, в которых они определены. В систему умных указателей добавлены две новые языковые конструкции Deref и DerefMut, позволяющие управлять разыменованием указателей. Улучшены средства обработки ошибок ввода/вывода.
По структуре язык Rust напоминает C++, но существенно отличается в некоторых деталях реализации синтаксиса и семантики, а также ориентацией на блочную организацию структуры кода, которая позволяет реализовать задачи в виде легковесных сопрограмм. Автоматическое управление памятью избавляет разработчика от манипулирования указателями и защищает от проблем, возникающих из-за низкоуровневой работы с памятью, таких как обращение к области памяти после её освобождения, разыменование нулевых указателей, выход за границы буфера и т.п. Rust поддерживает смесь императивных процедурных и объектно-ориентированных методов с такими парадигмами, как функциональное программирование и модель акторов, а также обобщённое программирование и метапрограммирование, в статических и динамических стилях.
Базовые возможности языка:
- Ориентация на безопасность:
- Аккуратная работа с памятью - никаких нулевых и потерянных указателей. Автоматическое управление памятью;- Контроль изменчивости. Объекты неизменяемы (Immutable) по умолчанию;
- Безопасность динамического выполнения: обработка сбоев, исключения, ведение лога, RAII / dtors;
- Typestate: возможность определения сложных инвариантов, контролирующих структуры данных.
- Ориентация на параллельность и эффективность кода:
- Явный контроль памяти, контролирование схемы распределения памяти;- Крайне лёгкие задачи, формируемые в виде сопрограмм. Лёгкость в порождении тысяч и миллионов подпроцессов;
- Итераторы стека (фактически лямбда-блоки без распределения кучи);
- Статическая, нативная компиляция с созданием исполняемых файлов ELF, PE, Mach-o;
- Прямой и простой интерфейс для кода на языке Си;
- Ориентация на практическое применение:
- Мультипарадигмальный, функциональный, императивно-процедурный, объектно-ориентированный, поддерживающий параллельную actor-модель;- Функции высшего порядка с биндингами;
- Нет номинальных типов (http://en.wikipedia.org/wiki/Nominative_type_system) или иерархии типов;
- Мультиплатформенный, поддерживается Windows, Linux, Mac OS X, *BSD;
- Хранение строк в UTF-8, разнообразие низкоуровневых типов;
- Работает с существующими нативными наборами инструментов: GDB, Valgrind, Shark и т.д.;
- Практическая возможность нарушения правил: возможность игнорирования правил безопасности, если чётко указано, когда и как их нарушать.
URL: https://mail.mozilla.org/pipermail/rust-dev/2014-April/00938...
Новость: http://www.opennet.me/opennews/art.shtml?num=39490
Когда я искал что-нибудь новенькое для изучения выбор был между Go и Rust.
К счастью я выбрал Go...PS. Ничего не имею против Rust, но мне кажется, что они слишком часто ломают API.
http://jaredly.github.io/2014/03/22/rust-vs-go/index.html
Я бы также посоветовал прочитать "Go and Rust — objects without class": http://lwn.net/Articles/548560/
> PS. Ничего не имею против Rust, но мне кажется, что они слишком часто ломают API.То что вы ничего не имеете против, это конечно хорошо, но только сразу видно, что сами вы ничего никогда не создавали.
Посмотрите внимательно на номер версии. На этой стадии "слишком часто ломать API" не только можно, но и нужно.
Лучше в начале хорошенько поломать, чтобы потом ломать можно было как можно меньше ради всяких там обратных совместимостей.
P.S. Однако добавлю свое "не против".
Зачем они его назвали "Rust"? Что они имели в виду?
Rust - означает "ржавчина", в лучшем случае "окисление". По крайней мере других значений я не нашел.
Как корабль назовешь, так оно и полетит...
>Как корабль назовешь, так оно и полетит...Матиас Руст в свое время до Красной площади вполне успешно долетел ;)
В Go на ранних версиях сделали gofix, который автоматически фиксил изменения в апи и в языке. Т.е. с выходом новой несовместимой версии просто обрабатываешь исходники с gofmt - и получаешь поддержку новых апи.
А насчет версий и циферок: проекты Go и Rust - ровесники, оба с 2009 года, не важно какие цифры в версиях ставить - все равно у Rust темпы развития заметно ниже.
Go развивает Google, Rust - Mozilla и сообщество. Естественно, у первых больше ресурсов и темпы развития выше.
> Go развивает Google, Rust - Mozilla и сообщество. Естественно, у первых больше
> ресурсов и темпы развития выше.Не говорите, если не знаете: в Google над Go работает пять-шесть человек, и из них не все делают это фулл-тайм. Основной мейнтейнер Windows-порта не работает в Google. И т.п.
это не более чем видимость. Синтаксис Go давно стабилизирован из-за своей чрезвычайной простоты, но под капотом там надо еще очень много чего сделать.
Лучше сначала план действий построить, потом пачку прототипов для тестирования и уже потом продукт. Но тут решили пойти по пути без промежуточных прототипов, что в свою очередь заставляет их до сих пор API ломать и ломать...
Повторюсь, я ничего не имею против Rust если будет свободное время то даже посмотрю как он поведет себя на небольшой реальной задачке(но это будет не скоро), а пока мне более интересен Go.
> а пока мне более интересен GoВсем нам очень интересно, что там интересно тебе. На это раз говорю за всех, да.
>> PS. Ничего не имею против Rust, но мне кажется, что они слишком часто ломают API.
> То что вы ничего не имеете против, это конечно хорошо, но только
> сразу видно, что сами вы ничего никогда не создавали.
> Посмотрите внимательно на номер версии. На этой стадии "слишком часто ломать API"
> не только можно, но и нужно.
> Лучше в начале хорошенько поломать, чтобы потом ломать можно было как можно
> меньше ради всяких там обратных совместимостей.Вы правы, но есть одна "тонкость": иногда хочется/требуется, изучая новое, всё же писать код, у которого хорошие шансы *выжить,* и тогда нужна какая-то стабильность.
Go со своим API Compatibility Promise для 1.x вполне это обеспечивает: я знаю, что мой код, написанный для Go 1.1 будет компилироваться Go 1.9, а также это относится ко всем пакетам, которые мой код использует.Поэтому "на поиграться" Rust безусловно интересен. Но если мы говорим о коде, который собирается где-то работать, то пока что Rust подходит только для Servo, так как по-сути это такой большой красивый набор юниттестов для Rust, который пишут разработчики Rust (я упрощаю, но думаю, моя идея понятна).
> Посмотрите внимательно на номер версии. На этой стадии "слишком часто ломать API" не только можно, но и нужно.Посмотрите внимательно на номер версии Firefox. А API как начали регулярно ломать с 4-й версии, так и продолжают. Особенно интересно будет, если Electrolysis (выделение вкладок в отдельные процессы) все-таки запилят, то авторам всех расширений, хоть как-то взаимодействующих с содержимым страниц, придется все переписать. Ну, или сменить браузер. :)
А что это такое?>>Практическая возможность нарушения правил: возможность игнорирования правил безопасности, если чётко указано, когда и как их нарушать
пишешь unsafe и шпаришь на "сях" -- круши-ломай, память вся твоя
> пишешь unsafe и шпаришь на "сях" -- круши-ломай, память вся твояВоспитанные на сишке и плюсах так и будут писать, поэтому толку от безопастности Rustа будет мало.
> А что это такое?
>>>Практическая возможность нарушения правил: возможность игнорирования правил безопасности, если чётко указано, когда и как их нарушатьОколо 30% кода компилятора Rust обернуто в блоки "unsafe". Т.е. язык настолько безопасен что сколь-либо полезную программу без unsafe не написать.
>Т.е. язык настолько безопасен что сколь-либо полезную программу без unsafe не написать.Просто программисты раньше писали на си и плюсах и привыкли к ним до такой степени, что перестроиться под безопасный Rust не смогли.
>>Т.е. язык настолько безопасен что сколь-либо полезную программу без unsafe не написать.
> Просто программисты раньше писали на си и плюсах и привыкли к ним
> до такой степени, что перестроиться под безопасный Rust не смогли.Мне кажется что компилятор Rust пишут разработчики, знающие Rust и понимающие как его применять
Господа теоретики, а вам не кажется, что наличие чего бы то ни было в компиляторе отнюдь не означает нужду в этом в прикладном коде?
Сколько процентов макросов и шаблонов в коде GCC?
А STL и Boost, например, все из шаблонов - специально для того, чтобы уже пользователю с ними не париться, а спокойно использовать вылизанные решения на более высоком уровне.
Кстати, недавно Servo прошел Acid2
http://i.imgur.com/CsLkgLl.png
А вот как это развивалось http://imgur.com/a/O667X
Кроме этого, недавно его запустили на контроллере: http://i.imgur.com/I6yDNjz.jpg
Я уже достаточно пообсуждал этот язык с профи.
Они говорят, что когда есть C++, от Rust пользы никакой, а только дополнительная головная боль из-за ограничений, которые присутствуют в Rust, вследствие того, что это "безопасный язык".Так что, если не хотите ерундой лишний раз страдать и терять попусту время, тогда учите C++.
И это не говоря уже о том, что для C++ есть уже всё и больше чем всё во всех сферах и моментах, а для раст инраструктура до такой степени разовьётся лет через 15-20. И то при условии, что все массово начнут отказываться от C/C++.
Никто не планирует внедрять Rust, язык не рекомендуется использовать в production на данный момент.
C++ - мощнейший инструмент, позволяющий использовать различные парадигмы и технологии программирования. Кроме того, обладающий отличной производительностью. Безопасность - единственное слабое место языка. Писать безопасно на C++ можно, но нужно быть очень осторожным.
Mozilla создаёт язык, который по её мнению сможет стать безопасной заменой C++. Писать на нём не сложнее, а вот выстрелить себе в ногу - гораздо сложнее. Вместе с тем, Rust остаётся производительным, что немаловажно для системного ПО. На мой взгляд, за этим языком будущее.P.S. John Regehr не так давно говорил, что пора уйти от небезопасных моментов C, создав новый язык. Современные мощности позволяют утратить незначительную долю производительности, получая взамен безопасность. Большой специалист по Си. Как фамилии ваших профи, не поделитесь?
А как же язык D?
Лажа полная.
C++ и больше ничего не нужно.
Я Вам что, стукач что ли? Это Михаил Шигорин сливает личную переписку, и вообще всех сливает.
Второй абзац и ниже - можно смело заменять нпример "Mozilla"->"Gnome" и "Rust"->"Vala".
Да, конечно, Rust != Vala, но:> Современные мощности позволяют утратить незначительную долю производительности, получая > взамен безопасность.
кричат на каждом углу Java, Ruby, Python да и все кто медленнее С и имеет сборщик мусора.
Зачем, когда давно есть Objective-C?
>P.S. John Regehr не так давно говорил, что пора уйти от небезопасных моментов C, создав новый язык.Зачем? Когда уже давно существует безопасная сишка Cyclone и виртовские обероны?
Добавлю: таже Ada ещё например.
А я добавлю LLVM бит код.
> Добавлю: таже Ada ещё например.синтаксис ады, несмотря на наличие неплохих мыслей, явно переусложнен, причем с бессмысленной ломкой многих моментов совместимости с алголом/паскалем в простых вещах
if Ada.Command_Line.Argument_Count /= 1 then
Ada.Text_Io.Put_Line (File => Ada.Text_Io.Standard_Error,
Item => "USAGE: " & Ada.Command_Line.Command_Name & "<input-file-name>");
end if;впорочем синтаксис раста вообще создан больными на голову программистами (впрочем а бывают ли другие то) - сократить привычное, полезное и заметное ключевое слово function до непонятного и незаметного fn, но зато всюду пихать бессмысленное let, поменять привычный и безвредный switch/case на match, но оставить бессмысленные и плохо читаемые ц сокращения типа += и т.п.
>Я уже достаточно пообсуждал этот язык с профи.На ЛОРе. :)
Нет :)
> то при условии, что все массово начнут отказываться от C/C++.От ц++ уже массово отказались все (и везде) кто-только мог. Правда новые языки тоже изрядное гуано.
>C++ Безопасность - единственное слабое место языка.
слабое место языка сумасшедший синтаксис. низкоуровневый заимствован от сами знаете кого и тут обсуждать вообще нечего. а высокоуровневый чем дальше тем мозгоклюстее, причем в нем нет внутреннего единства, схожие по смыслу вещи явно делались разными людьми, не интересующимися друг другом. впрочем это и понятно, если писать на ц++ еще можно, то читать ц++ код ну его на фиг, проще заново написать
>Нет номинальных типовA structure is a nominal structure type defined with the keyword struct.
An enumeration is a simultaneous definition of a nominal enumerated type as well as a set of constructors.
> #!/bin/sh
> local V=$1https://github.com/mozilla/rust/blob/master/configure
вот как так?