LINUX.ORG.RU

Релиз языка программирования Rust 1.39

 ,


1

8

Rust — мультипарадигмальный компилируемый язык программирования общего назначения, спонсируемый Mozilla, сочетающий парадигмы функционального и процедурного программирования с объектной системой, основанной на типажах, и с управлением памятью через понятие «владения».

Что нового в версии 1.39:

  • стабилизирован новый синтаксис асинхронного программирования, основанный на функции «async», блоке async move { … } и операторе «.await»;
  • разрешено указание атрибутов при определении параметров функций, замыканий и указателей на функции. Поддерживаются атрибуты условной компиляции (cfg, cfg_attr), управляющие диагностикой через lint и вспомогательные атрибуты вызова макросов;
  • стабилизирован «#feature(bind_by_move_pattern_guards)», который позволяет использовать переменные с типом привязки «by-move» в шаблонах;
  • предупреждения о проблемах при проверке заимствования переменных c использованием NLL переведены в разряд фатальных ошибок;
  • в пакетный менеджер cargo добавлена возможность использования расширения «.toml» для файлов конфигурации.

С полным списком изменений можно ознакомиться на сайте разработчика.

>>> Источник

★★★★★

Проверено: cetjs2 ()
Последнее исправление: cetjs2 (всего исправлений: 4)
Ответ на: комментарий от RazrFalcon

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

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

Просто у людей есть еще и другие интересы в жизни, например семья.

Более бредового аргумента я не слышал… D пилит один человек, что ли?

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

А деструкторы/финализаторы кто будет вызывать?

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

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

А они и не вызываются, точнее могут не вызываться.

Это меня больше всего бесит в языках с GC, следить и самостоятельно вызывать Dispose как free в С. На самом деле даже больше проблем, так как в С нет исключений…

