This page is about the development and maintenance of the Algol 68 front-end in GCC.
Contents
Milestones
More recent first.
- 2025/02/06 - Version 1.0 of a68-mode for Emacs released in ELPA
2025/02/02 - V2 of Autoconf patches series sent upstream: https://lists.gnu.org/archive/html/autoconf-patches/2025-02/msg00000.html
2025/02/02 - Automake support pushed upstream: https://git.savannah.gnu.org/cgit/automake.git/commit/?id=bbb06167cc9aac0c28a28db70e042bf9f1aa7c0c
2025/01/26 - Demo "godcc" application written in Algol 68 published at https://git.sr.ht/~jemarch/godcc
- 2025/01/24 - WIP patch sent to automake-patches
2025/01/24 - WIP patch sent to autoconf-patches: https://lists.gnu.org/archive/html/autoconf-patches/2025-01/msg00014.html
2025/01/03 - Development repository opened at https://forge.sourceforge.org/jemarch/a68-gcc
2025/01/01 - WIP patch series sent to gcc-patches: https://inbox.sourceware.org/gcc-patches/20250101020952.18404-1-jose.marchesi@oracle.com/T/#t
Contact
- jemarch at gnu.org
- #gnualgol channel at irc.oftc.net
- gcc-patches at gcc.gnu.org
Git Repositories
Until we integrate in GCC proper the front-end lives in:
https://forge.sourceware.org/jemarch/a68-gcc branch a68
The Autoconf supports lives in:
https://git.sr.ht/~jemarch/a68-autoconf branch a68
Building, Testing and Running
See the README file in the source distribution for instructions on how to build the ga68 compiler and run the testsuites.
Quick recipe:
$ git clone https://forge.sourceware.org/jemarch/a68-gcc.git $ cd a68-gcc $ git checkout a68 $ ./contrib/download_prerequisites $ mkdir build-algol68 $ cd build-algol68 $ ../configure --enable-languages=algol68 $ make $ make pdf $ make html $ make check-algol68 $ make install
We can then compile and run a suitable "Hello world":
$ cat hello.a68 PROGRAM BEGIN puts ("Hello world!\n"); 0 END $ ga68 hello.a68 $ ./a.out Hello world!
The user manual for the front-end gets build, in diffent formats, in:
build-a68/gcc/doc/ga68.info build-a68/gcc/doc/ga68.pdf build-algol68/gcc/HTML/gcc-15.0.0/ga68/index.html
The info version can be browsed with the standalone info reader or any other info browser of your choice:
$ info -f ga68.info
Using Autoconf
We added support for Algol 68 to Autoconf. If you have Algol 68 programs in your project, you can use the AC_PROG_A68 macro in configure.ac. The macro looks for a working Algol 68 compiler (which basically means the GNU compiler) and sets the variable A68. For example:
AC_INIT(...) AC_CONFIG_AUX_DIR([build-aux]) AC_CONFIG_MACRO_DIR([m4]) AC_CONFIG_HEADERS([src/config.h]) AM_INIT_AUTOMAKE AC_PROG_A68 AC_CONFIG_FILES(Makefile src/Makefile) AC_OUTPUT
Using Automake
We have also added support for Algol 68 to Automake, and the support is already in the git master branch upstream. If you specify files with .a68 extensions as sources then Automake will build them with A68, passing A68FLAGS. For example:
bin_PROGRAMS = myprogram myprogram_SOURCES = myprogram.a68
Development Resources
Emacs mode for editing Algol68 programs (available in ELPA, use M-xlist-packages): https://git.sr.ht/~jemarch/a68-mode
Visual Studio Code plugin: https://github.com/jlguenego/vscode-algol68
The Algol 68 Jargon File: https://jemarch.net/a68-jargon
Roadmap
This section keeps track of the language features that are still to be implemented by the front-end. Once a task is completed it gets removed from the list.
Core language
- Support for sub-unions in conformance clauses
- Selection of multiples
- BYTES mode
- PAR clauses
- Pragments
Standard prelude sans transput
Environment enquiries
- bytes width
- bytes lenghts
- bytes shorts
- long(s) bytes width
Monadic operators
- + for COMPL
- - for COMPL
- ABS for COMPL
- ARG for COMPL
Dyadic operators
- + on BYTES
- EQ on BYTES
- NE on BYTES
- LT on BYTES
- LE on BYTES
- GT on BYTES
- GE on BYTES
- ELEM on BYTES
- - on COMPL
- + on COMPL
- * on COMPL
- / on COMPL
- EQ on COMPL
- NE on COMPL
- UP on COMPL
Assigning operators
- PLUSAB on COMPL
- TIMESAB on COMPL
- DIVAB on COMPL
Procedures
- next random
- last random
- bitspack
- bytespack
Extensions
These are listed from more priority to least priority.
- Support for separated compilation
- Exceptions mechanism.
- Storage (Name) protection.
- Partial parametrization.
- Modals
Transput
Note that most of the transput can and should be implemented in Algol 68, so this needs support for separated compilation.
- Formatless transput
- Formatted transput