Нашри забони барномасозии Nim 1.6.0

Пас аз як соли таҳия, нашри забони барномасозии системавии Nim 1.6 нашр шуд, ки чопкунии статикиро истифода мебарад ва бо таваҷҷӯҳ ба Pascal, C++, Python ва Lisp сохта шудааст. Рамзи сарчашмаи Nim ба намояндагии C, C++ ё JavaScript тартиб дода мешавад. Баъдан, рамзи C/C++ дар натиҷа бо истифода аз ҳама гуна компилятори дастрас (clang, gcc, icc, Visual C++) ба файли иҷрошаванда тартиб дода мешавад, ки ба шумо имкон медиҳад, ки ба нишондиҳандаҳои наздик ба C ноил шавед, агар шумо хароҷоти иҷрошударо ба назар нагиред. чамъкунандаи ахлот. Монанди Python, Nim индентро ҳамчун ҷудокунандаи блок истифода мебарад. Воситаҳои метабарномасозӣ ва қобилиятҳо барои эҷоди забонҳои мушаххаси домен (DSLs) дастгирӣ карда мешаванд. Рамзи лоиҳа дар асоси иҷозатномаи MIT дода шудааст.

Тағироти назаррас дар версияи нав иборатанд аз:

  • Синфи iterable[T] бо татбиқи намуд барои итераторҳо илова карда шуд. ҷамъи шаблон[T](a: такроршаванда[T]): T = var натиҷа: T барои ai дар a: натиҷа += натиҷа тасдиқи ҷамъ (iota(3)) == 0 + 1 + 2 # ё 'iota( 3).сум'
  • Дастгирии таҷрибавӣ барои эзоҳҳои ".effectsOf" барои интихоби интихобӣ татбиқ карда шуд. вақте ки муайян карда шуд(nimHasEffectsOf): {.таҷрибавӣ: "strictEffects".} дигар: {.pragma: effectsOf.} proc mysort(s: seq; cmp: proc(a, b: T): int) {.effectsOf: cmp. }
  • Синтаксиси нави воридотӣ "import foo {.all.}" пешниҳод шудааст, ки ба шумо имкон медиҳад на танҳо рамзҳои ҷамъиятӣ, балки инчунин рамзҳои хусусиро ворид кунед. Барои дастрасӣ ба майдонҳои хусусии объектҳо, модули std/importutils ва API privateAccess илова карда шудаанд. аз системаи {.ҳама.} ҳамчун система2 воридот нест. echo system2.ThisIsSystem import os {.all.} echo weirdTarget
  • Дастгирии таҷрибавӣ барои операторҳои нуқта иловашуда, ки метавонанд барои татбиқи майдонҳои динамикӣ истифода шаванд. Шаблони import std/json '.?'(a: JsonNode, b: untyped{ident}): JsonNode = a[astToStr(b)] бигзор j = %*{“a1”: {“a2”: 10}} тасдиқ j.?a1.?a2.getInt == 10
  • Параметрҳои иловагиро дар аргументҳои блок муайян кардан мумкин аст. Шаблон fn(a = 1, b = 2, body1, body2) = партофтан fn(a = 1): bar1 do: bar2
  • Дастгирии литералҳои аз ҷониби корбар муайяншуда амалӣ карда шудааст (масалан, "-128'bignum'"). func `'big`*(шумораи: cstring): JsBigInt {.importjs: "BigInt(#)".} assert 0xffffffffffffff'big == (1'big shl 64'big) - 1'big
  • Компилятор фармони "—eval:cmd" -ро барои мустақиман иҷро кардани фармонҳои Nim аз сатри фармон амалӣ мекунад, масалан "nim —eval:"echo 1″'.
  • Дастгирии эҷоди васеъшавии шахсии шумо барои пуштибонии nimscript.
  • Паёмҳои хатогӣ барои нишон додани контексти бо хатогӣ алоқаманд хеле васеъ карда шуданд. Огоҳӣ оид ба тартибдиҳандаи фармоишӣ амалӣ карда шуд.
  • Фаъолияти коллекторҳои партовҳои "--gc:arc" ва "--gc:orc" ба таври назаррас беҳтар карда шуд.
  • Ҳама пуштибонҳо дақиқӣ ва иҷрои кодро барои таҳлили ададҳои бутун ва рақамҳои нуқтаи шинокунанда беҳтар карданд.
  • Мутобиқати беҳтаршудаи пуштибонии JS, VM ва nimscript бо модулҳое, ки қаблан танҳо бо пуштибонии C кор мекарданд (масалан, модули std/prelude). Санҷиши модулҳои stdlib бо пуштибонии C, JS ва VM таъсис дода шудааст.
  • Дастгирии иловашуда барои чипи Apple Silicon/M1, системаҳои 32-бита RISC-V, armv8l ва CROSSOS.
  • Модулҳои иловашуда std/jsbigints, std/tempfiles ва std/sysrand. Дар система, математика, тасодуфӣ, json, jsonutils, os, typetraits, wrapnils, рӯйхатҳо ва модулҳои hashes беҳбудиҳои назаррас ба даст оварда шуданд.

Манбаъ: opennet.ru

Илова Эзоҳ