LINUX.ORG.RU

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

 , ,


0

6

Вышла новая версия системного языка программирования Nim, которому в этом сентябре исполнился год с момента выхода первой стабильной версии. По синтаксису язык похож на Python, а по производительности почти как C++. Согласно FAQ язык во многом заимствует из (в порядке весомости вклада): Modula 3, Delphi, Ada, C++, Python, Lisp, Oberon.

Работает везде благодаря возможности компиляции в С/C++/Objective-C/JS. В нём поддерживаются макросы, ООП, дженерики, исключения, горячая замена кода и многое другое. Лицензия - MIT.

Наиболее значительные изменения:

  • Появился новый сборщик мусора ORC, использующий алгоритм из ARC, но при этом специальным образом обрабатывающий циклические ссылки. Включается опцией --gc:orc. О различиях ARC/ORC есть отличная статья.

  • Добавлен режим строгих определений функций, при котором включается дополнительная проверка на мутабельность объектов. Активируется через прагму {.experimental: "strictFuncs".} или через ключ --experimental:strictFuncs.

  • Ключевое слово from теперь может быть использовано как оператор.

  • Добавлена прагма .noalias. Она сопоставляется с ключевым словом C restrict, чтобы повысить эффективность, которую может обеспечить это слово.

  • Конкретные предупреждения теперь можно превратить в ошибки через --warningAsError[X]:on|off.

  • Новая команда: nim r main.nim [args...], которая компилирует и запускает main.nim, и включает --usenimcache так, что результат сохраняется в $nimcache/main$exeExt, используя ту же логику что и nim c -r для избавления от перекомпиляции, когда исходники не изменились. Пример:

nim r compiler/nim.nim --help # скомпилирован в первый раз
echo 'import os; echo getCurrentCompilerExe()' | nim r - # это тоже работает
nim r compiler/nim.nim --fullhelp # без перекомпиляции
nim r --nimcache:/tmp main # бинарник сохранён в /tmp/main
  • Добавлена новая подсказка --hint:msgOrigin, которая покажет где компилятор сгенерировал сообщения об ошибках/предупреждения. Это помогает, когда неочевидно откуда пришло сообщение.

  • Добавлен флаг --backend:js|c|cpp|objc (или -b:js и т.д.) для смены бэкенда.

  • Добавлен флаг --usenimcache для вывода бинарников в nimcache.

  • Удалены ключи: --oldNewlines, --laxStrings, --oldast, --oldgensym

  • Утилита nimsuggest теперь показывает не только предварительное объявление, но и расположение реализации по запросу def.

Помимо этого добавлено множество изменений в стандартную библиотеку и множество исправлений багов.

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

anonymous

Проверено: Shaman007 ()

Добавлена прагма .noalias. Она сопоставляется с ключевым словом C restrict, чтобы повысить эффективность, которую может обеспечить это слово.

Переведите на русский, кто-нибудь.

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

Не совсем понял у кого нет альтернатив?
У Раста есть один жирный недостаток - в него до сих пор пихают всё что только можно. С++ - это один из примеров. Превратился в монстра, в котором можно разобраться до конца только если постоянно кодить на протяжении 2-3х лет.
nim - более менее стабилен, «успокоился уже», но где он??? Где достаточно большие и отлаженные проекты на rust или nim, что бы о них можно было говорить. Go и то быстрее взлетел (не без помощи гиганта с большим кол-вом нулей, естественно)

С++ держит только дикая база ПО, уже нарисованная ещё тогда, когда он был строен, молод и хорош собой. Появись он пять лет назад в том виде как c++17 или c++20 - послали бы его серьёзные программеры куда подальше.

anonymous ()

Появился новый сборщик мусора ORC, использующий алгоритм из ARC, но при этом специальным образом обрабатывающий циклические ссылки.

