Seed7: Difference between revisions
Hans Bauer (talk | contribs) Reword sentence |
Hans Bauer (talk | contribs) Add reference |
||
Line 61: | Line 61: | ||
$ syntax expr: .(). + .() is -> 7; |
$ syntax expr: .(). + .() is -> 7; |
||
</pre> |
</pre> |
||
specifies the syntax of the <code>+</code> [[operator (programming)|operator]]. The right arrow <code>-></code> describes the [[operator associativity|associativity]]: Binding of operands from left to right. With <code>7</code> the [[order of operations|priority]] of the <code>+</code> operator is defined. The syntax pattern <code>.(). + .()</code> is introduced and delimited with dots (<code>.</code>). Without dots the pattern is <code>() + ()</code>. The symbol <code>()</code> is a nonterminal symbol and <code>+</code> is a terminal symbol. The S7SSD does not distinguish between different [[Terminal and nonterminal symbols|nonterminal symbols]]. Instead it only knows one nonterminal symbol: <code>()</code>. |
specifies the syntax of the <code>+</code> [[operator (programming)|operator]]. The right arrow <code>-></code> describes the [[operator associativity|associativity]]: Binding of operands from left to right. With <code>7</code> the [[order of operations|priority]] of the <code>+</code> operator is defined. The syntax pattern <code>.(). + .()</code> is introduced and delimited with dots (<code>.</code>). Without dots the pattern is <code>() + ()</code>. The symbol <code>()</code> is a nonterminal symbol and <code>+</code> is a terminal symbol.<ref>[http://unobtainabol.blogspot.co.at/2015/03/the-seed7-programming-language.html In Seed7 you can specify a syntax like this]</ref> The S7SSD does not distinguish between different [[Terminal and nonterminal symbols|nonterminal symbols]]. Instead it only knows one nonterminal symbol: <code>()</code>. |
||
===Semantic extension=== |
===Semantic extension=== |
Revision as of 18:06, 18 September 2019
Paradigm | multi-paradigm: extensible, object-oriented, imperative, structured, generic, reflective |
---|---|
Designed by | Thomas Mertes |
First appeared | 2005 |
Stable release | 2019-08-19
/ 1910 days ago[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 |
Major implementations | |
open source reference implementation | |
Influenced by | |
Pascal, Modula-2, Ada, ALGOL 68, C, C++, Java |
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.
Features
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:
- User defined statements and operators
- Abstract data types
- Templates without special syntax
- Object-oriented with interfaces and multiple dispatch
- Static typing
- May be interpreted or compiled
- Source code portability
- Runs under BSD, Linux, Mac OS X, Unix, Windows
Several programming language concepts are generalized:
- Type declarations (which assign a name to a type) and function definitions take the form of constant definitions.
- Compile time expressions can execute user-defined functions.
- Overloading and object-orientation (with multiple dispatch) are seen as common concepts. They just happen at different times: compile time and run time, respectively.
- Type names and type descriptions can be used as parameter and function result.
- Functions, which are executed at compile time, can be used to define objects.
- Templates are written as compile time functions with type parameters.
- Arrays, hash maps and structs are not a hard-coded feature. Instead they are defined as abstract data type in libraries.
- Parser and interpreter are part of the runtime library.
- UTF-32 Unicode support. This avoids problems of variable-length encodings like UTF-8 and UTF-16.
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.[citation needed]
Libraries
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 independent API[4] (can connect to MySQL, MariaDB, SQLite, PostgreSQL, Oracle, Open Database Connectivity (ODBC), Firebird, InterBase), Common Gateway Interface (CGI) support, data compression, archive files (tar, zip), character encoding, time and date handling, XML processing, message digests and more.[5] These libraries reduce the need to use unportable operating system features and third-party libraries (which might not always be present) directly. Seed7 libraries 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.
TLS Library
Seeed7 has its own implementation of Transport Layer Security[6]. Although the library is small if features things like AES and Elliptic-curve cryptography.
History
Seed7 is based on MASTER, an extensible programming language described in the diploma and doctoral theses of Thomas Mertes.[7][8] 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.[2]
Syntax definition
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.[9] 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: (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;
References
- ^ Mertes, Thomas (19 August 2019). "New Seed7 Release 2019-08-19". Retrieved 19 August 2019 – via SourceForge.
- ^ a b Daniel Zingaro, "Modern Extensible Languages", SQRL Report 47 McMaster University (October 2007), page 16 (alternate link).
- ^ Abrial, Jean-Raymond and Glässer, Uwe, "Rigorous Methods for Software Construction and Analysis", ISBN 978-3-642-11446-5, Springer, 2010, page 166.
- ^ Can Seed7 access databases
- ^ Seed7 libraries
- ^ A Transport Layer Security (TLS) library written in Seed7
- ^ Mertes, Thomas, "Entwurf einer erweiterbaren höheren Programmiersprache", Diploma thesis Vienna University of Technology (1984).(Abstract)
- ^ Mertes, Thomas, "Definition einer erweiterbaren höheren Programmiersprache", Doctoral thesis Vienna University of Technology (1986).(Abstract)
- ^ In Seed7 you can specify a syntax like this
External links
- Official website - Has FAQ, manual, screenshots, examples, library descriptions and a set of algorithms
- Download Seed7 from its main repository at Sourceforge
- Seed7 at Rosetta Code - Contains many Seed7 examples
- The Quest for the Ultimate Cycle explores the 3n+C extension of the Collatz Conjecture with Seed7 programs
- Blog by Remo Laubacher: Statically linked Linux executables with GCJ, Seed7 and haXe (2011)
- Blog by David Gudeman The Seed7 Programming Language (2015)
- A FreeBSD port / see also here, maintained by Pietro Cerutti
- An OpenBSD port, provided by Brian Callahan
- A Seed7 package for openSUSE/Fedora, (see also here or here)
- A discussion where Seed7 is described as language where new syntax can actually be defined by language users
- Seed7 at "Fossies" - the Fresh Open Source Software Archive