ALGOL 68 Genie: Difference between revisions

m
m (http://sourceforge.net/project/showfiles.php?group_id=114223&package_id=300114&release_id=642308)
 
(6 intermediate revisions by 3 users not shown)
Line 5:
The author of Algol 68 Genie is Marcel van der Veer. Algol68G is released under the GNU GPL and runs on [[Linux]], [[UNIX]], [[BSD]] [[Mac OS X|Mac OS]] and [[Windows]] XP, and is available [http://www.xs4all.nl/~jmvdveer/algol.html here].
 
[[ALGOL 68G]] is an interpretor that runs on Linux and a good way to get started with [[ALGOL 68]]. ''ALGOL 68G'' mk14.1 is now available for download for Fedora9 from Source Forge - [http://sourceforge.net/project/showfiles.php?group_id=114223&package_id=300114&release_id=642308 Download now]. (This download RPM includes a 400 page [[ALGOL 68]] manual in printer readready pdf)
==Features of Algol68G==
* The [[interpreter]] performs checks on many events, for example: assigning to <codett>NIL</codett> or dereferencing of <codett>NIL</codett>, 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 <codett>LONG INT, LONG REAL</codett> and <codett>LONG COMPLEX</codett> with roughly doubled precision with respect to <codett>INT, REAL, COMPLEX</codett> and implementation of multiprecision arithmetic through <codett>LONG LONG INT, LONG LONG REAL</codett> and <codett>LONG LONG COMPLEX</codett> 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.
Line 18:
 
== 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 <codett>ANDF</codett> and <codett>ORF</codett>.
* 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 <codett>WHILE ... DO SKIP OD</codett>.
* Implementation of <codett>DOWNTO</codett> with comparable function as <codett>TO</codett> in loop clauses; <codett>DOWNTO</codett> decreases, whereas <codett>TO</codett> 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 <codett>FLEX [ ] FLEX [ ] FLEX [ ] CHAR</codett>, but on a <codett>FLEX [ ] CHAR</codett>. 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 <codett>reset</codett> can intervene with sequential processing.
* When all arguments in a call of <codett>readf, printf, writef, getf</codett> or <codett>putf</codett> are processed, the format associated with the corresponding file is purged - that is, remaining insertions are processed and the format is discarded.
 
==SeeUsing alsoa Large Heap==
Note that to use large arrays, the amount of memory available for the interpreter can be set via the "heap" command line parameter or via a "heap" pragmatic comment.
<pre>
E.g.: via the command line:
a68g -heap=512M someProgram.a68
 
E.g.: Using a pragmatic comment in the actual Algol 68 source:
PR heap=512M PR
</pre>
 
==Download==
* [http://www.xs4all.nl/~jmvdveer/algol.html Algol 68 Genie web page]
* [http://sourceforge.net/projects/algol68/ Fedora/Centos/RHEL/Win32: Sourceforge Algol 68 Compiler, Interpreter & Runtime]
3,021

edits