www.wikidata.de-de.nina.az
Seed7 ist eine erweiterbare Programmiersprache die von Thomas Mertes erfunden wurde Syntaktisch ist sie Pascal und Ada ahnlich Zusatzlich zu vielen anderen Eigenschaften gibt es einen Erweiterungsmechanismus 2 der es erlaubt die Sprache mit neuer Syntax und der dazugehorigen Semantik zu erweitern und es ausserdem ermoglicht neue Sprachkonstrukte in Seed7 selbst zu definieren 3 So konnen sowohl Syntax als auch Semantik fur neue Anweisungen definiert werden als auch benutzerdefinierte Operatorsymbole eingefuhrt werden Die Implementierung von Seed7 unterscheidet sich daher deutlich von der Implementierung anderer Sprachen mit hartkodierter Syntax und Semantik Seed7Paradigmen Multiparadigmen erweiterbar objektorientiert imperativ prozedural strukturiert generisch reflexiv Erscheinungsjahr 2005Entwickler Thomas MertesAktuelle Version 2023 01 30 1 30 Januar 2023 Typisierung statisch stark typsicherWichtige Implementierungen Open Source ReferenzimplementierungBeeinflusst von Pascal Modula 2 Ada Algol 68 C C JavaBetriebssystem plattformunabhangig Linux Windows Mac OS BSD Unix Lizenz GPL LGPL fur die Laufzeitbibliothek seed7 sourceforge net Inhaltsverzeichnis 1 Eigenschaften 2 Hallo Welt 3 Bibliotheken 4 Geschichte 5 Erweiterbarkeit 5 1 Syntaxdefinition 5 2 Semantische Erweiterung 6 Weiterfuhrende Literatur 7 Weblinks 8 EinzelnachweiseEigenschaften BearbeitenSeed7 unterstutzt neben dem imperativen objektorientierten und generischem Paradigma auch Technologien wie Namensparameter call by name Multimethoden multiple dispatch Funktionsuberladung Operatoruberladung Ausnahmebehandlung und Langzahlarithmetik Zu den wesentlichen Eigenschaften gehoren benutzerdefinierte Anweisungen und Operatoren abstrakte Datentypen Templates ohne spezielle Syntax OO mit Interfaces und multiple dispatch Statische Typisierung Kann interpretiert oder kompiliert werden Quellcode Portabilitat Lauft unter Linux Windows Mac OS BSD UnixEtliche Programmiersprachkonzepte wurden generalisiert Typdeklarationen sie versehen einen Typ mit einem Namen und Funktionsdefinitionen haben die Form von Konstantendefinitionen Ausdrucke die zur Ubersetzungszeit ausgewertet werden konnen auch benutzerdefinierte Funktionen aufrufen Uberladen und Objektorientierung mit Multimethoden haben ein gemeinsames Konzept Sie finden nur zu unterschiedlichen Zeitpunkten Ubersetzungszeit beziehungsweise Laufzeit statt Typnamen und Typbeschreibungen konnen als Parameter und Funktionsergebnis verwendet werden Funktionen die zur Ubersetzungszeit ausgefuhrt werden konnen benutzt werden um Objekte zu deklarieren Templates werden als Ubersetzungszeitfunktionen mit Typen als Parameter realisiert Arrays Hashtabellen und Structs sind nicht hartkodiert Stattdessen sind sie als abstrakter Datentyp in Programmbibliotheken definiert Parser und Interpreter sind Teil der Laufzeitbibliothek Die Unicode Unterstutzung basiert auf UTF 32 Das vermeidet Probleme einer Kodierung mit variabler Lange wie etwa bei UTF 16 Das Seed7 Projekt enthalt sowohl einen Compiler als auch einen Interpreter wodurch schnelle Programmentwicklung unterstutzt wird Der Seed7 Compiler nutzt den Parser und eine Reflexionsschnittstelle aus der Laufzeitbibliothek um ein C Programm zu erzeugen das anschliessend in Maschinensprache kompiliert wird Kompilierte Seed7 Programme haben eine ahnliche Laufzeit wie C Programme Hallo Welt BearbeitenFolgender Seed7 Quellcode gibt bei Ausfuhrung Hallo Welt aus include seed7 05 s7i const proc main is func begin writeln Hallo Welt end func Bibliotheken BearbeitenSeed7 hat viele Bibliotheken die verschiedenste Bereiche abdecken Container numerische Funktionen lexikalische Scanner Dateimanipulationen Netzwerke Sockets TLS SSL HTTP HTTPS FTP SMTP etc Graphik bitmap und vektor Schrift Datenbankzugriff MySQL MariaDB SQLite PostgreSQL Oracle ODBC Firebird InterBase CGI Unterstutzung Datenkompression Zeichenkodierung Verarbeiten von Datum und Uhrzeit XML Verarbeitung Kryptologische Hashfunktionen Dadurch ist der Bedarf an direkten Betriebssystemaufrufen und externen Bibliotheken verhaltnismassig gering und Seed7 Bibliotheken 4 beinhalten Abstraktionsschichten fur Hardware und Betriebssystem Dadurch sind praktisch keine Anderungen notwendig wenn Seed7 Programme auf andere Rechnerarchitekturen oder Betriebssysteme portiert werden Geschichte BearbeitenSeed7 basiert auf MASTER einer erweiterbaren Programmiersprache die in der Diplomarbeit und der Dissertation von Thomas Mertes beschrieben wurde 5 6 Die meisten der ursprunglichen Ideen von MASTER wie z B die benutzerdefinierbaren Anweisungen und Operatoren kann man in Seed7 finden Es war geplant einen Praprozessor fur MASTER zu erstellen der wurde aber letztendlich im ursprunglichen Projekt nicht realisiert 1989 begann die Entwicklung eines Interpreters fur MASTER unter dem Namen HAL 2005 wurde das MASTER bzw HAL Projekt unter dem Namen Seed7 veroffentlicht open source In der Version 2013 09 08 enthalt das Projekt Seed7 mehr als 300 000 Programmzeilen und mehrere hundert Seiten an Dokumentation Erweiterbarkeit BearbeitenDie Erweiterbarkeit beruht auf zwei Teilen Eine Syntaxdefinition die ein Muster fur eine neue Syntax vorgibt und eine normale Funktionsdefinition die benutzt wird um die Semantik zu definieren 2 Syntaxdefinition Bearbeiten Eine Syntaxdefinition benutzt die Seed7 Structured Syntax Description S7SSD Eine S7SSD Anweisung wie syntax expr is gt 7 definiert die Syntax des Operators Der Pfeil nach rechts gt beschreibt die Assoziativitat Das ist ein linksassoziativer Operator der von links nach rechts ausgewertet wird Mit 7 wird die Prioritat des Operators definiert Das Syntaxmuster beginnt mit einem Punkt und ist durch Punkte strukturiert Ohne Punkte ist das Syntaxmuster Das Symbol ist ein Nichtterminalsymbol und ist ein Terminalsymbol In der S7SSD wird nicht zwischen verschiedenen Nichtterminalsymbolen unterschieden Stattdessen gibt es nur ein Nichtterminalsymbol Semantische Erweiterung Bearbeiten Die Definition des Operators fur komplexe Zahlen ist eine normale 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 Weiterfuhrende Literatur BearbeitenJean Raymond Abrial Uwe Glasser Rigorous Methods for Software Construction and Analysis 1 Auflage Springer Berlin Heidelberg 2010 ISBN 978 3 642 11446 5 Weblinks BearbeitenSeed7 Homepage Enthalt FAQ Handbuch Screenshots Beispiele Bibliotheken und eine Sammlung von Algorithmen englisch Seed7 auf GitHub Seed7 von Sourceforge herunterladen Seed7 auf Rosetta Code Enthalt viele Seed7 Beispiele englisch Zusammenfassung der Diplomarbeit von Thomas Mertes Zusammenfassung der Dissertation von Thomas Mertes Dissertation von Thomas Mertes Artikel von Daniel Zingaro McMaster University Hamilton Ontario Canada uber Modern Extensible Languages alternativer Link Absatz uber Seed7 auf Seite 16 englisch Buch von Abrial Jean Raymond und Glasser Uwe Rigorous Methods for Software Construction and Analysis siehe Seite 166 englisch The Quest for the Ultimate Cycle Memento vom 25 Oktober 2013 im Internet Archive erforscht die 3n C Erweiterung des Collatz Problems mit Seed7 Programmen englisch Blog von Remo Laubacher Statically linked Linux executables with GCJ Seed7 and haXe englisch Blog von David Gudeman The Seed7 Programming Language englisch Ein FreeBSD port siehe auch hier betreut von Pietro Cerutti Ein OpenBSD port betreut von Brian Callahan Ein Seed7 Paket fur openSUSE FedoraEinzelnachweise Bearbeiten sourceforge net a b Zingaro Daniel Modern Extensible Languages SQRL Report 47 McMaster University October 2007 page 16 Abrial Jean Raymond and Glasser Uwe Rigorous Methods for Software Construction and Analysis ISBN 978 3 642 11446 5 Springer 2010 page 166 Seed7 Bibliotheken Mertes Thomas Entwurf einer erweiterbaren hoheren Programmiersprache Diplomarbeit Technische Universitat Wien 1984 Mertes Thomas Definition einer erweiterbaren hoheren Programmiersprache Dissertation Technische Universitat Wien 1986 Abgerufen von https de wikipedia org w index php title Seed7 amp oldid 226224121