Open main menu

Wikipedia β

Seed7 is an extensible general-purpose programming language designed by Thomas Mertes. It is syntactically similar to Pascal and Ada. Along with many other features, it provides an extension mechanism.[2] Seed7 supports introducing new syntax elements and their semantics into the language, and allows new language constructs to be defined and written in Seed7.[3] For example, programmers can introduce syntax and semantics of new statements and user defined operator symbols. The implementation of Seed7 differs significantly from that of languages with hard-coded syntax and semantics.

Seed7
Paradigm multi-paradigm: extensible, object-oriented, imperative, structured, generic, reflective
Designed by Thomas Mertes
First appeared 2005; 13 years ago (2005)
Stable release
2018-07-08 / July 8, 2018; 11 days ago (2018-07-08)[1]
Typing discipline static, strong, safe, nominative, manifest
OS Cross-platform: BSD, Linux, OS X, Unix, Windows
License GPL, LGPL (for the runtime library)
Filename extensions .sd7, .s7i
Website seed7.sourceforge.net
Major implementations
open source reference implementation
Influenced by
Pascal, Modula-2, Ada, ALGOL 68, C, C++, Java

Contents

FeaturesEdit

Seed7 supports the programming paradigms: imperative, object-oriented (OO), and generic. It also supports features such as call by name, multiple dispatch, function overloading, operator overloading, exception handling and arbitrary-precision arithmetic.

Major features include:

Several programming language concepts are generalized:

The Seed7 project includes both an interpreter and a compiler. The interpreter starts programs very quickly, supporting fast program development. The compiler uses the parser and reflection interfaces from the run-time library to generate a C program, which is subsequently compiled to machine code. Compiled Seed7 programs can have comparable performance to C programs.

LibrariesEdit

Seed7 has many libraries, covering areas including containers, numeric functions, lexical analysis, file manipulation, networking (sockets, Transport Layer Security (TLS/SSL), Hypertext Transfer Protocol (HTTP), HTTP Secure (HTTPS), File Transfer Protocol (FTP), Simple Mail Transfer Protocol (SMTP), etc.), graphics, pixmap and vector fonts, database access (MySQL-MariaDB, SQLite, PostgreSQL, Oracle, Open Database Connectivity (ODBC)), Common Gateway Interface (CGI) support, data compression, character encoding, time and date handling, XML processing, message digests and more. These libraries reduce the need to use operating system features and third-party libraries directly. Seed7 libraries[4] contain abstraction layers for hardware, operating system and third-party libraries, e.g. graphic and database libraries. In other words, no changes are needed to move Seed7 programs between different processors or operating systems.

HistoryEdit

Seed7 is based on MASTER, an extensible programming language described in the diploma and doctoral theses of Thomas Mertes.[5][6] Most of the original ideas of MASTER, such as user defined statements and operators, can be found in Seed7. A precompiler, to translate MASTER to Pascal, was proposed, but unimplemented, in the original project. In 1989, development began on an interpreter for MASTER, named HAL. In 2005, the MASTER and HAL projects were released as open source under the Seed7 project name. Since then new versions have been released every two or three weeks. As of version 2013-09-08 the Seed7 project contains more than 300,000 source lines of code and several hundred pages of documentation.

Extension mechanismEdit

An extension includes two parts: a syntax definition, giving a template for the new syntactic form, and a standard Seed7 function, used to define the semantics.[2]

Syntax definitionEdit

The syntax definition uses the Seed7 Structured Syntax Description (S7SSD). A S7SSD statement like

$ syntax expr: .(). + .()  is -> 7;

specifies the syntax of the + operator. The right arrow -> describes the associativity: Binding of operands from left to right. With 7 the priority of the + operator is defined. The syntax pattern .(). + .() is introduced and delimited with dots (.). Without dots the pattern is () + (). The symbol () is a nonterminal symbol and + is a terminal symbol. The S7SSD does not distinguish between different nonterminal symbols. Instead it only knows one nonterminal symbol: ().

Semantic extensionEdit

The definition of the + operator for complex numbers is just a function definition:

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;

ReferencesEdit

  1. ^ Mertes, Thomas (12 June 2018). "New Seed7 Release 2018-07-08". Retrieved 12 June 2018 – via SourceForge. 
  2. ^ a b Zingaro, Daniel, "Modern Extensible Languages", SQRL Report 47 McMaster University (October 2007), page 16.
  3. ^ Abrial, Jean-Raymond and Glässer, Uwe, "Rigorous Methods for Software Construction and Analysis", ISBN 978-3-642-11446-5, Springer, 2010, page 166.
  4. ^ Seed7 libraries
  5. ^ Mertes, Thomas, "Entwurf einer erweiterbaren höheren Programmiersprache", Diploma thesis Vienna University of Technology (1984).
  6. ^ Mertes, Thomas, "Definition einer erweiterbaren höheren Programmiersprache", Doctoral thesis Vienna University of Technology (1986).

Further readingEdit

  • Abrial, Jean-Raymond; Glässer, Uwe (January 20, 2010). Rigorous Methods for Software Construction and Analysis (1 ed.). Springer Berlin Heidelberg. ISBN 978-3-642-11446-5. 
"To the best of our knowledge, among all these languages only the Seed7 programming language supports the introduction of new syntax and their semantics into the language."
"In terms of language extensibility, Seed7 goes beyond CoreASM as it allows new language constructs to be defined using the Seed7 language itself."

External linksEdit