Выпуск языка программирования Nim 2.2.10

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ Ρ€Π΅Π»ΠΈΠ· языка систСмного программирования Nim 2.2.10. Nim – статичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ язык программирования с синтаксисом, Π²Π΄ΠΎΡ…Π½ΠΎΠ²Π»Ρ‘Π½Π½Ρ‹ΠΌ Python, ΠΈ возмоТностями мСтапрограммирования Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Lisp. Π―Π·Ρ‹ΠΊ компилируСтся Π² C, C++ ΠΈ JavaScript, обСспСчивая ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ C ΠΏΡ€ΠΈ Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ высокоуровнСвых языков. Код ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° поставляСтся ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ MIT.

ВозмоТности Nim Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ систСму макросов, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… Π½Π° AST Π²ΠΎ врСмя компиляции, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΎΠ±ΠΎΠ±Ρ‰Ρ‘Π½Π½ΠΎΠ³ΠΎ программирования с ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ‚Π°ΠΌΠΈ, ΠΌΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ Π΄ΠΈΡΠΏΠ΅Ρ‚Ρ‡Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΡŽ (multiple dispatch), Π΄Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… стратСгий (ARC/ORC, refc, ΠΌΠ°Ρ€ΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°-ΠΈ-ΠΏΠΎΠ΄ΠΌΠ΅Ρ‚Π°Π½ΠΈΠ΅), Π²ΡΡ‚Ρ€ΠΎΠ΅Π½Π½ΡƒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ async/await для асинхронного программирования ΠΈ FFI для простой ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ с C/C++/JavaScript. Nim позиционируСтся ΠΊΠ°ΠΊ систСмный язык, подходящий для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΎΡ‚ встраиваСмых систСм Π΄ΠΎ Π²Π΅Π±-сСрвСров, с Π°ΠΊΡ†Π΅Π½Ρ‚ΠΎΠΌ Π½Π° ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ, Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ памяти ΠΈ удобство Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

