Nimrod är en öppen källkod, fri, statiskt skrivit, imperativ programmeringsspråk utformat för att stödja procedur, objektorienterat, generiska och funktionella programmerings stilar, samtidigt som den är effektiv och enkel.
Nimrod kan abstrakt syntaxträd (AST) som del av en specifikation, vilket tillåter en kraftfull makrosystem som kan användas för att skapa domän specifika språk. A funktioner ärvt från Lisp.
Programvaran har inbyggd kod generation, sophämtning, noll-overhead iteratorer, användar definierbara operatörer, hög nivå datatyper, sammanställa tid utvärdering, framåt kompabilitet, GTK2, Windows API, POSIX API bindningar, ett instickbara parser-system, en dokumentation generator, och en Pascal till Nimrod konverteringsverktyget.
Nimrod är portabel, vilket innebär att den kan köras på Linux, BSD, Mac OS & nbsp; X & nbsp; och Windows operativsystem
Vad är nytt i den här versionen:.
- Buggfixar:
- Den gamla GC aldrig samlats cykler korrekt. Fast men det kan orsaka prestanda regressioner. Men du kan avaktivera cykelsamlaren med GC_disableMarkAndSweep och köra det uttryckligen vid en lämplig tidpunkt eller inte alls. Det finns också en ny GC du kan aktivera med --gc:. MarkAndSweep som inte har detta problem, men är långsammare i allmänhet och har inga realtid garantier
- gjuten för flyttalstyper gör nu bitcast som anges i bruksanvisningen. Detta bryter kod som felaktigt använder gjuten för att konvertera olika flyttalsvärden.
- scgi modulens prestanda har förbättrats avsevärt, kommer det inte längre blockera många samtidiga förfrågningar.
- I totala fasta över 70 github frågor och fusione över 60 pull önskemål.
- Bibliotek Tillägg:
- Det finns en ny experimentell varumärke & svep GC som kan vara snabbare (eller mycket långsammare) än standard GC. Aktivera med --gc:. MarkAndSweep
- Lade system.onRaise att stödja ett villkor system.
- Lades system.locals som ger tillgång till en proc s lokalbefolkningen.
- Inkom macros.quote för AST kvasi-citerar.
- Lade system.unsafeNew att stödja hacky variabel längd objekt.
- system.fields och system.fieldPairs stöd objekt också; de brukade bara stöd tupler.
- Lade system.CurrentSourcePath returnera hela filsystem sökvägen för den aktuella källfilen.
- makron Modulen innehåller nu massor av användbara hjälpare för att bygga upp abstrakta syntaxträd.
- Förändringar som påverkar bakåtkompatibilitet:
- delad är ett nyckelord nu.
- Deprecated sockets.recvLine och asyncio.recvLine, tillade readline istället.
- Hur indrag hanteras i tolken förändrats avsevärt. Dock påverkar detta mycket lite (om någon) verkliga världen koden.
- Uttrycket / uttalande enande har genomförts. Även detta påverkar endast kantfall och ingen känd verkliga världen koden.
- Ändrat async gränssnitt på scgi modulen.
- WideStrings nu sopor samlas liksom andra typer sträng.
- Compiler Tillägg:
- doc2 kommandot inte genererar utdata för hela projektet längre. Använd den nya --project knapp för att aktivera detta beteende.
- Kompilatorn kan nu varna för skuggade lokala variabler. Men måste detta vara påslagen explicit via --warning [ShadowIdent]:. På
- Kompilatorn stöder nu nästan varje pragma i en push pragma.
- Generic omvandlare har genomförts.
- Lade till en mycket experimentell EJVIDAREBEFORDRAN pragma möjliggör en särskild sammanställning läge som i stort sett eliminerar behovet av termins deklarationer.
- Språk Tillägg:
- falluttryck stöds nu.
- Tabell konstruktörer härma nu närmare syntaxen av fallet uttalande.
- Nimrod kan nu sluta returtypen för en proc från dess kropp.
- Lade till en mixin deklaration att påverka symbolen bindande regler i generika.
- Undantag spårning har lagts och kommandot doc2 annotates eventuella undantag för dig.
- Användar definierade effekter (& quot; taggar & quot;). Spårning har lagts och kommandot doc2 annotates möjliga taggar för dig
- Typer kan förses med den nya syntaxen inte noll att uttryckligen ange att noll är inte tillåtet. Men för närvarande kompilatorn utför ingen avancerad statisk kontroll för detta; för nu är det bara för dokumentation.
- Ett export uttalande har lagts till språket: Det kan användas för symbol vidarekoppling så klientmoduler slipper importera en modulens beroenden explicit .
- Överbelastning utifrån AST har genomförts.
- Generics stöds nu för flera metoder.
- Objekt kan initieras via ett objekt konstruktören uttryck.
- Det finns en ny syntaktisk konstruktion (;) förenande uttryck och uttalanden .
- Du kan nu använda från modul import noll om du vill importera modulen men vill genomdriva fullt kvalificerad tillgång till varje symbol i modulen.
Vad är nytt i version 0.8.14:.
- Fixat en allvarlig minneskorruption om meddelande passerar
- Fixat en allvarlig bugg om olika instansieringar av generisk proc.
- Fixat nyligen införda fel där fel EIO undantag höjdes i slutet av filen för textfiler som inte slutar med en ny rad.
- Buggfix c2nim, c2pas: den --out alternativet har aldrig fungerat korrekt .
- Buggfix:. Vidarebefordring av generiska PROC aldrig fungerat
- Några fler buggfixar för makron och kompilering utvärdering.
- GC tar nu hänsyn till inrednings pekare på stacken som kan införas av aggressiva C optimerare.
- Nimrod hemland allokeraren / GC fungerar nu på PowerPC.
- Massor av andra buggfixar. För många att räkna upp dem alla
Vad är nytt i version 0.8.6:
- Buggfixar:
- De pragmas antyda [X]: av och varning [X]: off nu arbeta li>.
- Metod samtals syntax för iteratorer fungerar igen (för x i lines.split ()).
- Fixat ett stavfel i removeDir för POSIX som leder till en oändlig rekursion.
- Kompilatorn kontrollerar nu att modul filnamnen är giltiga identifierare.
- Tomma mönster för dynlib pragma är nu möjligt.
- os.parseCmdLine gav fel resultat för avslutande blank.
- inkonsekvent tupel användning (med samma tabellrad med och utan namngivna områden) inte krascha koden generatorn längre.
- En bättre felmeddelande ges när lastningen av ett proc inom en dynamisk lib misslyckas.
- Tillägg:
- Lades system.contains för öppna arrayer.
- PEG-modulen stöder nu sökandet slingoperatören @.
- Grammatik / parser: SAD | IND tillåts innan någon form av stängning fäste. Detta möjliggör en mer flexibel källkod formatering.
- Kompilatorn nu använder en binda bord för symboluppslag inom en binda sammanhang. (Se manual.html # mallar för detaljer.)
- kasse & quot; & quot; & quot; min långa kommentar & quot; & quot; & quot; Nu optimerat bort.
- Nya --floatChecks: På | off switchar och pragmas för bättre felsökning av flyttalsoperationer. (Se manual.html # fördefinierade-flyttal typer för detaljer.)
- Manualen har förbättrats. (Stort tack till Philippe Lhoste!)
- Förändringar som påverkar bakåtkompatibilitet:
- Kompilatorn inte hoppa över länka steget längre, även om ingen fil har ändrats.
- os.splitFile (& quot; .xyz & quot;) nu återvänder (& quot; & quot ;, & quot; .xyz & quot ;, & quot; & quot;) istället för (& quot; & quot ;, & quot; & quot ;, & quot; .xyz & quot; ). Filnamn som börjar med en punkt hanteras på olika sätt.
- strutils.split (s: sträng, SEPS: set [char]) aldrig ger den tomma strängen längre. Detta beteende är förmodligen lämpligare för blank klyvning.
- Kompilatorn stoppar nu efter --version kommandorad switch.
- Removed stöd för enum arvedel i parser; enum arv har aldrig dokumenterats i alla fall.
- msg fält system.E_base har nu typen sträng, istället för cstring. Detta förbättrar minnessäkerheten.
Vad är nytt i version 0.8.2:
- Buggfixar:
- Passing --hint [X]: off eller --warning [X]:. Off som kommandoradsargument till kompilatorn fungerar nu
- Standardparametrar för mallar fungerar nu.
- Fixat säkerhetsproblem i system.copy.
- String fall utan en annan del genererat fel kod.
- Diverse fixar för osproc modulen; det fungerar nu i Windows.
- Tillägg:
- Genomförda flera metoder.
- Kompilatorn känner nu antalet tillgängliga processorer och exekverar C-kompilator samtidigt. Detta kan justeras genom --parallel_build:. Number_of_processors kommandoradsväxel
- PEG-baserade mönstermatchning via peggar modulen.
- Lade system.definedInScope.
- Lade system.accumulateResult.
- Lade os.walkDirRec.
- Lades osproc.countProcessors.
- Lade osproc.execProcesses.
- Konfigurations Systemet stödjer nu $ cc.options.linker.
- Sammanslagen expr och typeDesc i grammatiken / parser:. Detta gör det möjligt för anonyma PROC utan lambda
- Många manus har inget behov av en GC: Den nya --gc: none kommandorad switch kan användas för att utesluta GC från körbara .
- Förändringar som påverkar bakåt kompabilitet:
- Att ta adressen av ett objekt diskriminantanalys är nu ogiltig.
- Passing en proc till en proc var är endast tillåtet för PROC markerade med procvar eller en kallelse konvention! = Nimcall. För nu detta endast orsakar en varning, men detta kommer att förvandlas till ett fel snart.
- systemet. & Och system.add nu emot openArray istället för seq parametrar.
- Bort strutils.findSubStr och strutils.findChars. De har föråldrat i 3 versioner.
- unicode Modulen använder en distinkt typ för TRune.
- Deprecated strutils.toString: använd $ istället .
- Deprecated os.splitPath:. Användning os.splitPath som returnerar en tupel istället
- Deprecated os.extractDir:. Använd Splitfile (väg) .dir istället
- Deprecated os.splitFilename: använd Splitfile istället .
- Deprecated os.extractFileExt: använd Splitfile istället .
- Deprecated os.extractFileTrunk: använd Splitfile istället .
- Deprecated os.appendFileExt: använd os.addFileExt istället .
- Deprecated os.executeShellCommand: använd os.execShellCmd istället .
- Deprecated os.iterOverEnvironment:. Använd os.envPairs istället
- Deprecated parseopt.init: använd parseopt.initOptParser istället .
- Deprecated parseopt.getRestOfCommandLine: använd parseopt.cmdLineRest istället .
- Deprecated os.pcDirectory: använd os.pcDir istället .
- Deprecated os.pcLinkToDirectory: använd os.pcLinkToDir istället .
- Deprecated osproc.executeProcess: använd osproc.execProcess istället .
- Deprecated osproc.executeCommand: använd osproc.execCmd istället .
Vad är nytt i version 0.8.0:
- Buggfixar:
- fast en liten bugg som orsakade kompilatorn att inte rapportera oanvända belastade symboler
- fast en liten bugg om symbolen överbelastning
- fast ett stavfel: det är & quot; tvetydig & quot ;, inte & quot; ambigious & quot; ; -)
- kompilatorn upptäcker nu rekursiva inkluderar filer
- system.card bör fungera igen
- poster för set [char] och array [char, T] bör fungera nu
- Tillägg:
- förda generiska typer och två fas symbol lookup på generiska rutiner
- mallparametrar kan nu vara riktiga typer
- genomfört gener rå stränglitteraler: ident & quot; abc & quot; är en genväg för ident (r & quot; abc & quot;)
- i överbelastning upplösning iteratorer är separerade från procs; iteratorer nu kan ha samma namn + underskrift som PROC
- symboluppslag mallar kan påverkas av den nya bind sökord
- kompilatorn accepterar nu en --no_main omkopplare för bättre koppling interoperabilitet med andra kompilerade språk
- genomfört tupel uppackning i Var sektioner
- kodgeneratorn avger default: __assume (0); för Visual C ++ (för optimering)
- kompilatorn kontrollerar nu om en proc har biverkningar; PROC som deklareras ha några biverkningar avvisas om kompilatorn inte kan verifiera detta li>
- operatören format strutils.% Stöder nu $ # för automatisk argumentet räkning
- genomfört strutils.join
- Förändringar som påverkar bakåt kompabilitet:
- tvåfas symboluppslag utförs i generiska rutiner
- bind är nu ett reserverat ord; Undantaget är inget reserverat ord längre
- abstrakta typer har bytt namn till olika typer; alltså distinkt är nu ett reserverat ord; abstract finns ingen reserverat ord längre
- system.openFile Deprecated: Användning system.open istället
- system.closeFile föråldrat: Användning system.close istället
- strutils.replaceStr föråldrat: Användning strutils.replace istället
- strutils.deleteStr föråldrat: Användning strutils.delete istället
- strutils.splitSeq föråldrat: Användning strutils.split istället
- strutils.splitLinesSeq föråldrat: använd strutils.splitLines istället
- strutils.parseFloat accepterar inte ett extra startparameter längre
- Dokumentation:
- handboken har förbättrats
Vad är nytt i version 0.7.6:
- Buggfixar:
- installation på Windows Vista kan nu arbeta ur lådan; försök!
- fixat en bugg som höll & quot; rekursiva moduler & quot; exempel från arbets
- blanda namngivna och icke namngivna parametrar i en procedur samtal fungerar nu
- oktala tal med prefixet 0c nu ordentligt stöd
- uppräkningar nu kan börja med negativa värden
- parseInt, ParseBiggestInt nu kasta ett undantag om strängen inte slutar efter analyserad nummer
- kompilatorn hanterar nu toppnivå uttalanden korrekt
- genererade nimcache katalogen aldrig slutar i ett snedstreck
- createDir arbetar nu för globala kataloger under UNIX (& quot; / somepath / här & quot;)
- kompilatorn utför nu den körbara med en ledande & quot; ./& quot; under UNIX
- kompilatorn stöder nu konstant arrayer av förfarande pekare
- elif i fall uttalanden fungerar nu
- iteratorer som använder en öppen array parameter nu arbeta li>
- fixat en bugg där i vissa sammanhang $ myEnum inte fungerade
Vad är nytt i version 0.7.4:
- installation på Windows bör fungera nu om katalogen innehåller utrymmen
- den dokumentation generator nu bara gör dokumentation kommentarer
- `` `` är tillåtet för operatörer som manualen säger
- i sällsynta fall, indexkontrollen har optimerats bort, även om det skulle ha varit nödvändigt
- flera buggfixar för tupel typer
- lagt en `` unicode`` modul för UTF-8 hantering
- tillade Hostos och hostCPU magics till `` system`` modul
- Nu accepterar system.echo flera argument
- tillade optimering: i vissa fall inlining av iteratorer nu producerar betydligt bättre kod
- lagt hela programmet döda eliminering koden
- magin `` `operatören arbetar nu för uppräkningar
- i `` const`` sektioner avancerad sammanställa tid utvärdering görs
- omdöpt `` in_Operator`` till `` contains``: `` in`` är nu en mall som översätter till `` contains``
- förändrats `` strutils.quoteIfSpaceExists`` till `` strutils.quoteIfContainsWhite``
- tolken är nu mycket mer kräsen om missings kommatecken, etc. Om detta påverkar din kod för mycket, försöker köra din kod genom den vackra skrivare.
- den `` macros`` API är inte längre en del av `` system`` modul, för att använda denna API har du nu importera `` macros`` modul
- lagt en tutorial
Vad är nytt i version 0.7.2:
- Detta är en buggfix release. Detta viktigaste fix är att Nimrod fungerar nu igen på AMD64 (x86_64) processorer.
- Inga nya funktioner har genomförts.
Vad är nytt i version 0.7.0:
- diverse buggfixar, för många för att räkna upp dem här
- installation för UNIX-baserade system beror inte på Python längre
- den `` koch.py`` manus fungerar nu med äldre Python-version (inklusive 1.5.2)
- bytt heltal verksamhet och omvandlingar regler
- lagt `` GC_ref`` och `` GC_unref`` PROC
- sekvenser måste nu byggas med `` @ `` operatör. Detta leder till mindre oklarheter.
- kompilatorn använder nu mindre minne och är mycket snabbare
- GC är nu mycket snabbare
- nya bindningar: zlib, SDL, Xlib, OpenGL, ODBC, Lua
- den genererade C-kod är mycket snabbare att optimera med GCC
- nya bibliotek: bäckar, zipfiles
- för Nimrod kompilatorn har portats till FreeBSD: det bör fungera på andra BSD är för
Krav :
- Python
Kommentarer hittades inte