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 натыйжасы: ai үчүн T: натыйжа += ai натыйжасы сумманы ырастоо(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 модулу жана privateAccess API кошулду. системадан {.all.} система2 катары импорттоо жок жаңырыгы система2.ThisIsSystem импорттоо os {.all.} echo weirdTarget
  • Динамикалык талааларды ишке ашыруу үчүн колдонула турган чекит операторлору үчүн эксперименталдык колдоо кошулду. import std/json үлгүсү '.?'(a: JsonNode, b: типсиз{ident}): JsonNode = a[astToStr(b)] let 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
  • Компилятор Nim буйруктарын буйрук сабынан түз иштетүү үчүн “—eval:cmd” буйругун ишке ашырат, мисалы “nim —eval:”echo 1″‘.
  • Nimscript backend үчүн өзүңүздүн кеңейтүүлөрүңүздү түзүүгө колдоо көрсөтүлдү.
  • Ката билдирүүлөрү ката менен байланышкан контекстти көрсөтүү үчүн абдан кеңейтилген. Ыңгайлаштырылган компилятордун эскертүүлөрү ишке ашырылды.
  • "--gc:arc" жана "--gc:orc" таштанды жыйноочулардын иштеши кыйла жакшырды.
  • Бардык backends бүтүн сандарды жана калкыма чекиттерди талдоо үчүн коддун тактыгын жана иштешин жакшыртышты.
  • JS, VM жана nimscript бэкендтеринин мурда C сервери менен гана иштеген модулдар менен жакшыртылган шайкештиги (мисалы, std/prelude модулу). C, JS жана VM серверлери менен stdlib модулдарын тестирлөө белгиленген.
  • Apple Silicon/M1 чипине, 32-бит RISC-V, armv8l жана CROSSOS системаларына колдоо кошулду.
  • std/jsbigints, std/tempfiles жана std/sysrand модулдары кошулду. Математика, random, json, jsonutils, os, typetraits, wrapnils, тизмелер жана хэштер модулдарына олуттуу жакшыртуулар киргизилди.

Source: opennet.ru

Комментарий кошуу