Состоялся (https://blog.rust-lang.org/2016/08/18/Rust-1.11.html) релиз языка программирования Rust 1.11 (http://www.rust-lang.org), развиваемого проектом Mozilla, обеспечивающего автоматическое управление памятью и предоставляющего средства для высокого параллелизма выполнения заданий, при этом обходясь без использования сборщика мусора и runtime. Параллельно с Rust совместно с компанией Samsung развивается экспериментальный браузерный движок Servo (https://www.opennet.me/opennews/art.shtml?num=44712), написанный (https://github.com/servo/servo/) на языке Rust и отличающийся поддержкой многопоточного рендеринга web-страниц и распараллеливанием операций с DOM (Document Object Model).В состав нового выпуска принято 1109 изменений от 126 разработчиков, среди которых (https://github.com/rust-lang/rust/blob/master/RELEASES.md):
- Проведена большая работа по приведению в порядок внутренностей компилятора в процессе подготовки перехода на новую модель трансляции, основанную на дополнительном промежуточном представлении MIR (https://blog.rust-lang.org/2016/04/19/MIR.html) (mid-level IR), применяемом после HIR (high-level IR), но перед LLVM IR. Также ведётся подготовка к реализации режима инкрементальной компиляции (https://github.com/rust-lang/rust/pull/34956), допускающей использование неизменившихся объектных файлов;
- В пакетный менеджер Cargo добавлена поддержка представленного в прошлом выпуске нового формата исполняемых контейнеров (crate type) cdylib (https://github.com/rust-lang/rust/pull/33553), который рассчитан на компиляцию динамических библиотек, предназначенных для встраивания в программы на других языках.
В Cargo.toml теперь допустимо указание 'crate-type = ["cdylib"]';- В стандартной библиотеке проведена замена предлагаемого по умолчанию метода хэширования - вместо ранее применяемого SipHash 2-4 (https://en.wikipedia.org/wiki/SipHash) задействован SipHash 1-3, который значительно быстрее, но потенциально менее стоек к возможным новым атакам, связанным с использованием коллизий (в настоящий момент проблем нет);
- Добавлена поддержка вложенных атрибутов cfg_attr и возможнсть работы cfg_attr с атрибутами path;
- В разряд стабильных переведена новая порция функций и методов. В BinaryHeap, BTreeMap и BTreeSet добавлен метод append. В libcore включены методы to_degrees и to_radians. В Iterator добавлены методы sum и product. В Cell и RefCell добавлен метод get_mut.
Из последних успехов Rust можно упомянуть включение (https://www.opennet.me/opennews/art.shtml?num=44776) первых компонентов, написанных на Rust, в основной состав Firefox 48, а также первый выпуск проекта Way Cooler (https://github.com/Immington-Industries/way-cooler), в рамках которого развивается написанный на Rust композитный менеджер для Wayland. Way Cooler может выступать в роли оконного менеджера с поддержкой мозаичного режима с управлением в стиле i3 (https://ru.wikipedia.org/wiki/I3). Поддерживается подключение расширений на языке Lua и запуск X-приложений через XWayland.
Напомним, что язык Rust сфокусирован на безопасной работе с памятью и обеспечении высокого параллелизма выполнения заданий. При этом Rust обходится без использования сборщика мусора или runtime, что делает возможным создания на Rust библиотек, которые могут выступать в роли прозрачной замены библиотекам для языка Си. Для распространения библиотек на языке Rust, обеспечения сборки и управления зависимостями проектом развивается пакетный менеджер Cargo (http://blog.rust-lang.org/2014/11/20/Cargo.html), позволяющий получить нужные для программы библиотеки в один клик. Для размещения библиотек введён в строй репозиторий crates.io (https://crates.io/).По структуре язык Rust напоминает C++, но существенно отличается в некоторых деталях реализации синтаксиса и семантики. Автоматическое управление памятью избавляет разработчика от манипулирования указателями и защищает от проблем, возникающих из-за низкоуровневой работы с памятью, таких как обращение к области памяти после её освобождения, разыменование нулевых указателей, выход за границы буфера и т.п. Rust поддерживает смесь императивных, процедурных и объектно-ориентированных методов с такими парадигмами, как функциональное программирование и модель акторов, а также обобщённое программирование и метапрограммирование, в статических и динамических стилях.
URL: https://blog.rust-lang.org/2016/08/18/Rust-1.11.html
Новость: http://www.opennet.me/opennews/art.shtml?num=44999
> По структуре язык Rust напоминает C++Этот абзац бездумно копипастят из новости в новость. Это разные языки, хоть как их сравнивай.
Еще заголовок неправильно написан, не в духе opennet. Надо было так: "Увидел свет язык программирования Rust 1.11, [u]ознаменовавший[/u] переход к разработке версии 1.12"
"Ознаменовавший переход к разработке версии 1.12, в соответствии с решениями XXV Съезда, направленными на дальнейшее улучшение условий труда девелоперов, всего айтишного народа. Разработчики Rust взяли на себя повышенные социалистические обязательства и вызвали на соцсоревнование разработчиков Go, пообещав выпустить 1.12 в кратчайшие сроки"
А я не поехал
Я купил мотыля и пошел на реку...
> Этот абзац бездумно копипастят из новости в новость.Это со всеми повторяющимися новостями так. Иногда бывает забавно.
А можно обосновать? Подход к управлению ресурсами (в том числе памятью) в этих языках очень похож, и я с ходу не могу вспомнить еще такие языки.
>> По структуре язык Rust напоминает C++
>>Этот абзац бездумно копипастят из новости в новость. Это разные языки, хоть как их сравнивай.Там же написано:
>но существенно отличается в некоторых деталях реализации синтаксиса и семантикиТак же раст напоминает Ada, Action script, Assembler, B, ..., Zonnon (включая РАФАЛ и МОДУЛу), но и имеет ряд отличий.
"муха - это такой маленький вертолёт", "но существенно отличается в некоторых деталях реализации"
> "муха - это такой маленький вертолёт", "но существенно отличается в некоторых деталях
> реализации"Муха это маленькая птичка, КиШ одобряет :D
> Pадействован SipHash 1-3, который значительно быстрее, но потенциально менее стоек к возможным новым атакам, связанным с использованием коллизий (в настоящий момент проблем нет)прямо как в анекдоте. решил жить вечно, в настоящий момент проблем нет
Скиньте, пожалуйста, какую-нибудь статейку про то, как раст с памятью работает.Интересует, в основном, как фрагментируется (или не фраментируется) куча.
Про jemalloc почитайте, для бинарников он используется по умолчанию.
Ой-йё, не знал, что там jemalloc. Спасибо.
> развивается экспериментальный браузерный движок ServoКуда развивается? Развиваться можно после того как заработало что-то.
Развивается до рабочего состояния. Разве тут есть логическое противоречие?
Здесь есть вот какая тонкость. Если что-то "развивается до рабочего состояния", то это что-то неуместно в этой фазе развития называть "движком Servo". Можно "зачатками движка Servo", "прототипом движка Servo", "громадьем планов разработчиков движка Servo", и еще много как.
Когда употребляется выражение "движок Servo развивается", тем самым подразумевается что этот "движок Servo" есть что-то существующее, рабочее - то есть следующую фазу развития.
> Если что-то "развивается до рабочего состояния", то
> это что-то неуместно в этой фазе развития называть "движком Servo".Тут Вы находитесь в позиции философов, размышляющих о том, можно ли считать корабль тем же самым кораблём, если в нём заменить часть деталей или даже все детали.
Проект же является собой на протяжении всего времени существования, в том числе и зачаточном, и тем более в таком состоянии, котором находится Servo.
Вот и называйте его "проектом создания движка Servo", а не "движком Servo".
Движок Servo - это и есть проект.
Что же, работающий движок Servo - это будет уже другой проект?
> Что же, работающий движок Servo - это будет уже другой проект?Что же Вы юродствуете? Плохо работающий движок Servo и хорошо работающий в будущем(предположительно) - это один и тот же проект, хотя и находящийся в разных состояниях. Точно также, как и человек в 5-летнем и 25-летнем возрастах - это один и тот же человек.
> Что же Вы юродствуете? Плохо работающий движок Servo и хорошо работающий в
> будущем(предположительно)Хорошая оговорка, учитывая сколько прошло времени и как это "работает". Может МакЛауд и застанет тот момент, если тогда МоФо еще не превратится в апачевский могильник. А могут. Нафигнужная ось, маргинальный яп, второсортный браузер, не взлетевшие сервисы и недопиленный новый движок. Все слагаемые успеха.
тут я с ВАми в корне не согласен - развиваться можно и до того, а вот деградировать, после.
тут я с ВАми в корне не согласен - по моему опыту многие комментаторы деградировали до уровня обезьяны ещё до того, как у них в голове что-то заработало.
> многие комментаторы деградировалиТы ж не намекаешь на вашего штатного (rob pike)?
> Ты ж не намекаешь на ... rob pike?Нет
>> Ты ж не намекаешь на ... rob pike?
> НетСпасибо, именно это и хотел услишать, чтобы развеять 1% сомнений в том, что rob pike -ваш штатный.
> Спасибо, именно это и хотел услишать, чтобы развеять 1% сомнений в том,
> что rob pike -ваш штатный.Ты развеял последние сомнения в том что опеннет - это на самом деле фабрика троллей. А под айтишный ресурс он косит по привычке, или для конспирации.
> тут я с ВАми в корне не согласен - развиваться можно и
> до того, а вот деградировать, после.Можно развиваться и деградировать одновременно.
Обычно так и происходит.
Я понимаю, что haters gonna hate, но что мешает хотя бы погуглить? В репозитории https://github.com/servo/servo регулярные коммиты. Значит таки развивается, в отличии от :)
В отличие от чего?
В отличии от :)
> В отличие от чего?тебя?
Развитие в неправильную сторону называется по другом. Хотя тоже сопровождается определённым количеством коммитов в единицу времени.
> Развиваться можно после того как заработало что-то.Значит ты таки не работаешь?
Rust->HIR->MIR->LLVM IR->машинный код
по-моему это перебор с уровнями абстракции
Любую проблему можно решить добавлением нового абстрактного слоя, кроме проблемы слишком большого количества абстрактных слоев :)
> Любую проблему можно решить добавлением нового абстрактного слоя, кроме проблемы слишком
> большого количества абстрактных слоев :)Их можно абстрагировать, представив как всего один слой :)
Для каждого следующего существует лишь предыдущий :)
> The latest verified CakeML compiler passes through 12 intermediate languages
это не то, чем стоит гордиться
Как же вы предложили бы переделать архитектуру CakeML?
> Rust->HIR->MIR->LLVM IR->машинный код
> по-моему это перебор с уровнями абстракцииЕсли вводят только сейчас, переделывая уйму работы, то скорее всего, потребность вполне реальная.
Вообще, сейчас HIR занимается и проверкой типов и borrowcheck, т.е. и жнец и на дуде игрец.
А будет только проверять типы, borrow check вынесут в MIR, что вроде как позволит сделать проверку типов более точной. Ну и расто-специфическая оптимизация будет там же, в MIR.
> reviously, the compiler relied solely on LLVM to perform optimizations, but with MIR, we can do some
> Rust-specific optimizations before ever hitting LLVM – or, for that matter, before monomorphizing code.
> Rust’s rich type system should provide fertile ground for going beyond LLVM’s optimizations.В общем, будем посмотреть что из этого выйдет.
Кэп, это компилятор. Чтобы пооптимальней код генерировать ввели ещё доп. уровень оптимизаций. Конечных девелоперов и пользователей это никак не затронет, разве что бинарь будет чуть более быстрой или лёгкой.
Мне кажется, или все хотят опять вернуть проект пятого поколения компьютеров, забывая даже о законе Амдала? Вообще, в прошлом веке было как минимум несколько подобных языков
Какой закон Амдала, если параллельно выполняется куча задач?
Как бы закон Амдала именно о параллельных вычислениях/задачах.Хотя чем он напугал анонима мне тоже не ясно.
Он о распараллеливании _одной_ задачи.А ы нашем случае - куча задач. То есть о самом феномене помнить стоит, но когда и как овчинка перестанет стоить выделки - только экспериментально проверять, и то обновлениями софта можно подправить.
Нет никакой принципиальной разницы. И формулировок этого закона куча, в том числе вообще без использования понятия задачи. Например такая:
"Производительность вычислительной системы, состоящей из связанных между собой устройств, в общем случае определяется самым непроизводительным ее устройством."
Тем, что в прошлом веке уже пытались сделать то, что делают сейчас. Рекомендую всем поискать историю компьютеров пятого поколения
Нет стандарта -- нет и языка.
Нет стабильного ABI -- нет и языка.
Нет мозгов - считай, инвалид.
> обработка ошибок по кодамЗакопать Rust и прикрутить стаический анализатор к g++.
Иж как у тебя бомбит по GCC/GNU
Нет. Бомбит по C++. Такого рода комментарии рождаются из рассуждения вида: "в языке X это можно сделать при помощи всего двух костылей, так зачем тогда добавлять это в список фичей языка Y?" А такие рассуждения порождаются из-за излишне идеализированного отношения к языку X.
> При этом Rust обходится без использования сборщика мусораНу не обходится, а не сожержит. Ибо утечки памяти таки допускает
И обходится, и содержит. Читайте дорогую документацию.
Утечки памяти не нарушают безопасность памяти
Совпадет ли выпуск Servo с окончательным скурвиванием Мозиллы и ее флагманского продукта?
> и предоставляющего средства для высокого параллелизма выполнения заданийВ каждой новости подобная фраза. Есть те кто изучал Rust? В Go понятно, канкаренси, работающий через runtime, а в Rust как это работает, если у него нет рантайма?
За счет чего работает этот "высокий параллелизм"?