Nimrod is een open source, gratis, statisch getypeerde, imperatief programmeertaal ontworpen om procedurele, object-georiënteerde, generieke en functioneel programmeren stijlen te ondersteunen, terwijl de resterende efficiënt en eenvoudig.
Nimrod kan abstract syntaxboom (AST) als onderdeel van een specificatie, waardoor een krachtig macro systeem dat kan worden gebruikt om domeinspecifieke talen creëren. Een eigenschappen geërfd van Lisp.
De software is voorzien van native code generatie, garbage collection, zero-overhead iterators, gebruiksvriendelijke defineable exploitanten, hoog niveau datatypes, tijd evaluatie, vooruit compatibiliteit, GTK2, Windows API, POSIX API bindingen, een plugable parser-systeem, een documentatie generator compileren en een Pascal om Nimrod conversie utility.
Nimrod is draagbaar, wat betekent dat het kan draaien op Linux, BSD, Mac OS & nbsp; X & nbsp; en Windows-besturingssystemen
Wat is nieuw in deze release:.
- Bugfixes:
- De oude GC nooit correct verzameld cycli. Vaste maar kan Prestatievermindering veroorzaken. Maar u kunt de cyclus collector met GC_disableMarkAndSweep deactiveren en voer het expliciet op een geschikt moment of helemaal niet. Er is ook een nieuw GC kan activeren met --gc. MarkAndSweep die dit probleem niet heeft, maar langzamer in het algemeen en heeft geen realtime waarborgen
- cast voor floating point types doet nu de bitcast zoals vermeld in de handleiding. Dit breekt code die foutief gebruikt cast om verschillende floating point waarden te zetten.
- de prestaties SCGI module's is sterk verbeterd, zal het niet langer te blokkeren op vele gelijktijdige aanvragen.
- In totaal vast meer dan 70 GitHub kwesties en fuseerde op 60 pull verzoeken.
- Bibliotheek Toevoeging:
- Er is een nieuwe experimentele mark & sweep GC die sneller (of veel langzamer) dan de standaard GC kan zijn. Inschakelen met --gc:. MarkAndSweep
- Toegevoegd system.onRaise om een aandoening te ondersteunen.
- Toegevoegd system.locals dat de toegang tot de lokale bevolking een proc's biedt.
- Toegevoegd macros.quote voor AST quasi-citeren.
- Toegevoegd system.unsafeNew naar hacky variabele lengte objecten te ondersteunen.
- system.fields en system.fieldPairs object ondersteuning ook; ze vroeger alleen ondersteuning tupels.
- Toegevoegd system.CurrentSourcePath retourneren van de volledige file-systeem pad van de huidige bronbestand.
- De macro-module bevat nu veel nuttige helpers voor het opbouwen van abstracte syntax bomen.
- veranderingen die de backwards compatibility:
- gedeeld is nu een trefwoord.
- Gedeprecieerde sockets.recvLine en asyncio.recvLine, voegde readLine plaats.
- De manier inspringen wordt behandeld in de parser sterk veranderd. Echter, dit beïnvloedt zeer weinig (of geen) werkelijkheid code.
- De uitdrukking / verklaring eenwording is geïmplementeerd. Ook dit heeft alleen effect op de rand gevallen en voor zover bekend geen echte wereld code.
- Veranderde de asynchrone interface van de scgi module.
- WideStrings nu opgeschoond net als andere vormen string.
- Compiler Toevoeging:
- De doc2 commando niet-uitgang voor het hele project niet meer te genereren. Gebruik de nieuwe --project schakelaar om dit gedrag mogelijk te maken.
- De compiler kan nu waarschuwen geschaduwd lokale variabelen. Echter, dit moet worden ingeschakeld expliciet via --warning [ShadowIdent]:. Op
- De compiler ondersteunt nu bijna elke Pragma in een push pragma.
- Generic converters zijn geïmplementeerd.
- Voegde een zeer experimenteel noforward pragma waardoor een speciale compilatie modus die grotendeels elimineert de noodzaak voor voorwaartse verklaringen.
- Taal Toevoeging:
- Bij uitdrukkingen worden nu ondersteund.
- Tabel constructeurs nu na te bootsen nauwer de syntaxis van de case statement.
- Nimrod kunnen nu concluderen de return type van een proc van zijn lichaam.
- Voegde een mixin verklaring te beïnvloeden symbool bindende regels in generieke geneesmiddelen.
- Uitzondering volgen is toegevoegd en de doc2 commando annoteert mogelijke uitzonderingen voor u.
- de gebruiker gedefinieerde effecten (& quot; markeringen & quot;). Volgen is toegevoegd en de doc2 commando annoteert mogelijke tags voor u
- Soorten kunnen worden geannoteerd met de nieuwe syntaxis niet nihil expliciet te vermelden dat nihil is niet toegestaan. Echter op dit moment de compiler voert geen geavanceerde statische controle op dit; voor nu is het alleen maar voor documentatie doeleinden.
- De export verklaring is toegevoegd aan de taal: Het kan worden gebruikt voor het symbool doorsturen zodat client modules niet hoeven te afhankelijkheden van een module expliciet importeren .
- Overbelasting op basis van AST is geïmplementeerd.
- Generics worden nu ondersteund voor multi methoden.
- Objecten kunnen worden geïnitialiseerd via een object constructeur expressie.
- Er is een nieuwe syntactische construct (;) verenigende uitdrukkingen en uitspraken .
- U kunt nu gebruik maken van de module import nihil als je wilt om de module te importeren, maar u wilt volledig gekwalificeerde toegang tot elk symbool in module af te dwingen.
Wat is nieuw in versie 0.8.14:.
- Vast een ernstige geheugen corruptie met betrekking tot het doorgeven van berichten
- Vast een serieuze bug met betrekking tot verschillende concretiseringen van een generieke proc.
- Vast een pas ingevoerde bug waar een verkeerde EIO uitzondering werd opgehaald voor het einde van het bestand voor tekst bestanden die niet eindigen met een nieuwe regel.
- Bugfix c2nim, c2pas: de --out optie heeft nooit goed gewerkt .
- Bugfix:. Toezending van generieke procs nooit gewerkt
- Wat meer bugfixes voor macro's en compileren-time evaluatie.
- De GC houdt thans rekening met het interieur wijzers op de stapel die door agressieve C optimizers kan worden ingevoerd.
- inheemse verdeler Nimrod's / GC werkt nu op PowerPC.
- Veel andere bugfixes:. Te veel om op te noemen
Wat is nieuw in versie 0.8.6:
- Bugfixes:
- De pragma hint [X]: uit en waarschuwing [X]: off werken nu .
- Methode aanroepsyntaxis iteratoren werkt weer (voor x in lines.split ()).
- Vast een typfout in removeDir voor POSIX die leiden tot een oneindige recursie.
- De compiler controleert nu dat module bestandsnamen zijn geldig id's.
- Lege patronen voor de dynlib pragma zijn nu mogelijk.
- os.parseCmdLine teruggekeerd verkeerde resultaten voor volgwitruimte.
- inconsequent tupel gebruik (met dezelfde tupel met en zonder de naam velden) werkt de code generator niet meer crashen.
- Een betere foutmelding wordt verstrekt wanneer het laden van een proc binnen een dynamische lib mislukt.
- Toevoeging:
- Toegevoegd system.contains voor open-arrays.
- De PEG-module ondersteunt nu de zoektocht lus operator @.
- Lagere / parser: SAD | IND is toegestaan vóór elke vorm van het sluiten van de beugel. Dit maakt meer flexibele broncode formating.
- De compiler maakt nu gebruik van een binden tafel voor symbool lookup binnen een binden context. (Zie manual.html # sjablonen voor meer informatie.)
- discard & quot; & quot; & quot; mijn lange reactie & quot; & quot; & quot; is nu weg geoptimaliseerd.
- Nieuwe --floatChecks: on | off schakelaars en pragma voor een betere debuggen van floating point operaties. (Zie manual.html # vooraf gedefinieerde-floating-point-types voor meer informatie.)
- De handleiding is verbeterd. (Met dank aan Philippe Lhoste!)
- veranderingen die de backwards compatibility:
- De compiler niet de koppeling stap meer over te slaan, zelfs als er geen bestand is veranderd.
- os.splitFile (& quot; .xyz & quot;) geeft nu (& quot; & quot ;, & quot; .xyz & quot ;, & quot; & quot;) in plaats van (& quot; & quot ;, & quot; & quot ;, & quot; .xyz & quot; ). Bestandsnamen die beginnen met een punt worden verschillend behandeld.
- strutils.split (s: string, seps: set [char]) geeft nooit de lege string meer. Dit gedrag is waarschijnlijk meer geschikt voor witruimte splitsen.
- De compiler stopt nu na de --version command line switch.
- Removed ondersteuning voor enum erfenis in de parser; enum erfenis is nooit toch gedocumenteerd.
- De msg gebied van system.E_base heeft nu de string type, in plaats van CString. Dit verbetert het geheugen veiligheid.
Wat is nieuw in versie 0.8.2:
- Bugfixes:
- Passen --hint [X]: uit of --warning [X]:. Off zo werkt command line argumenten aan de compiler nu
- Standaard parameters voor sjablonen nu moeten werken.
- Vaste beveiligingsprobleem in system.copy.
- String geval zonder het andere deel gegenereerd verkeerde code.
- Diverse fixes voor de osproc module; het werkt nu op Windows.
- Toevoeging:
- Implementatie van meerdere methoden.
- De compiler herkent nu het aantal beschikbare processoren en voert de C compiler gelijktijdig. Dit kan worden aangepast door de --parallel_build:. NUMBER_OF_PROCESSORS command line switch
- PEG-gebaseerde patroonovereenkomsten via de haringen module.
- Toegevoegd system.definedInScope.
- Toegevoegd system.accumulateResult.
- Toegevoegd os.walkDirRec.
- Toegevoegd osproc.countProcessors.
- Toegevoegd osproc.execProcesses.
- De configuratie systeem ondersteunt nu $ cc.options.linker.
- Samengevoegd expr en typeDesc in de grammatica / parser:. Dit zal zorgen voor anonieme procs zonder lambda
- Veel scripts hebben geen behoefte aan een GC: De nieuwe --gc: geen command line switch kan gebruikt worden om de GC van de executable te sluiten .
- veranderingen die invloed hebben backward compatibility:
- Het nemen van het adres van een object discriminant is nu ongeldig.
- Passing een proc naar een proc var is alleen toegestaan voor procs gemarkeerd met procvar of een roeping conventie! = Nimcall. Voor nu dit veroorzaakt alleen een waarschuwing, maar dit zal veranderen in een fout snel.
- systeem. & En system.add ontvangen nu openArray in plaats van volgende parameters.
- Verwijderd strutils.findSubStr en strutils.findChars. Ze zijn afgekeurd voor 3 versies.
- De unicode-module maakt gebruik van een apart type voor TRune.
- Deprecated strutils.toString: in plaats daarvan gebruik $ .
- Deprecated os.splitPath:. Gebruik os.splitPath dat een tupel terugkeert in plaats
- Deprecated os.extractDir:. Gebruik SplitFile (pad) .dir plaats
- Deprecated os.splitFilename: gebruik SplitFile plaats .
- Deprecated os.extractFileExt: gebruik SplitFile plaats .
- Deprecated os.extractFileTrunk: gebruik SplitFile plaats .
- Deprecated os.appendFileExt: gebruik os.addFileExt plaats .
- Deprecated os.executeShellCommand: gebruik os.execShellCmd plaats .
- Deprecated os.iterOverEnvironment:. Gebruik os.envPairs plaats
- Afgekeurd parseopt.init: gebruik parseopt.initOptParser plaats .
- Deprecated parseopt.getRestOfCommandLine: gebruik parseopt.cmdLineRest plaats .
- Deprecated os.pcDirectory: gebruik os.pcDir plaats .
- Deprecated os.pcLinkToDirectory: gebruik os.pcLinkToDir plaats .
- Deprecated osproc.executeProcess: gebruik osproc.execProcess plaats .
- Deprecated osproc.executeCommand: gebruik osproc.execCmd plaats .
Wat is nieuw in versie 0.8.0:
- Bugfixes:
- vast een kleine bug die ervoor zorgde dat de compiler niet ongebruikte overladen symbolen melden
- een kleine bug met betrekking tot symbool overbelasting vast
- vast een typefout: het is & quot; dubbelzinnige & quot ;, niet & quot; ambigious & quot; ; -)
- de compiler herkent nu recursieve include bestanden
- system.card moet weer aan het werk
- artikelen voor de set [char] en de vele [char, T] zou nu moeten werken
- Toevoeging:
- geïmplementeerd algemene soorten en twee fase symbool lookup in generieke routines
- template parameters kunnen nu echte types
- geïmplementeerd gegeneraliseerde ruwe letterlijke tekenreeksen: ident & quot; abc & quot; is een snelkoppeling voor ident (r & quot; abc & quot;)
- in overbelasting resolutie iteratoren gescheiden zijn van ontwerp en bouw; iteratoren kunnen nu dezelfde naam + handtekening als procs hebben
- symbool lookup in sjablonen kunnen worden beïnvloed door de nieuwe bind trefwoord
- de compiler accepteert nu een --no_main schakelaar voor een betere koppeling interoperabiliteit met andere gecompileerde talen
- geïmplementeerd tupel uitpakken in var secties
- de code generator zendt standaard: __assume (0); voor Visual C ++ (voor optimalisatie)
- de compiler controleert nu als een proc heeft bijwerkingen; procs die worden verklaard geen bijwerkingen hebben, worden afgewezen als de compiler dit niet kan verifiëren
- de indeling exploitant strutils.% Ondersteunt nu $ # voor automatische argument tellen
- geïmplementeerd strutils.join
- veranderingen die invloed hebben backward compatibility:
- twee fasesymbool lookup wordt uitgevoerd in generieke routines
- bind is nu een gereserveerd woord; uitzondering is geen gereserveerd woord meer
- abstracte vormen zijn hernoemd naar verschillende types; Zo onderscheiden is nu een gereserveerd woord; abstract is geen gereserveerd woord meer
- system.openFile Deprecated: gebruik in plaats system.open
- system.closeFile deprecated: gebruik system.close plaats
- strutils.replaceStr deprecated: gebruik strutils.replace plaats
- strutils.deleteStr deprecated: gebruik strutils.delete plaats
- strutils.splitSeq deprecated: gebruik strutils.split plaats
- strutils.splitLinesSeq deprecated: gebruik strutils.splitLines plaats
- strutils.parseFloat niet een extra start parameter meer aanvaarden
- Documentatie:
- de handleiding is verbeterd
Wat is nieuw in versie 0.7.6:
- Bugfixes:
- installatie op Windows Vista kan nu werken uit de doos; probeer!
- vast een bug die de & quot gehouden; recursieve modules & quot; voorbeeld van het werken
- mengen genoemd en niet nader genoemde parameters in een procedure call werkt nu
- octale getallen met het voorvoegsel 0C worden nu correct ondersteund
- opsommingen nu kunnen beginnen met negatieve waarden
- parseInt, ParseBiggestInt nu een uitzondering indien de string eindigt niet na de ontleed nummer
- de compiler behandelt nu het hoogste niveau verklaringen correct
- gegenereerd nimcache directory nooit eindigt in een schuine streep
- CreateDir werkt nu voor wereldwijde directories onder UNIX (& quot; / somepath / hier & quot;)
- de compiler voert nu het uitvoerbare bestand met een leidende & quot; ./& quot; onder UNIX
- de compiler ondersteunt nu constant arrays van orde pointers
- Elif in geval verklaringen werkt nu
- iteratoren behulp van een open arrayparameter werken nu
- een fout gerepareerd waar in sommige contexten $ MyEnum werkte niet
Wat is nieuw in versie 0.7.4:
- installatie op Windows zou nu moeten werken als de directory bevat ruimtes
- de documentatie generator nu slechts renders documentatie reacties
- `` `` is toegestaan voor operators zoals de handleiding zegt
- In zeldzame gevallen, de index controle is weg geoptimaliseerd, ook al is het noodzakelijk zou zijn geweest
- een aantal bug fixes voor types tuple
- voegde een `` unicode`` module voor UTF-8 hanteren
- Hostos en hostCPU magics toegevoegd aan de `` system`` module
- system.echo accepteert nu meerdere argumenten
- toegevoegd optimalisatie: in sommige gevallen inlining van iteratoren produceert nu aanzienlijk beter code
- toegevoegd hele programma dode code eliminatie
- de magie `` `operator werkt nu voor opsommingen
- in `` const`` secties geavanceerde compileren evaluatie wordt gedaan
- de naam `` in_Operator`` op `` contains``: `` in`` is nu een sjabloon dat vertaalt naar `` contains``
- veranderd `` strutils.quoteIfSpaceExists`` op `` strutils.quoteIfContainsWhite``
- de parser is nu veel meer kieskeurig over missings komma's, enz. Als dit van invloed op uw code te veel, probeer je code uit te voeren door het mooie printer.
- de `` macros`` API is niet langer deel uit van de `` system`` module, om deze API gebruiken heb je nu de `` macros`` module importeren
- toegevoegd een tutorial
Wat is nieuw in versie 0.7.2:
- Dit is een bugfix release. Deze belangrijkste oplossing is dat Nimrod werkt nu weer op AMD64 (x86_64) processors.
- Geen nieuwe functies zijn geïmplementeerd.
Wat is nieuw in versie 0.7.0:
- diverse bug fixes, te veel om ze hier
- de installatie voor UNIX-systemen niet afhankelijk Python langer
- de `` koch.py`` script werkt nu met oudere Python versies (inclusief 1.5.2)
- veranderd integer operaties en conversies regels
- toegevoegd `` GC_ref`` en `` GC_unref`` procs
- sequenties moeten nu worden gebouwd met de `` @ `` operator. Dit leidt tot minder dubbelzinnigheden.
- de compiler gebruikt nu minder geheugen en is veel sneller
- de GC is nu veel sneller
- nieuwe bindingen: zlib, SDL, Xlib, OpenGL, ODBC, Lua
- de gegenereerde C-code is veel sneller te optimaliseren met GCC
- nieuwe bibliotheken: beken, zipfiles
- heeft de Nimrod compiler is geporteerd naar FreeBSD: het zou moeten werken op andere BSD's ook
Eisen
- Python
Reacties niet gevonden