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 ()

Вышла новая версия системного языка программирования Nim

Модули для Linux на нём можно писать?

MaxPower ★★
()

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

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

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

Согласен. Растоманы - Вы можете посмотреть на примере nimа будущее rustа, когда хайп на него закончится…

anonymous
()

Интересная штука. Посмотрим.

// спасибо за шикарно оформленную новость

pihter ★★★★★
()

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

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

Статическая, но на нем ничего толком не написано.

Ps. по крайней мере я ничего не нашел.

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

Да, это как раз одна из их стратегий по продвижению языка

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

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

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

anonymous
()

А можно на этом языке сайты компелять?

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 ★★★★★
()
Ответ на: комментарий от anonymous

Превратился в монстра, в котором можно разобраться до конца только если постоянно кодить на протяжении 10-15-ти лет.

фиксед

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

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

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

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

бенчмарки от kostya конечно хорошо, но не так хороши как от vasya

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

остоянно кодить на протяжении 10-15-ти лет.

С фиксом согласен
Но и о том же «пути» раста не стоит забывать...

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

а ты на чём в основном кодишь?

anonymous
()

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 ★★★★★
()
Ответ на: комментарий от Princesska

Ну если нет планов по захвату мира, то мир он и не захватит, и будет дальше существовать для двух с половиной маргиналов)

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

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

Хахаха. Я так тоже думал лет 15 назад.

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

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

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

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

Nim вещь перспективная, но мало библиотек

Сколько человек его пилят ? А то может получиться как с Gnome

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

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

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

anonymous
()

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

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

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

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

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

Для них «два с половиной маргинала» – это не оскорбление. Люди делают язык, который им нравится, для того, чтобы писать программы для себя.

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

Наркоманы

написал растоман

anonymous
()

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

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

По синтаксису язык похож на Python

не похож

eternal_sorrow ★★★★★
()

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

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

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

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

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