ఒక సంవత్సరం అభివృద్ధి తర్వాత, సిస్టమ్ ప్రోగ్రామింగ్ లాంగ్వేజ్ Nim 1.6 విడుదల చేయబడింది, ఇది స్టాటిక్ టైపింగ్ను ఉపయోగిస్తుంది మరియు పాస్కల్, C++, పైథాన్ మరియు లిస్ప్లను దృష్టిలో ఉంచుకుని సృష్టించబడింది. నిమ్ సోర్స్ కోడ్ C, C++ లేదా JavaScript ప్రాతినిధ్యంగా కంపైల్ చేయబడింది. తదనంతరం, అందుబాటులో ఉన్న ఏదైనా కంపైలర్ (క్లాంగ్, జిసిసి, ఐసిసి, విజువల్ సి ++) ఉపయోగించి ఫలితంగా సి/సి++ కోడ్ ఎక్జిక్యూటబుల్ ఫైల్గా కంపైల్ చేయబడుతుంది, ఇది మీరు రన్నింగ్ ఖర్చులను పరిగణనలోకి తీసుకోకపోతే, సికి దగ్గరగా పనితీరును సాధించడానికి మిమ్మల్ని అనుమతిస్తుంది. చెత్త సేకరించేవాడు. పైథాన్ మాదిరిగానే, నిమ్ ఇండెంటేషన్ను బ్లాక్ డీలిమిటర్లుగా ఉపయోగిస్తుంది. డొమైన్-నిర్దిష్ట భాషలను (DSLలు) సృష్టించడానికి మెటాప్రోగ్రామింగ్ సాధనాలు మరియు సామర్థ్యాలకు మద్దతు ఉంది. ప్రాజెక్ట్ కోడ్ MIT లైసెన్స్ క్రింద అందించబడింది.
కొత్త విడుదలలో గుర్తించదగిన మార్పులు:
- పునరావృత్తులు కోసం ఒక రకం అమలుతో మళ్ళించదగిన[T] తరగతి జోడించబడింది. టెంప్లేట్ సమ్[T](a: మళ్ళించదగిన[T]): T = var ఫలితం: Aలో AI కోసం T: ఫలితం += AI ఫలితం నిర్ధారిత మొత్తం(iota(3)) == 0 + 1 + 2 # లేదా 'iota( 3).మొత్తం'
- ఎఫెక్ట్లను ఎంపిక చేయడం కోసం ".EffectsOf" ఉల్లేఖనాలకు ప్రయోగాత్మక మద్దతు జోడించబడింది. నిర్వచించినప్పుడు(nimHasEffectsOf): {.ప్రయోగాత్మకం: "స్ట్రిక్ట్ ఎఫెక్ట్స్".} else: {.pragma: effectsOf.} proc mysort(s: seq; cmp: proc(a, b: T): int) {.effectsOf: cmp. }
- కొత్త దిగుమతి సింటాక్స్ “దిగుమతి foo {.all.}” ప్రతిపాదించబడింది, ఇది పబ్లిక్ మాత్రమే కాకుండా ప్రైవేట్ చిహ్నాలను కూడా దిగుమతి చేసుకోవడానికి మిమ్మల్ని అనుమతిస్తుంది. ఆబ్జెక్ట్ల ప్రైవేట్ ఫీల్డ్లను యాక్సెస్ చేయడానికి, std/importutils మాడ్యూల్ మరియు ప్రైవేట్ యాక్సెస్ API జోడించబడ్డాయి. సిస్టమ్ {.all.} నుండి system2 దిగుమతి నిల్ echo system2. ThisIsSystem import os {.all.} echo weirdTarget
- డాట్ ఆపరేటర్లకు ప్రయోగాత్మక మద్దతు జోడించబడింది, ఇది డైనమిక్ ఫీల్డ్లను అమలు చేయడానికి ఉపయోగించబడుతుంది. దిగుమతి 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`*(num: cstring): JsBigInt {.importjs: "BigInt(#)".} 0xffffffffffff'big == (1'big shl 64'big) - 1'big
- కంపైలర్ కమాండ్ లైన్ నుండి నేరుగా Nim ఆదేశాలను అమలు చేయడానికి “—eval:cmd” ఆదేశాన్ని అమలు చేస్తుంది, ఉదాహరణకు 'nim —eval:"echo 1″".
- నిమ్స్క్రిప్ట్ బ్యాకెండ్ కోసం మీ స్వంత పొడిగింపులను సృష్టించడానికి మద్దతు అందించబడింది.
- లోపంతో అనుబంధించబడిన సందర్భాన్ని చూపడానికి ఎర్రర్ సందేశాలు బాగా విస్తరించబడ్డాయి. అనుకూల కంపైలర్ హెచ్చరికలు అమలు చేయబడ్డాయి.
- "--gc:arc" మరియు "--gc:orc" చెత్త సేకరించేవారి పనితీరు గణనీయంగా మెరుగుపడింది.
- అన్ని బ్యాకెండ్లు పూర్ణాంకాలు మరియు ఫ్లోటింగ్ పాయింట్ నంబర్లను అన్వయించడం కోసం కోడ్ యొక్క ఖచ్చితత్వం మరియు పనితీరును మెరుగుపరిచాయి.
- గతంలో C బ్యాకెండ్తో మాత్రమే పనిచేసిన మాడ్యూల్లతో JS, VM మరియు నిమ్స్క్రిప్ట్ బ్యాకెండ్ల మెరుగైన అనుకూలత (ఉదాహరణకు, std/prelude మాడ్యూల్). C, JS మరియు VM బ్యాకెండ్లతో stdlib మాడ్యూల్స్ యొక్క టెస్టింగ్ స్థాపించబడింది.
- Apple Silicon/M1 చిప్, 32-bit RISC-V, armv8l మరియు CROSSOS సిస్టమ్లకు మద్దతు జోడించబడింది.
- మాడ్యూల్స్ std/jsbigints, std/tempfiles మరియు std/sysrand జోడించబడ్డాయి. సిస్టమ్, గణితం, యాదృచ్ఛికం, json, jsonutils, os, టైప్ట్రైట్లు, ర్యాప్నిల్స్, జాబితాలు మరియు హాష్ మాడ్యూల్లకు గణనీయమైన మెరుగుదలలు చేయబడ్డాయి.
మూలం: opennet.ru