Samen7 - Seed7
Paradigma | Multiparadigma : erweiterbar , objektorientiert , zwingend , strukturiert , generisch , reflektierend |
---|---|
Entworfen von | Thomas Mertes |
Erstmals erschienen | 2005 |
Stabile Version | 2021-08-07 / vor 69 Tagen |
Schreibdisziplin | statisch , stark , sicher , nominativ , manifest |
Betriebssystem | Plattformübergreifend : BSD , Linux , OS X , Unix , Windows |
Lizenz | GPL , LGPL (für die Laufzeitbibliothek) |
Dateinamenerweiterungen | .sd7, .s7i |
Webseite | Seed7 |
Wichtige Implementierungen | |
Open-Source- Referenzimplementierung | |
Beeinflusst von | |
Pascal , Modula-2 , Ada , ALGOL 68 , C , C++ , Java |
Seed7 ist eine erweiterbare universelle Programmiersprache, die von Thomas Mertes entwickelt wurde. Es ist syntaktisch ähnlich wie Pascal und Ada . Zusammen mit vielen anderen Funktionen bietet es einen Erweiterungsmechanismus. Seed7 unterstützt die Einführung neuer Syntaxelemente und ihrer Semantik in die Sprache und ermöglicht die Definition und das Schreiben neuer Sprachkonstrukte in Seed7. Programmierer können beispielsweise Syntax und Semantik neuer Anweisungen und benutzerdefinierter Operatorsymbole einführen . Die Implementierung von Seed7 unterscheidet sich deutlich von der von Sprachen mit hartcodierter Syntax und Semantik.
Merkmale
Seed7 unterstützt die Programmierparadigmen : imperative , objektorientierte (OO) und generische . Es unterstützt auch Funktionen wie Call by Name , Multiple Dispatching , Funktionsüberladung , Operatorüberladung , Ausnahmebehandlung und Arithmetik mit beliebiger Genauigkeit .
Zu den wichtigsten Funktionen gehören:
- Benutzerdefinierte Anweisungen und Operatoren
- Abstrakte Datentypen
- Vorlagen ohne spezielle Syntax
- Objektorientiert mit Schnittstellen und Mehrfachversand
- Statische Eingabe
- Darf interpretiert oder kompiliert werden
- Portabilität des Quellcodes
- Läuft unter BSD , Linux , Mac OS X , Unix , Windows
Mehrere Programmiersprachenkonzepte werden verallgemeinert:
- Typdeklarationen (die einem Typ einen Namen zuweisen) und Funktionsdefinitionen haben die Form von Konstantendefinitionen.
- Ausdrücke zur Kompilierzeit können benutzerdefinierte Funktionen ausführen.
- Überlastung und Objektorientierung (bei mehrfachem Versand) werden als gängige Konzepte angesehen. Sie treten einfach zu unterschiedlichen Zeiten auf: Kompilierzeit bzw. Laufzeit .
- Als Parameter- und Funktionsergebnis können Typnamen und Typbeschreibungen verwendet werden .
- Funktionen, die zur Kompilierzeit ausgeführt werden , können zum Definieren von Objekten verwendet werden.
- Vorlagen werden als Kompilierzeitfunktionen mit Typparametern geschrieben.
- Arrays , Hash - Karten und structs sind keine hartcodierte Funktion. Stattdessen werden sie in Bibliotheken als abstrakter Datentyp definiert .
- Parser und Interpreter sind Bestandteil der Laufzeitbibliothek.
- UTF-32- Unicode-Unterstützung. Dadurch werden Probleme mit Codierungen mit variabler Länge wie UTF-8 und UTF-16 vermieden .
Das Seed7-Projekt enthält sowohl einen Interpreter als auch einen Compiler . Der Interpreter startet Programme sehr schnell, was eine schnelle Programmentwicklung unterstützt. Der Compiler verwendet die Parser- und Reflection- Schnittstellen aus der Laufzeitbibliothek, um ein C- Programm zu generieren , das anschließend in Maschinencode kompiliert wird . Kompilierte Seed7-Programme können eine vergleichbare Leistung wie C-Programme aufweisen.
Bibliotheken
Seed7 verfügt über viele Bibliotheken, die Bereiche wie Container , numerische Funktionen, lexikalische Analyse , Dateimanipulation, Netzwerke ( Sockets , Transport Layer Security (TLS/SSL), Hypertext Transfer Protocol (HTTP), HTTP Secure ( HTTPS ), File Transfer Protocol (FTP )) abdecken ), Simple Mail Transfer Protocol (SMTP), etc.), Grafiken , pixmap und Vektor - Fonts , datenbankunabhängige API , Common Gateway Interface (CGI) Unterstützung, Datenkompression , Archivdateien ( tar , zip , cpio , ar , rpm ), Zeichencodierung , Zeit- und Datumsverarbeitung, XML- Verarbeitung, Nachrichtenauszüge und mehr. Diese Bibliotheken reduzieren die Notwendigkeit, nicht portierbare Betriebssystemfunktionen und Bibliotheken von Drittanbietern (die möglicherweise nicht immer vorhanden sind) direkt zu verwenden. Seed7-Bibliotheken enthalten Abstraktionsschichten für Hardware , Betriebssysteme und Bibliotheken von Drittanbietern, zB Grafik- und Datenbankbibliotheken. Mit anderen Worten, es sind keine Änderungen erforderlich, um Seed7-Programme zwischen verschiedenen Prozessoren oder Betriebssystemen zu verschieben .
TLS-Bibliothek
Seed7 verfügt über eine eigene Implementierung von Transport Layer Security . Die Bibliothek umfasst AES und elliptische Kurvenkryptographie .
Datenbankabstraktions-API
Seed7 bietet eine Bibliothek mit einer datenbankunabhängigen API. Programme können sich mit MySQL- , MariaDB- , SQLite- , PostgreSQL- , Oracle- , Open Database Connectivity (ODBC), Firebird- , InterBase- , Db2- und SQL Server- Datenbanken verbinden. Unabhängig von der Datenbank können vorbereitete Anweisungen erstellt, Bind-Variablen verwendet, die Anweisungen ausgeführt und Ergebnismengen abgeholt werden.
Geschichte
Seed7 basiert auf MASTER, einer erweiterbaren Programmiersprache, die in den Diplom- und Doktorarbeiten von Thomas Mertes beschrieben wird. Die meisten der ursprünglichen Ideen von MASTER, wie benutzerdefinierte Anweisungen und Operatoren, sind in Seed7 zu finden. Ein Precompiler , um MASTER nach Pascal zu übersetzen, wurde im ursprünglichen Projekt vorgeschlagen, aber nicht implementiert. 1989 begann die Entwicklung eines Dolmetschers für MASTER mit dem Namen HAL. 2005 wurden die Projekte MASTER und HAL als Open Source unter dem Projektnamen Seed7 veröffentlicht. Seitdem werden alle zwei bis drei Wochen neue Versionen veröffentlicht. Ab der Version 2021-04-25 enthält das Seed7-Projekt mehr als 500.000 Quelltextzeilen und mehrere hundert Seiten Dokumentation.
Ausfahrmechanismus
Eine Erweiterung umfasst zwei Teile: eine Syntaxdefinition, die eine Vorlage für die neue syntaktische Form liefert, und eine Standard-Seed7-Funktion, die verwendet wird, um die Semantik zu definieren.
Syntaxdefinition
Die Syntaxdefinition verwendet die strukturierte Syntaxbeschreibung von Seed7 (S7SSD). Eine S7SSD-Anweisung wie
$ syntax expr: .(). + .() is -> 7;
gibt die Syntax des +
Operators an . Der rechte Pfeil ->
beschreibt die Assoziativität : Bindung der Operanden von links nach rechts. Mit wird 7
die Priorität des +
Operators definiert. Das Syntaxmuster .(). + .()
wird eingeführt und durch Punkte ( .
) abgegrenzt . Ohne Punkte ist das Muster () + ()
. Das Symbol ()
ist ein Nichtterminalsymbol und +
ist ein Terminalsymbol. Die S7SSD unterscheidet nicht zwischen verschiedenen Nicht - End - Symbolen . Stattdessen kennt es nur ein Nichtterminalsymbol: ()
.
Semantische Erweiterung
Die Definition des +
Operators für komplexe Zahlen ist nur eine Funktionsdefinition:
const func complex: (in complex: summand1) + (in complex: summand2) is func result var complex: sum is complex.value; begin sum.re := summand1.re + summand2.re; sum.im := summand1.im + summand2.im; end func;
Verweise
Externe Links
- Offizielle Website - Homepage mit FAQ, Handbuch, Screenshots, Beispielen, Bibliotheksbeschreibungen, Benchmarks und einer Reihe von Algorithmen
- Seed7 bei GitHub
- Laden Sie Seed7 von seinem Haupt-Repository bei SourceForge herunter
- Seed7 bei Rosetta Code - Enthält viele Seed7-Beispiele
- The Quest for the Ultimate Cycle untersucht die 3n+C-Erweiterung der Collatz-Vermutung mit Seed7-Programmen
- Blog von Remo Laubacher : Statisch gelinkte Linux-Executables mit GCJ, Seed7 und haXe (2011)
- Blog von David Gudeman Die Programmiersprache Seed7 (2015)
- Eine FreeBSD-Portierung / siehe auch hier , gepflegt von Pietro Cerutti
- Eine OpenBSD-Portierung , bereitgestellt von Brian Callahan
- Ein Seed7-Paket für openSUSE/Fedora , (siehe auch hier oder hier )
- Eine Diskussion, in der Seed7 als Sprache beschrieben wird, in der neue Syntax tatsächlich von Sprachbenutzern definiert werden kann
- Seed7 bei "Fossies" - das frische Open Source Software Archiv