ИзмСнСния Π² языкС ΠΈ компиляторС:

  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½ ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ„Π»Π°Π³ Β«β€”experimental:typeBoundOpsΒ», Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ RFC #380 ΠΈ ΠΏΠΎΠ²Ρ‹ΡˆΠ°ΡŽΡ‰ΠΈΠΉ Π½Π°Π΄Ρ‘ΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ интСрфСйсов Β«hashΒ», Β«$Β», Β«==Β» для ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΏΡ€ΠΈ нСпрямых ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°Ρ…. ΠŸΡ€ΠΈΠΌΠ΅Ρ€: import std/hashes type Obj* = object x*, y*: int z*: string proc `==`*(a, b: Obj): bool = a.x == b.x and a.y == b.y proc hash*(a: Obj): Hash = $!(hash(a.x) &! hash(a.y)) # main.nim {.experimental: Β«typeBoundOpsΒ».} from objs import Obj import std/tables var t: Table[Obj, int] t[Obj(x: 3, y: 4, z: Β«debugΒ»)] = 34 echo t[Obj(x: 3, y: 4, z: Β«ignoredΒ»)] # 34
  • Π˜ΡΠΏΡ€Π°Π²Π»Π΅Π½Π° ошибка, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Β«sizeof(T)Β» Π²Π½ΡƒΡ‚Ρ€ΠΈ шаблона Β«typedescΒ», Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΈΠ· when-выраТСния Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠ°, ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠ» ΠΊ ошибкС компиляции.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ измСнСния, Π²Π»ΠΈΡΡŽΡ‰ΠΈΠ΅ Π½Π° ΠΎΠ±Ρ€Π°Ρ‚Π½ΡƒΡŽ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ:

  • По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Π½ Ρ„Π»Π°Π³ Β«-d:nimPreviewFloatRoundtripΒ». Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Β«system.addFloatΒ» ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Β«$Β» Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Dragonbox для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… строковых прСдставлСний чисСл с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ с гарантиями ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ округлСния ΠΈ обратимости прСобразования. Для Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° ΠΊ старому повСдСнию доступСн Ρ„Π»Π°Π³ Β«-d:nimLegacySprintfΒ».
  • ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Β«defaultΒ» Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Β«tables.getOrDefaultΒ» ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ Π² Β«defΒ» Π²ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² с Β«system.defaultΒ». Код, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Β«getOrDefault(…, default = …)Β», Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ обновлСния.
  • ΠŸΡ€ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ Ρ„Π»Π°Π³Π° Β«-d:nimPreviewCheckedCloseΒ» функция Β«closeΒ» Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ Β«std/syncioΒ» Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π°.
  • НСизвСстныС прСдупрСТдСния ΠΈ подсказки компилятора Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ Β«warnUnknownNotesΒ» вмСсто ошибок.
  • Π‘ Ρ„Π»Π°Π³ΠΎΠΌ Β«-d:nimPreviewAsmSemSymbolΒ» Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°Ρ… asm/emit Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ‚ΠΈΠΏΠΎΠ² для символов Π² ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Ρ… ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°Ρ….
  • Π‘Π»ΠΎΠΊ Β«except:Β» Π±Π΅Π· указания Ρ‚ΠΈΠΏΠ° Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠ°Π½ΠΈΠΊΡƒ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Π΅ Β«DefectΒ». Для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Β«except Exception:Β» ΠΈΠ»ΠΈ Β«except Defect:Β». Для ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ прСдусмотрСн Ρ„Π»Π°Π³ Β«β€”legacy:noPanicOnExceptΒ».
  • Π‘ Ρ„Π»Π°Π³ΠΎΠΌ Β«-d:nimPreviewCStringComparisonsΒ» ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ сравнСния ({, >, {=, >=) для Β«cstringΒ» ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ с сСмантики ссылок Π½Π° сСмантику Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ Β«==Β» ΠΈ Β«!=Β».
  • ΠœΠΎΠ΄ΡƒΠ»ΡŒ std/parsesql вынСсСн Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ nimble-ΠΏΠ°ΠΊΠ΅Ρ‚; для установки трСбуСтся Β«nimble install parsesqlΒ» ΠΈΠ»ΠΈ использованиС ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π° atlas.
  • Π‘ Ρ„Π»Π°Π³ΠΎΠΌ Β«-d:nimPreviewDuplicateModuleErrorΒ» ΠΈΠΌΠΏΠΎΡ€Ρ‚ Π΄Π²ΡƒΡ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ становится ошибкой компиляции. Для Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΉ рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ алиасы: Β«import foo as foo1Β».
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° опция Β«β€”mangle:nim|cppΒ» для Π²Ρ‹Π±ΠΎΡ€Π° стиля ΠΌΠ°Π½Π³Π»ΠΈΠ½Π³Π° ΠΈΠΌΡ‘Π½ ΠΏΡ€ΠΈ Π²ΠΊΠ»ΡŽΡ‡Ρ‘Π½Π½ΠΎΠΉ ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ β€” cpp).
  • Π’Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ succ, pred, inc, dec Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ system Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Ρ‚ΠΈΠΏ Β«SomeIntegerΒ» вмСсто Β«OrdinalΒ».
  • ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Π±ΠΈΡ‚ΠΎΠ²Ρ‹Ρ… сдвигов (shl, shr, ashr) ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ Π±ΠΈΡ‚ΠΎΠ²ΡƒΡŽ маску ΠΊ ΠΏΡ€Π°Π²ΠΎΠΌΡƒ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Ρƒ Π² бэкСндах C/C++/VM/JS.
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ Β«β€”warning:ImplicitRangeConversionΒ», ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°ΡŽΡ‰Π΅Π΅ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ опасныС нСявныС прСобразования ΠΊ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°ΠΌ мСньшСго Ρ€Π°Π·ΠΌΠ΅Ρ€Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, int -> range[0..255]), способныС Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΏΠ°Π½ΠΈΠΊΡƒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния.

