Π Π΅Π»ΠΈΠ· языка программирования Nim 1.4.0

Π’Ρ‹ΡˆΠ»Π° новая вСрсия систСмного языка программирования 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.

Помимо этого Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ мноТСство ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ ΠΈ мноТСство исправлСний Π±Π°Π³ΠΎΠ².

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: linux.org.ru