Nimrod ist ein Open Source, frei, statisch typisiert, imperative Programmiersprache entwickelt, um prozedurale, objektorientierten, generischen und der funktionalen Programmierung Stile unterstützen, dabei jedoch effizient und einfach.
Nimrod in der Lage, abstrakte Syntaxbaum (AST) im Rahmen einer Spezifikation, so dass ein leistungsfähiges Makro-System, das verwendet werden kann, um domänenspezifischen Sprachen erstellen. Ein Features erbte von Lisp.
Die Software verfügt über nativen Code-Generierung, Müllabfuhr, Null-Overhead-Iteratoren, benutzerdefinierbare Betreiber, hohe Datentypen, kompilieren Zeitauswertung, vorne Kompatibilität, GTK2, Windows-API, POSIX-API-Bindungen, eine steckbare Parser-System, ein Dokumentations-Generator, und ein Pascal zu Nimrod-Konvertierungsprogramm.
Nimrod ist tragbar, was bedeutet, dass es auf Linux, BSD, Mac OS & nbsp laufen; X & nbsp; und Windows-Betriebssystemen
Was ist neu in dieser Pressemitteilung:.
- Bugfixes:
- Die alte GC nie Zyklen richtig gesammelt. Fest kann jedoch die Leistung Regressionen verursachen. Sie können jedoch den Zyklus Sammler mit GC_disableMarkAndSweep deaktivieren und führen Sie es explizit zu einem geeigneten Zeitpunkt oder überhaupt nicht. Es gibt auch eine neue GC kann mit --gc aktivieren. MarkAndSweep, das nicht das Problem ist aber langsamer im Allgemeinen und hat keine Echtzeitgarantien
- Besetzung für Fließkomma-Typen macht jetzt der Bitcast wie im Handbuch angegeben. Dies bricht Code, der irrtümlich verwendet Guss, verschiedene Gleitkomma-Werte umzuwandeln.
- Leistung SCGI Moduls hat sich stark verbessert, es wird nicht mehr auf viele gleichzeitige Anfragen zu blockieren.
- Insgesamt Fest über 70 github Themen und zusammengeführt über 60 Pull-Anforderungen.
- Bibliothek Zusätze:
- Es gibt eine neue experimentelle Marke & Sweep GC, die schneller (oder langsamer) als die Standard-GC sein kann. Aktivieren Sie mit --gc:. MarkAndSweep
- hinzugekommen system.onRaise, um eine Bedingung System zu unterstützen.
- Hinzugefügt system.locals dass der Zugang zu den Einheimischen ein proc bietet.
- Hinzugefügt macros.quote für AST quasi-Angabe.
- hinzugekommen system.unsafeNew zu hacky variabler Länge Objekte zu unterstützen.
- system.fields und system.fieldPairs Unterstützung Objekt zu; sie verwendet werden, um nur die Unterstützung Tupel.
- hinzugekommen system.CurrentSourcePath Rücksendung der vollständigen Dateisystem-Pfad des aktuellen Quelldatei.
- enthält die Makros Modul jetzt viele nützliche Helfer für den Aufbau abstrakte Syntaxbäume.
- Änderungen, die Abwärtskompatibilität:
- Shared ist ein Schlüsselwort, jetzt.
- Veraltete sockets.recvLine und asyncio.recvLine, hinzugefügt readline statt.
- Der Weg Einbuchtung im Parser wesentlich verändert abgewickelt. Allerdings betrifft dies nur sehr wenig (wenn überhaupt) realen Welt Code.
- Der Ausdruck / Erklärung der Vereinigung wurde implementiert. Auch dies wirkt sich nur auf Grenzfälle und nicht bekannt realen Welt Code.
- Changed die asynchrone Schnittstelle der scgi Modul.
- Wide nun Müll wie andere String-Typen gesammelt.
- Compiler Zusätze:
- Der Befehl doc2 keine Ausgabe für das gesamte Projekt zu generieren mehr. Verwenden Sie die neue --project Schalter, dieses Verhalten zu ermöglichen.
- Der Compiler kann jetzt warnen vor beschattet lokalen Variablen. Dies muss jedoch explizit über --warning [ShadowIdent] eingeschaltet werden:. Auf
- Der Compiler unterstützt nun fast jeder Pragma in einem Push-Pragma.
- Generische Wandler umgesetzt wurden.
- Es wurde ein höchst experimentell NOFORWARD Pragma ermöglicht einen speziellen Modus Zusammenstellung, die weitestgehend eliminiert die Notwendigkeit für Vorwärtsdeklarationen.
- Sprache Zusätze:
- Bei Ausdrücke werden nun unterstützt.
- Tabelle Bauer imitieren nun genauer die Syntax des CASE-Anweisung.
- Nimrod können nun folgern, den Rückgabetyp einer proc aus seinem Körper.
- Es wurde ein mixin Erklärung Symbol beeinflussen verbindliche Regeln in Generika.
- Exception Tracking wurde hinzugefügt, und der Befehl doc2 kommentiert möglichen Ausnahmen für Sie.
- Benutzerdefiniert Effekte (& quot; Tags & rdquo;). Tracking wurde hinzugefügt, und der Befehl doc2 kommentiert möglichen Tags für Sie
- Typen können mit der neuen Syntax nicht nil ausdrücklich betonen, dass die Null ist nicht erlaubt mit Anmerkungen versehen werden. Derzeit führt der Compiler jedoch keine fortgeschrittenen statischen Prüfung auf diese; Für jetzt ist es lediglich zu Dokumentationszwecken.
- Ein Exportrechnung ist in die Sprache aufgenommen: Es kann für die Symbol-Weiterleitung verwendet werden, damit Client-Module haben nicht zu Abhängigkeiten eines Moduls explizit importieren .
- Übersteuerung basierend auf AST wurde implementiert.
- Generics sind jetzt Multimethoden unterstützt.
- Objekte können über ein Objekt Konstruktor Ausdruck initialisiert werden.
- Es gibt eine neue syntaktische Konstrukt (;) einig Ausdrücke und Anweisungen .
- Sie können nun vom Modul Import Null verwenden, wenn Sie das Modul importieren wollen, wollen aber vollqualifizierten Zugriff auf jedes Symbol im Modul durchzusetzen.
Was ist neu in Version 0.8.14:.
- Es wurde ein ernstes Speicherfehler über Message-Passing
- ein ernster Fehler wurde behoben, über verschiedene Instanzen eines generischen proc.
- eine neu eingeführte Fehler, bei dem eine falsche EIO Ausnahme wurde für das Ende der Datei für Textdateien, die nicht mit einem Zeilenumbruch enden angehoben wurde behoben.
- Bugfix c2nim, c2pas: die --out Option hat nie richtig funktioniert .
- Bugfix:. Weiterleitung von generischen Procs nie funktioniert
- Einige weitere Fehlerkorrekturen für Makros und Compiler-Auswertung.
- Die GC berücksichtigt nun Innen Zeiger auf dem Stack, der durch aggressive C Optimierer eingeführt werden können.
- Nimrod Heimat Allocator / GC funktioniert jetzt auch auf PowerPC.
- Viele weitere Bugfixes:. Zu viele, um sie alle aufzuzählen
Was ist neu in Version 0.8.6:
- Bugfixes:
- Die Pragmas andeuten [X]: Ausschalten und Warn [X]: ab jetzt arbeiten .
- Methodenaufruf Syntax für Iteratoren funktioniert wieder (für x in lines.split ()).
- Es wurde ein Tippfehler in RemoveDir für POSIX, die zu einer Endlosschleife führen.
- Der Compiler überprüft nun, dass die Dateinamen-Modul sind gültige Bezeichner.
- Leere Muster für den dynlib Pragma sind jetzt möglich.
- os.parseCmdLine zurück falschen Ergebnissen für nachfolgende Leerzeichen.
- inkonsequente Tupel Nutzung (mit der gleichen Tupel mit und ohne Namensfelder) nicht den Code-Generator mehr zum Absturz bringen.
- ein Fehlermeldung vorgesehen ist, wenn das Laden eines in einem dynamischen proc lib ausfällt.
- Zusätze:
- Hinzugefügt system.contains für offene Arrays.
- Die PEG-Modul unterstützt nun die Suchschleife Operator @.
- Grammatik / Parser: SAD | IND vor jeder Art von Schließbügel erlaubt. Dies ermöglicht eine flexible Quellcode Formatierung.
- Der Compiler verwendet jetzt eine bind-Tabelle für Aktiensuche in einer Zwickmühle Kontext. (Siehe manual.html # Vorlagen für weitere Einzelheiten.)
- Ablage & quot; & quot; & quot; meine langen Kommentar & quot; & quot; & quot; ist nun weg optimiert.
- New --floatChecks: on | off Schalter und Pragmas für bessere Debugging von Gleitkomma-Operationen. (Siehe manual.html # vordefiniert-Floating-Point-Typen für Details.)
- Das Handbuch wurde verbessert. (Vielen Dank an Philippe Lhoste!)
- Änderungen, die Abwärtskompatibilität:
- Der Compiler nicht den Vernetzungsschritt mehr überspringen, auch wenn keine Datei geändert hat.
- os.splitFile (& quot; .xyz & quot;) gibt jetzt (& quot; & quot ;, & quot; .xyz & rdquo ;, & quot; & quot;) anstelle von (& quot; & quot ;, & quot; & quot ;, & quot; .xyz & quot; ). Dateinamen mit einem Punkt unterschiedlich behandelt.
- strutils.split (s: string, seps: set [char]) nie ergibt die leere Zeichenkette mehr. Dieses Verhalten ist wahrscheinlich mehr für Leer Spaltung geeignet.
- Der Compiler bleibt nun nach dem --version Befehlszeilenoption.
- Entfernte Unterstützung für ENUM-Erbe im Parser; Enum Erbe hat sowieso nie dokumentiert worden.
- Die msg Bereich system.E_base hat jetzt den Typ string statt cstring. Dies verbessert das Gedächtnis Sicherheit.
Was ist neu in Version 0.8.2:
- Bugfixes:
- Passing --hint [X]: off oder --warning [X]:. Off als Kommandozeilenargument an den Compiler funktioniert jetzt
- Standardparameter für die Vorlagen jetzt funktionieren.
- Feste Sicherheitsproblem in system.copy.
- String Fall ohne einen anderen Teil erzeugt falschen Code.
- Verschiedene Fehlerbehebungen für das osproc Modul; es funktioniert jetzt auch unter Windows.
- Zusätze:
- Implementiert Multimethoden.
- Der Compiler erkennt nun die Anzahl der verfügbaren Prozessoren und führt den C-Compiler gleichzeitig. Dies kann durch die --parallel_build eingestellt werden:. NUMBER_OF_PROCESSORS Befehlszeilenoption
- PEG-basierte Mustererkennung über die Zapfen-Modul.
- hinzugekommen system.definedInScope.
- hinzugekommen system.accumulateResult.
- hinzugekommen os.walkDirRec.
- Hinzugefügt osproc.countProcessors.
- hinzugekommen osproc.execProcesses.
- Das Konfigurationssystem unterstützt jetzt $ cc.options.linker.
- Zusammengeführt expr und TYPEDESC in der Grammatik / Parser:. Dies wird für anonyme Procs ohne Lambda erlauben
- Viele Skripte haben keine Notwendigkeit für eine GC: Die neue --gc: keine Befehlszeilenoption können Sie den GC aus der ausführbaren auszuschließen .
- Änderungen, die rückwärts Kompatibilität:
- Unter der Adresse eines Objekts Diskriminanzanalyse ist jetzt ungültig.
- Die Übergabe eines proc zu einem proc var ist nur für Procs mit procvar oder einer Aufrufkonvention! = Nimcall markiert erlaubt. Denn jetzt dieses verursacht nur eine Warnung, aber dies wird in einen Fehler schnell zu machen.
- System. & Und system.add erhalten nun Openarray statt seq-Parameter.
- Entfernt strutils.findSubStr und strutils.findChars. Sie haben 3-Versionen als veraltet.
- verwendet die Unicode-Modul einen bestimmten Typ für TRune.
- Veraltete strutils.toString: Verwenden Sie statt $ .
- Veraltete os.splitPath:. Verwendung os.splitPath, die ein Tupel statt zurück
- Veraltete os.extractDir:. Verwenden Splitfile (Pfad) .dir statt
- Veraltete os.splitFilename: Verwenden Sie statt Splitfile .
- Veraltete os.extractFileExt: Verwenden Sie statt Splitfile .
- Veraltete os.extractFileTrunk: Verwenden Sie statt Splitfile .
- Veraltete os.appendFileExt: Verwenden os.addFileExt statt .
- Veraltete os.executeShellCommand: Verwenden os.execShellCmd statt .
- Veraltete os.iterOverEnvironment:. Verwendung os.envPairs statt
- Veraltete parseopt.init: Verwenden parseopt.initOptParser statt .
- Veraltete parseopt.getRestOfCommandLine: Verwenden parseopt.cmdLineRest statt .
- Veraltete os.pcDirectory: Verwenden os.pcDir statt .
- Veraltete os.pcLinkToDirectory: Verwenden os.pcLinkToDir statt .
- Veraltete osproc.executeProcess: Verwenden osproc.execProcess statt .
- Veraltete osproc.executeCommand: Verwenden osproc.execCmd statt .
Was ist neu in Version 0.8.0:
- Bugfixes:
- einen kleinen Fehler, die der Compiler nicht verwendeten Symbole nicht überlastet zu berichten, wurde behoben
- Fest ein kleiner Fehler bezüglich Symbol Überlastung
- Ein Tippfehler: es ist & quot; & quot ;, eindeutig nicht & quot; mehrdeutige & quot; ; -)
- Der Compiler erkennt nun rekursive Include-Dateien
- system.card sollte wieder funktionieren
- Elemente für Satz [char] und array [char, T] sollte jetzt funktionieren
- Zusätze:
- implementiert generische Typen und zwei Phase-Symbol Suche in generischen Routinen
- Template-Parameter können nun echte Typen
- implementiert generali rohen Zeichenfolgenliteralen: Ident & quot; abc & quot; ist eine Abkürzung für ident (r & quot; abc & quot;)
- in Überlastung Auflösung Iteratoren aus Procs getrennt; Iteratoren jetzt können den gleichen Namen + Signatur als Procs haben
- Symbol Suche in Vorlagen können durch die neue Binde Stichwort beeinflusst werden
- Der Compiler unterstützt jetzt die --no_main Schalter für bessere Verknüpfung Interoperabilität mit anderen kompilierten Sprachen
- implementiert Tupel Auspacken in var Abschnitte
- der Code-Generator abgibt Standard: __assume (0); für Visual C ++ (für Optimierung)
- Der Compiler überprüft nun, ob ein proc hat Nebenwirkungen; Procs, die deklariert sind keine Nebenwirkungen haben werden zurückgewiesen, wenn der Compiler nicht diese überprüfen
- die Format Betreiber strutils.% Unterstützt jetzt $ # für die automatische Abzählargument
- implementiert strutils.join
- Änderungen, die rückwärts Kompatibilität:
- Zwei-Phasen-Symbol Lookup wird in generischen Routinen ausgeführt
- bind ist jetzt ein reserviertes Wort; Ausnahme ist kein reservierte Wort mehr
- abstrakte Typen, um verschiedene Typen umbenannt; so deutliche ist jetzt ein reserviertes Wort; abstrakte kein reserviertes Wort mehr
- system.openFile veraltet: Einsatz anstelle system.open
- system.closeFile veraltet: Verwendung system.close statt
- strutils.replaceStr veraltet: Verwendung strutils.replace statt
- strutils.deleteStr veraltet: Verwendung strutils.delete statt
- strutils.splitSeq veraltet: Verwendung strutils.split statt
- strutils.splitLinesSeq veraltet: Verwendung strutils.splitLines statt
- strutils.parseFloat keine zusätzliche Startparameter mehr entgegengenommen werden
- Dokumentation:
- das Handbuch wurde verbessert
Was ist neu in Version 0.7.6:
- Bugfixes:
- Installation auf Windows Vista kann nun aus der Box zu arbeiten; Bitte versuchen Sie es!
- Ein Fehler wurde behoben, der die & quot gehalten; rekursive Module & quot; Beispiel aus der Arbeit
- Mischen benannten und unbenannten Parameter in einer Prozedur-Aufruf funktioniert jetzt
- Oktalzahlen mit dem Präfix 0c werden nun korrekt unterstützt
- Aufzählungen jetzt kann mit negativen Werten starten
- parseInt, ParseBiggestInt jetzt eine Ausnahme, wenn der String nicht nach der Zahl analysiert Ende
- Der Compiler geht jetzt korrekt mit Top-Level-Anweisungen
- erzeugt nimcache Verzeichnis endet nie mit einem Schrägstrich
- CreateDir arbeitet jetzt für die globale Verzeichnisse unter UNIX (& quot; / somepath / hier & quot;)
- Der Compiler führt jetzt die ausführbare Datei mit einer führenden & quot; ./& quot; unter UNIX
- Der Compiler unterstützt nun konstante Arrays von Prozedurzeiger
- elif in case-Anweisungen arbeitet jetzt
- Iteratoren über eine offene Array-Parameter jetzt funktionieren
- Ein Fehler wurde behoben, wo in manchen Kontexten $ MyEnum hat nicht funktioniert
Was ist neu in Version 0.7.4:
- Installation unter Windows sollte jetzt funktionieren, wenn das Verzeichnis enthält, Plätze
- die Dokumentation Generator nur noch macht Dokumentationskommentare
- `` `` ist für Betreiber erlaubt, wie das Handbuch sagt
- in seltenen Fällen die Indexprüfung hat sich optimiert, auch wenn es nötig gewesen wäre
- mehrere Fehlerbehebungen für Tupel Typen
- Mehr eine `` unicode`` Modul für UTF-8 Umgang mit
- hinzugefügt Hostos und hostCPU Magie auf den `` system`` Modul
- system.echo akzeptiert nun mehrere Argumente
- hinzugefügt Optimierung: in einigen Fällen Inlining von Iteratoren produziert nun wesentlich besser Code
- Mehr ganze Programm Beseitigung von totem Code
- die Magie `` `Betreiber arbeitet jetzt für Aufzählungen
- in `` const`` Abschnitten voran kompilieren Zeitauswertung geschieht
- umbenannt `` in_Operator`` zu `` contains``: `` in`` ist nun eine Vorlage, die zu `` contains`` übersetzt
- geändert `` strutils.quoteIfSpaceExists`` zu `` strutils.quoteIfContainsWhite``
- der Parser ist jetzt viel mehr wählerisch Missings Kommas, etc. Wenn dies auf Ihren Code zu viel, versuchen, Ihren Code durch das hübsche Drucker ausgeführt werden.
- die `` macros`` API ist nicht mehr Teil des `` system`` Modul, um diese API verwenden, müssen Sie nun die `` macros`` Modul importieren
- hat ein Tutorial
Was ist neu in Version 0.7.2:
- Dies ist ein Bugfix-Release. Das wichtigste ist, dass Nimrod Fix funktioniert nun wieder auf AMD64 (x86_64) Prozessoren.
- keine neuen Funktionen wurden implementiert.
Was ist neu in Version 0.7.0:
- diverse Bugfixes, zu viele, um sie hier aufzulisten
- die Installation für UNIX-basierte Systeme nicht von Python hängen mehr
- die `` koch.py`` Skript arbeitet jetzt mit älteren Python-Versionen (einschließlich 1.5.2)
- geändert Integer-Operationen und Konvertierungen Regeln
- hinzugefügt `` und `` GC_ref`` GC_unref`` Procs
- Sequenzen müssen jetzt mit der `` @ `` Betreiber aufgebaut werden. Dies führt zu weniger Mehrdeutigkeiten.
- Der Compiler verwendet nun weniger Speicher und ist viel schneller
- Die GC ist jetzt viel schneller
- neue Bindungen: zlib, SDL, Xlib, OpenGL, ODBC, Lua
- die erzeugte C-Code ist viel schneller, mit GCC optimieren
- neuen Bibliotheken: Bäche, ZIP-Dateien
- die Nimrod Compiler hat nach FreeBSD portiert worden: es sollte funktionieren auf anderen BSDs zu
Anforderungen :
- Python
Kommentare nicht gefunden