Seed7 is an extensiblegeneral-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. Seed7 supports introducing new syntax elements and their semantics into the language, and allows new language constructs to be defined and written in Seed7. 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.
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.
Seed7 provides a library with a database independent API. Programs can connect to MySQL, MariaDB, SQLite, PostgreSQL, Oracle, Open Database Connectivity, Firebird, InterBase, Db2 and SQL Server databases. Independent from the database prepared statements can be created, bind variables can be used, the statements can be executed and result sets can be fetched.
History
Seed7 is based on MASTER, an extensible programming language described in the diploma and doctoral theses of Thomas Mertes. 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 mechanism
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.
Syntax definition
The syntax definition uses the Seed7 Structured Syntax Description. 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 extension
The definition of the + operator for complex numbers is just a function definition:
const func complex: + is func result var complex: sum is complex.value; begin sum.re := summand1.re + summand2.re; sum.im := summand1.im + summand2.im; end func;