НововвСдСния Π² стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅:

  • Π’ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Β«setutilsΒ» Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Β«symmetricDifferenceΒ», ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Β«-+-Β» ΠΈ ΠΈΠ½Π»Π°ΠΉΠ½-вСрсия Β«toggleΒ» для эффСктивного вычислСния симмСтричСской разности Π±ΠΈΡ‚ΠΎΠ²Ρ‹Ρ… мноТСств.
  • Π’ Β«strutils.multiReplaceΒ» Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° для Π·Π°ΠΌΠ΅Π½Ρ‹ символов ΠΈΠ· Π½Π°Π±ΠΎΡ€Π° Π·Π° ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ β€” ΠΏΠΎΠ»Π΅Π·Π½ΠΎ для санитизации строк.
  • Π’ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ std/files Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ Ρ‚ΠΈΠΏΠ° Path: getFilePermissions, setFilePermissions, tryRemoveFile, copyFile (с настраиваСмым Π±ΡƒΡ„Π΅Ρ€ΠΎΠΌ ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ ссылок), copyFileWithPermissions, copyFileToDir. Экспортированы Ρ‚ΠΈΠΏΡ‹ CopyFlag ΠΈ FilePermission для Ρ‚ΠΎΠ½ΠΊΠΎΠ³ΠΎ контроля ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ.
  • ΠœΠΎΠ΄ΡƒΠ»ΡŒ std/dirs ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» Π½ΠΎΠ²Ρ‹Π΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹: copyDir ΠΈ copyDirWithPermissions для рСкурсивного копирования ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ² с сохранСниСм Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ².
  • Π’ бэкСндах refc, JS ΠΈ VM Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Β«system.setLenUninitΒ» для Ρ‚ΠΈΠΏΠ° Β«stringΒ», ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅ΠΉ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Π΄Π»ΠΈΠ½Ρƒ строки Π±Π΅Π· ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½ΠΎΠ²ΠΎΠΉ памяти ΠΏΡ€ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΈ.
  • Π’ std/parseopt Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ€Π΅ΠΆΠΈΠΌΠΎΠ² парсинга Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки Ρ‡Π΅Ρ€Π΅Π· пСрСчислСниС CliMode: Nim (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ), Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Lax ΠΈ Gnu.
  • Π’ std/math ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Β«^Β» Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ вСщСствСнныС числа Π² качСствС показатСля стСпСни.
  • Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ min, max ΠΈ ΠΈΡ… Π°Π½Π°Π»ΠΎΠ³ΠΈ ΠΈΠ· sequtils для openArray Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ сравнСния.
  • ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π° рСализация system.substr: ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ copymem (ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΊΠ° Π½Π°Π΄ C memcpy).
  • Ѐункция system.newStringUninit ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Π° ΠΊΠ°ΠΊ свободная ΠΎΡ‚ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹Ρ… эффСктов, Ρ‡Ρ‚ΠΎ позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Ρ‘ с Ρ„Π»Π°Π³ΠΎΠΌ Β«β€”experimental:strictFuncsΒ».

Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΈ докумСнтация:

  • Π’ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Ρ„Π»Π°Π³ Β«β€”rawΒ» для ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π° Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΈ Π² JSON-Π²Ρ‹Π²ΠΎΠ΄Π΅.
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½ Ρ„Π»Π°Π³ Β«β€”stdinfileΒ» для задания ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π° ΠΏΡ€ΠΈ запускС ΠΊΠΎΠ΄Π° ΠΈΠ· stdin (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ β€” stdinfile.nim).
  • Π€Π»Π°Π³ Β«β€”styleCheck:warningΒ» позволяСт Ρ‚Ρ€Π°ΠΊΡ‚ΠΎΠ²Π°Ρ‚ΡŒ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΡ стилСвых ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ ΠΊΠ°ΠΊ прСдупрСТдСния, Π° Π½Π΅ ошибки.
  • Π’ руководство Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° докумСнтация ΠΏΠΎ ΠΏΡ€Π°Π³ΠΌΠ΅ completeStruct.

Π˜ΡΠΏΡ€Π°Π²Π»Π΅Π½ΠΎ Π±ΠΎΠ»Π΅Π΅ 30 ошибок, Π² Ρ‚ΠΎΠΌ числС:

  • Ошибки Ρ€Π°Π±ΠΎΡ‚Ρ‹ new с ref object ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π° для ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ Π² массивах;
  • ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ static-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΈ typedesc;
  • РСгрСссии Π² систСмах управлСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ ORC/refc, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ nimZeroMem;
  • Ошибки парсинга Π² parseopt, parsecfg ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π° для бэкСнда JavaScript;
  • Π£Ρ‚Π΅Ρ‡ΠΊΠΈ ΠΈ падСния ΠΏΡ€ΠΈ использовании Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠΉ, ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

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

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