Это все очень мило, но сдается мне, что если у авторов нет ресурсов, чтобы сделать GC хотя бы уровня Java’овского G1GC, то закончится это так же плохо, как в Go: https://blog.plan99.net/modern-garbage-collection-911ef4f8bd8e и продолжение: https://blog.plan99.net/modern-garbage-collection-part-2-1c88847abcfd TL;DR: в Go пожертвовали всеми характеристиками только ради низкого времени пауз (а в результате сделали GC, который не дотягивает до старого Java’вского CMS). А потом и получается, что из-за «чудо-GC» разработчики переписывают код с Go на Rust: https://blog.discord.com/why-discord-is-switching-from-go-to-rust-a190bbca2b1f … Вот. Поэтому, перспективы Nim как языка с GC, но не крутящегося на JVM, как по мне, очень сомнительны.

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

На Opennet говорят, что Nim царь язык, на уровне С++/Rust, куда какой-то Java до него, и бенчи приводят: https://github.com/kostya/benchmarks

https://imgur.com/a/7th4Z7d

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

Modula 3, Delphi, Ada, C++, Python, Lisp, Oberon.

А что хорошего можно в 2020 году взять из этих языков? Имхо, из этих языков только «работу над ошибками» можно сделать и НЕ делать в будущих языках той дичи, что сделали в них в своё время. Впрочем, спасибо, что не JavaScript.

Alve ★★★★★ ()

Разрабы Nim’а решили собрать названия всех ЯП у себя, чтобы привлечь на свою сторону адептов, перечисленных язычков. Какая жалкая потуга.

anonymous ()

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

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

Princesska ★★ ()
Ответ на: комментарий от X-Pilot
  1. Nim можно прикрутить к JVM, если какому-то извращённому безумцу это захочется. Пока – таких не нашлось.

  2. Nim позволяет выбрать GC при сборке, и их там много

Memory ManagementHeapReference CyclesStop-The-WorldCommand line switch
RefCLocalCycle CollectorNo--gc:refc
Mark & SweepLocalCycle CollectorNo--gc:markAndSweep
ARCSharedLeakNo--gc:arc
ORCSharedCycle CollectorNo--gc:orc
BoehmSharedCycle CollectorYes--gc:boehm
GoSharedCycle CollectorYes--gc:go
NoneManualManualManual--gc:none
  1. JVM – over-engineered fat eldritch monster
timdorohin ★★★ ()
Ответ на: комментарий от anonymous

А зачОтный анон попался...
Классический «хейтер» на «хайп»
Хотелось бы от него увидеть нечто общее не только в «словоблудии» между этими языками. Слабо ему предоставить пруфы, сравнительные таблички и т.п. Не про скорость работы, а про возможности языка как инструмента.

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

С++ держит только дикая база ПО, уже нарисованная ещё тогда, когда он был строен, молод и хорош собой

Я после 7 последних лет плотного использования C#, когда временами приходится возвращаться на C++ - начинаю думать, что он никогда не был хорош: в те стародавние времена когда в C++ ещё современных фич небыло, для написания прикладного ПО он был ненамного лучше обычного C, ИМХО

DawnCaster ()
Последнее исправление: DawnCaster (всего исправлений: 1)
Ответ на: комментарий от X-Pilot

Поэтому, перспективы Nim как языка с GC, но не крутящегося на JVM, как по мне, очень сомнительны.

Да, GC это ахиллесова пята всех самоделкиных. Написать транслятор задача не слишком сложная, а вот эффективный сборщик это уже дело серьезное. Без этого всё будет адски тормозить и течь на реальных задачах, что и происходит с наколенными язычками.

anonymous ()

После компиляции или запуска программы на данной версии, у меня в директории с исходником стала появляться пустая директория «pkgs». В гугле ничего насчет этого не нашел. Для чего эта директория нужна?

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

Какая там типизация? Если статическая, может взлететь и похоронить Python с его type-hint костылями.

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

ya-betmen ★★★★★ ()

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

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

и еще не нашел обычного async, нашел только специфичные (file, http, net, streams итд), не нашел future (promise?), не понятно как делать межпоточную коммуникацию типа кутишных сигналов/слотов.

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

в котором можно разобраться до конца только если постоянно кодить на протяжении 2-3х лет.

Конечно возможно что я тупой, но ты ахренеть какой оптимист :))

anonymous ()