Финализатор дерьмо, для RAII не подходит :(

Using и with в разных языках немного помогают, но деструкторы гораздо лучше…

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

В С/С++ компилятор всегда анализирует код.

Зависит от компилятора и флагов.

В Rust компилятор вообще забивает на unsafe.

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

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

Так на всякий случай замечу, что с тулчейном msvc раст медленнее часто работает, чем с гнутым тулчейном на той же винде или чем на других операционках, если на последних использовать jemalloc. Это на тот случай, если что замерить по скорости захочешь. Имей в виду!

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

Препроцессор С/С++, макросы лиспа и строковые миксины в D это довольно таки разные вещи, я даже и не знаю, что тут сказать. Определенно все-таки желательно разбираться в вещах, о которых говоришь.

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

Безопасность всего кода равна безопасности unsafe фрагмента.

Снова в школу. Если unsafe в куске, который я не вызываю, то каким образом он распространяется на всю прогу?

потенциальные уязвимости не рассыпаны по всему коду гроздьями

В том-то дело, что рассыпаны. И rust пытается локализировать, а не исправить/запретить, данный код.

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

Баг можно допустить в каждой точке кода.

С разной вероятностью.

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

Если unsafe в куске, который я не вызываю, то каким образом он распространяется на всю прогу?

Да ты гений. Можно же просто не исполнять код! Проблемы безопасности этим джентельменом решены на корню.

В том-то дело, что рассыпаны.

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

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

Ты понимаешь, что это разные вещи? Если у тебя весь код unsafe, то и на ошибки проверять нужно весь. Если же код разделен на нормальный и unsafe (абсолютное меньшинство), в котором ты говоришь компилятору, что тебе виднее, то тебе и виднее. Если я хочу отстрелить себе ногу и явно это подтверждаю, расписываясь в своем здравом уме и трезвой памяти, то, наверное, мне это зачем-нибудь да и нужно.

Твой пример, кстати, gcc -Wall -Wextra -Wpedantic -Werror компилирует без единого писка. Хотя clang, надо отдать должное, без каких-либо свитчей начинает возмущаться.

Siborgium ★★★★★
()
Последнее исправление: Siborgium (всего исправлений: 2)
Ответ на: комментарий от yetanother

Прочел https://dlang.org/articles/mixin.html

Пишут, что it has some similar properties to the C preprocessor. But there are major, fundamental differences. Прочел что за differences. Да безопасней. Но по прежнему впечатление, что можно наворотить синтаксически верного, но неадекватного кода

А если в синтаксе твоего DSL-ля ошибка, то **ись сам. Редактор и компилер ничего не подскажут

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

Никто не спорит, что есть нужно выделить 100500 объектов, то GC будет проще и быстрее. Но мы же про средний по больнице код говорим.

Ну и класс приложений, которые стартуют и сразу же умирают - довольно мал.

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

нужно сначала научиться парсить исходники

За меня исходники парсит компилятор.

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

Вообще говоря, есть arena allocator’ы. Аллоцируешь себе таким кусок памяти, потом std::mem::forget. Будет примерно то, что ты описываешь.

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

Ну я просто напомнил про underappreciated фичу сборщиков мусора - amortized O(1) new. У тебя есть гарантии освобождения памяти, но и надежда что это не произойдет, и тогда будет очень быстро. Все new будут просто bump регистра, как на стеке. А если произойдет сборка, то заплатишь скоростью, но зато не корректностью

В Java горы кода где 100500 обьектов создают в цикле, например при рисовании графики. Но они никогда не выживают дальше younggen. Очистка younggen имеет сложность пропорциональную количеству выживших объектов, а не мертвых. Потому там true O(1) new

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

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

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

Интересно, а кто-то пробовал подход вроде форкать приложение на запрос, память не освобождать, а по завершении просто завершить процесс. Мне, правда, смутно кажется, что это перекладывание работы GC на ОС, но не уверен.

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

память не освобождать, а просто завершить процесс

Так делал, например fpc довольно долгое время, на данный момент прекратил, как я знаю. Компиляторы (да и вообще программы, которые должны работать очень быстро и крайне недолго) вполне имеют резон так делать. И да, это перекладывание работы на ОС, со всеми вытекающими.

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

И че мешает сделать сафе на плюсах?

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

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

underappreciated

Недооцененную. Можно не благодарить.

В Java горы кода где 100500 обьектов создают в цикле, например при рисовании графики.

И поэтому вся графика на C++ с simd, ака Skia.

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

Да, это не новая идея. Где-то встречал мнение, что ОС может затупить и получить ООМ, если назапускали 100500 процессов. Как никак очистка памяти не мгновенная операция.

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

ждали очень давно.

Это да, но все же новые релизы очень часто выходят. Я понимаю, что новая версия выходит каждые шесть недель, но все же хочется какой-то стабильности и спокойствия…вся эта беготня, чем-то напоминает федорину беготню имхо.

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

Кстати, про джаву. Что-то болтают много про то, что котлин собрался сбить с нее корону. Безбожно врут?

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

Брешут.

0.300%

Это в пределах статистической ошибки.

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

А зачем?

В Джаве и так лямбды есть.

Народ - он не глуп, поэтому народ ленив.

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

(C)

«Принцип Авенариуса»(TM) свято соблюдается.

Ну, кроме как «энтузазистами»(C)-кульхацкерами, которые выпендриваются перед себе подобными.

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

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

TIOBE - кривой, отстающий индекс, оценивающий популярность языков тупо по количеству написнных статей в интернете. Только кто ищет и читает эти статьи? Юзай PYPL - он мониторит непосредственно поисковые запросы в гугле и отражает более реальную картину.

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

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

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

Мир, в котором питон трижды популярнее джаваскрипта

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

Давно уже сбил. Kotlin - это исправленная версия Жабы. С исправлением всех ошибок и недоработок настолько, насколько это возможно с сохранением обратной совместимости. В Котлине функции - граждане первого класса (можно передавать их в другие функции как аргументы), инвариантные массивы, неизменяемые переменные, нулл-безопасные типы, паттерн-матчинг, объекты-компаньоны, дата-классы, свойства, перегрузка операторов и много других вкусных плюшек. Жаба - это устаревший, многословный язык, к которому ФП прикручено в виде костылей. А в Котлине оно органично и локанично by design.

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

Для думания есть OCaml. Или MLton. У них достаточная производительность. От императивных языков требуется, чтобы сел и начал писать.

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