This page is about the development and maintenance of the Algol 68 (https://www.algol68-lang.org) front-end in GCC.
Contents
Milestones
More recent first.
2025/11/30 - Front-end merged in master: https://gcc.gnu.org/pipermail/gcc-patches/2025-November/702363.html
2025/11/23 - The front-end has been accepted into GCC: https://gcc.gnu.org/pipermail/gcc/2025-November/247020.html
2025/11/22 - V6 of the Algol 68 GCC Front-end posted: https://gcc.gnu.org/pipermail/gcc-patches/2025-November/701589.html
2025/11/16 - Initial support for modules and separated compilation - https://gcc.gnu.org/pipermail/algol68/2025-November/000477.html
2025/10/28 - V5 of the Algol 68 GCC Front-end posted: https://gcc.gnu.org/pipermail/gcc-patches/2025-October/698783.html
- 2025/10/26 - Autoconf Algol 68 support is now upstream
2025/10/20 - vw-mode packaged in Gentoo: https://packages.gentoo.org/packages/app-emacs/vw-mode
2025/10/20 - a68-mode packaged in Gentoo: https://packages.gentoo.org/packages/app-emacs/a68-mode
2025/10/20 - Algol 68 Jargon File packaged in Gentoo: https://packages.gentoo.org/packages/app-doc/a68-jargon
2025/10/20 - V4 of the Algol 68 GCC Front-end posted: https://gcc.gnu.org/pipermail/gcc-patches/2025-October/698011.html
2025/10/12 - V2 of the Algol 68 GCC Front-End posted: https://gcc.gnu.org/pipermail/gcc-patches/2025-October/697255.html
- 2025/05/27 - Automake 1.18 released, with Algol 68 support.
- 2025/05/12 - Version 1.2 of the Emacs mode a68-mode released.
- 2025/05/01 - Version 1.1 of the Emacs mode a68-mode released. This includes support for SUPPER stropping.
- 2025/04/23 - Branch releases/gcc-15-a68 created
2025/03/10 - Repository moved to the GCC organization at https://forge.sourceware.org/gcc/gcc-a68
2025/03/08 - DWARF support for the Algol 68 language - https://dwarfstd.org/issues/250304.1.html
2025/03/05 - Mailing list algol68@gcc.gnu.org created.
- 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.sourceware.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
Reporting bugs
Please report bugs at https://gcc.gnu.org/bugzilla, selecting the component "algol68".
Mailing Lists
algol68 at gcc.gnu.org (https://gcc.gnu.org/mailman/listinfo/algol68)
- Patches, development and discussion.
IRC
* #gnualgol channel at irc.oftc.net
Git Repositories
The front-end is developed in the trunk branch of the GCC git repository.
Additionally, we use a repository in the forge, as staging area and for other purposes: https://forge.sourceware.org/gcc/gcc-a68
We use the following branches in the forge:
- releases/gcc-15-a68 - based on upstream releases/gcc-15-a68
These branches may get rebased regularly to match the in-tree stuff. Be warned.
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/gcc/gcc-a68.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
begin
puts ("Hello world!'n")
end
$ ga68 hello.a68
$ ./a.out
Hello world!The user manual for the front-end gets build, in different formats, in:
build-algol68/gcc/doc/ga68.info build-algol68/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 have 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
Automake supports Algol 68 in GCC starting with version 1.18. If you specify files with .a68 extensions as sources then Automake will build them with A68, passing A68FLAGS. For example:
AM_A68FLAGS = -fa68-nil-checking bin_PROGRAMS = myprogram myprogram_SOURCES = myprogram.a68
DWARF support
DW_LANG code assignments at https://dwarfstd.org/languages.html
DW_LNAME ones at https://dwarfstd.org/languages-v6.html
Development Resources
Emacs mode for editing Algol68 programs (available in ELPA, use M-x list-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
- BYTES mode
- PAR clauses
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