ALGOL 68 Genie: Difference between revisions
Content added Content deleted
m (http://www.xs4all.nl/~jmvdveer/algol.html Algol 68 Genie web page) |
No edit summary |
||
Line 1: | Line 1: | ||
'''ALGOL 68G''' or '''Algol 68 Genie''' is an [[ALGOL 68]] [[Interpreter (computing)|interpreter]]. ALGOL 68G is a nearly full implementation of ALGOL 68 as defined by the Revised Report and also implements partial parametrisation, which is an extension of ALGOL 68. |
|||
{{implementation|ALGOL 68}}{{stub}} |
|||
After successful parsing of an entire source program, the syntax tree, that serves as an intermediate program representation, is interpreted. The interpreter performs many runtime checks. |
|||
The author of Algol 68 Genie is [[Marcel van der Veer]]. Algol68G is released under [[GNU General Public License|GPL]] and runs on Linux, UNIX, BSD and MacOS and is available [http://www.xs4all.nl/~jmvdveer/algol.html here]. |
|||
==Features of Algol68G== |
|||
* The interpreter performs checks on many events, for example: assigning to <code>NIL</code> or dereferencing of <code>NIL</code>, using uninitialised values, invalid operands to standard prelude operators and procedures, bounds check when manipulating arrays, overflow of arithmetic modes, "dangling references", that are names that refer to deallocated storage. |
|||
* Precision of numeric modes: implementation of <code>LONG INT, LONG REAL</code> and <code>LONG COMPLEX</code> with roughly doubled precision with respect to <code>INT, REAL, COMPLEX</code> and implementation of multiprecision arithmetic through <code>LONG LONG INT, LONG LONG REAL</code> and <code>LONG LONG COMPLEX</code> which are modes with user defined precision which is set by an option. |
|||
* On systems that support them, UNIX extensions that allow e.g. for executing child processes that communicate through pipes, matching regular expressions or fetching web page contents. |
|||
* Procedures for drawing using the GNU Plotting Utilities. |
|||
* Various numerical procedures and basic linear algebra procedures from the GNU Scientific Library. |
|||
* Format texts, straightening and formatted transput. Transput routines work generically on files, (dynamic) strings and UNIX pipes. |
|||
* Parallel clause on platforms that support POSIX threads. |
|||
* Various PostgreSQL client routines. |
|||
* Upper stropping is the default, quote stropping is optional. |
|||
== Extensions to Algol 68 == |
|||
* Implementation of C.H. Lindsey's partial parametrisation proposal, which allows for [[currying]] in Algol 68, giving it a functional sublanguage. |
|||
* A simple refinement preprocessor to facilitate top-down program construction. |
|||
* Implementation of pseudo-operators <code>ANDF</code> and <code>ORF</code>. |
|||
* Implementation of a post-checked loop. A do-part may enclose a serial clause followed by an optional until-part, or just enclose an until-part. This is an alternative to the paradigm Algol 68 post-check loop <code>WHILE ... DO SKIP OD</code>. |
|||
* Implementation of <code>DOWNTO</code> with comparable function as <code>TO</code> in loop clauses; <code>DOWNTO</code> decreases, whereas <code>TO</code> increases, the loop counter by the value of the (implicit) by-part. |
|||
== Deviations from the Revised Report language == |
|||
The important deviations are: |
|||
* The important difference with the Revised Report transput model is that Algol68G transput does not operate on <code>FLEX [ ] FLEX [ ] FLEX [ ] CHAR</code>, but on a <code>FLEX [ ] CHAR</code>. This maps better onto operating systems such as UNIX or Linux. |
|||
* The Algol68G parallel clause deviates from the Algol 68 parallel clause when parallel clauses are nested. In Algol68G, stack frames inside a parallel unit are private, therefore if parallel units modify a shared variable then this variable must be declared outside the outermost parallel clause, and a jump out of a parallel unit can only be targeted at a label outside the outermost parallel clause. |
|||
* The interpreter does not implement so-called ghost-elements {RR 2.1.3.4}, hence it cannot check bounds when assigning to rows of mode flexible-rows-of-rows-of-... when the destination has a flat descriptor. |
|||
* Algol68G does not recognise nonlocal environs {RR 5.2.3.2}. All environs are local. |
|||
* Transputting a file is essentially sequential. Only <code>reset</code> can intervene with sequential processing. |
|||
* When all arguments in a call of <code>readf, printf, writef, getf</code> or <code>putf</code> are processed, the format associated with the corresponding file is purged - that is, remaining insertions are processed and the format is discarded. |
|||
==See also== |
==See also== |
||
* [http://www.xs4all.nl/~jmvdveer/algol.html Algol 68 Genie web page] |
* [http://www.xs4all.nl/~jmvdveer/algol.html Algol 68 Genie web page] |
||
[[Category:ALGOL 68 compilers|Genie GPL]] |
|||
[[Category:Interpreters (computing)]] |
|||
[[Category:Programming languages]] |