Бір жылдық дамудан кейін Nim 1.6 жүйелік бағдарламалау тілі шығарылды. Ол статикалық теруді пайдаланады және Pascal, C++, Python және Lisp тілдерін ескере отырып жасалған. Nim бастапқы коды C, C++ немесе JavaScript тілдерінде құрастырылған. Содан кейін алынған C/C++ коды қоқыс жинау құнын қоспағанда, C деңгейіне жақын өнімділікке қол жеткізе отырып, кез келген қол жетімді компилятордың (clang, gcc, icc, Visual C++) көмегімен орындалатын файлға құрастырылады. Python сияқты, Nim шегіністерді блок бөлгіштер ретінде пайдаланады. Метабағдарламалау құралдары мен доменге тән тілдерді (DSL) жасауға арналған мүмкіндіктерге қолдау көрсетіледі. Жоба коды MIT лицензиясы бойынша лицензияланған.
Жаңа шығарылымдағы елеулі өзгерістер мыналарды қамтиды:
- Итераторлар үшін типті енгізуі бар қайталанатын [T] класы қосылды. шаблон сомасы[T](a: қайталанатын[T]): T = var нәтиже: a ішіндегі ai үшін T: нәтиже += ai нәтиже қосындысын растау(iota(3)) == 0 + 1 + 2 # немесе 'iota(3).sum'
- Әсерлерді таңдап қолдану үшін ".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 ретінде импорттау нөл echo system2.ThisIsSystem импорттау os {.all.} echo weirdTarget
- Динамикалық өрістерді іске асыру үшін пайдалануға болатын нүктелік операторларға эксперименттік қолдау қосылды. import std/json үлгісі '.?'(a: JsonNode, b: типтелмеген{ident}): JsonNode = a[astToStr(b)] let j = %*{"a1": {"a2": 10}} assert j.?a1.?a2.getInt == 10
- Блоктық аргументтерде қосымша параметрлерге рұқсат етіледі. шаблон fn(a = 1, b = 2, body1, body2) = лақтыру fn(a = 1): bar1 істеу: bar2
- Пайдаланушы анықтайтын литералдарға қолдау енгізілді (мысалы, "-128'bignum'"). func `'big`*(num: cstring): JsBigInt {.importjs: "BigInt(#)".} assert 0xffffffffffffffffff'big == (1'big shl 64'big) - 1'big
- Компилятор Nim пәрмендерін пәрмен жолынан тікелей іске қосу үшін "--eval:cmd" пәрменін жүзеге асырады, мысалы, 'nim --eval:"echo 1"'.
- Nimscript сервері үшін теңшелетін кеңейтімдерді жасау үшін қолдау көрсетілді.
- Қате туралы хабарлар қатеге қатысты мәтінмәнді қамту үшін айтарлықтай кеңейтілді. Конфигурацияланатын компилятор ескертулері енгізілді.
- "--gc:arc" және "--gc:orc" қоқыс жинағыштарының өнімділігі айтарлықтай жақсарды.
- Бүтін және өзгермелі нүктелік талдау кодының дәлдігі мен өнімділігі барлық серверлерде жақсартылды.
- 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, тізімдер және хэштер модульдеріне айтарлықтай жақсартулар жасалды.
Ақпарат көзі: opennet.ru
