Samen7 - Seed7

Samen7
Paradigma Multiparadigma : erweiterbar , objektorientiert , zwingend , strukturiert , generisch , reflektierend
Entworfen von Thomas Mertes
Erstmals erschienen 2005 ; Vor 16 Jahren ( 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 .sourceforge .net
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:

Mehrere Programmiersprachenkonzepte werden verallgemeinert:

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 7die 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