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

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

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

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

Е-ть какой винегрет

Это любой язык пишет, что на него повлияла дохрена языков, из которых он взял лучшее.

Вот что пишется про Rust:

Influenced by
Alef, C#, C++, Cyclone, Erlang, Haskell,Limbo, Newsqueak, OCaml, Ruby, Scheme, Standard ML, Swift

а вот, например, Swift:

Influenced by
Objective-C, Rust, Haskell, Ruby, Python, C#, CLU, D

или дело не в количестве, а в конкретном наборе языков?

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

А как обстоят дела с отладкой кода? Поделитесь реальным опытом. Ведь если нимовский код был транслирован в плюсовый и затем собран, то отладочные символы же плюсовые будут. Как это выглядит на практике?

yetanother ()

Давайте вместо сабжа пиарить Crystal. Хоть языки и не похожи, однако область применения, как мне кажется, одна и та же. И как язык Crystal гораздо удобнее современному кодеру.

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

Вот что пишется про Rust

Так оно и видно, что это такой борщ. Представьте себе суп, куда настрогали вместе с капустой еще десяток экзотических овощей и фруктов. Но некоторым нравится.

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

crystal нигде кроме веба не пытаются применять

Ну его классно в олимпиадах применять и мелких числодробительных тулзах аля перебор шмота в ММО для оптимизации статов

q0tw4 ★★★★ ()

Мне кажется, или 2/3 галиматьи в новости относятся сугубо к тем, кто УЖЕ использует язык и не интересно ни разу в качестве новости для новичков!?

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

Oberon, Delphi, Ada, Modula 3 и в значительной степени Python — прямые потомки Паскаля. Тут всё как раз весьма и весьма естественно. Что они взяли из ЦПП и Лиспа мне сложно сказать, может быть метапрограммирование и шаблоны.

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

на бумаге язык то прикольный, но год за годом всё не видно интересных проектов на нём

по-моему, только какой-то игровой движок

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

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

Тут многие похоже не знают, но с Nim сотрудничает компания Status, и они пилят опен-сорс Ethereum 1.0 и 2.0 клиенты на Nim - https://nimbus.team/

https://github.com/status-im/nimbus-eth1

https://github.com/status-im/nimbus-eth2

Ещё можно заметить http://nitter.net/ (пусть и не супер большой проект, но тоже хорошо)

А так можно ещё посмотреть https://github.com/nim-lang/Nim/wiki/Organizations-using-Nim

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

Ну не стоит такое говорить перед изучением темы :) У Nim’а до ARC/ORC был (и сейчас остаётся основным) refc - отложенный подсчёт ссылок с mark & sweep для циклов - и он сам по себе уже очень быстрый и проверен годами (не шутка). Но он не очень подходит для embedded и т.д (soft realtime, а так же он делает скан стека для подсчёта ссылок), так что вообще Nim переходит к более детерминированным способам работы с памятью

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

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

Если сам пишешь, то никто тебя не заставляет использовать абсолютно все фичи языка. Используй то, что понимаешь.

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

У Nim’а до ARC/ORC был (и сейчас остаётся основным) refc - отложенный подсчёт ссылок с mark & sweep для циклов - и он сам по себе уже очень быстрый и проверен годами (не шутка).

«На каких объемах памяти?» «Какая была пауза при его работе?» «Как часто он запускался?» и т.д. Лучше бы вы взяли и ответили на вопросы из таблички «A primer on GC theory» в первом посте, ссылку на который я привел выше.

P.S. «очень быстрый» - это плохая характеристика, хочется конкретики

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

У Раста есть один жирный недостаток - в него до сих пор пихают всё что только можно.

Например? Ну кроме асинков и то их ненужными не назовёшь. Я бы наоборот сказал, что скорее многое из «обещанного» пилится слишком медленно.

Ну и есть ли вообще пример живого и развивающегося языка в который не «пихают всё что только можно»? Даже консервативная джава и то неслабо фичами обрастает в последнее время.

DarkEld3r ★★★★★ ()