Anyone interested in resurrecting an open source strict Ada 83 (mil-std 1815A) compiler?

OK, let’s take enumeration. To test there are syntax, attributes, representation clause of (and in combination with 'Pred and other attributes), subtypes of, usage in array types, as discriminants including variant records, in loops, case statements. That is just from the top. ACATS covers probably, I guess, 1-2% of the total? So, I wondered if the framework you use were capable of more.

P.S. Character tests are quite interesting since there are subtle differences between Ada 83 and later standards. E.g. character literals.

You’re right : Ada 83 LRM 8.5(9) . Because an enumeration literal is equivalent to a function 3.5.1(3) renaming of an enumeration literal is possible under the title of subprogram renaming 8.5(2) (and not object renaming, an enumeration literal not being an object declared by object_declaration 3.2(2), 3.2(9)). So Ada 83/TLALOC sem_phase is ok when accepting this.

No, my “framework” is much more rudimentary and pragmatic. But your vision is interesting being tied to proving that the compiler compiles every possibility correctly and denies usage of forbidden constructs. I am not there but the question interests me also.

Nice step : all acvc a2 tests have been compiled by TLALOC, executed and passed (excepted the two TST using macrosub).

But bad news, fasmg will probably be unable to assemble the whole compiler (around 100 includes is too much for a multipass assembler, fasmg abdicates). It does not prevent developping the EXEC(1) compiler on “small” test programs though.

Hi ! Yes, see the ASCII art logo in codi_x86_64.finc for example.

Hi all ! Some interesting progress : acvc series a2, a3, a5, a6 have been passed (compiled/executed) by Ada 83/TLALOC.

8 Likes

Hi to all !

After some hard work, 16 tests of a8 acvc series have passed along with all tests of a2, a3, a5, a6, a7. All compiler modules itself are compiled also and a number of custom tests.

I am now confronted with a problem of development complexity. Taking acvc tests to guide the expander development is getting too expensive because it involves correction point by point as some languages services are not yet implemented. At first, the development was driven by implementing the predefined packages, but now they can be used and adding missing functionnalities is both less rewarding and more complicated.

I am thinking about the right method to efficiently progress in the expander development.

2 Likes

Hi !
I set up a methodology for the expander development with LRM centered “pillars” to implement. The acvc tests are no longer a development guide, only a control tool. A nice progress has been done on sections 3.6 and 3.7 .
Today I begin implementing the exceptions.

3 Likes

Hi.all !
Ada 83/TLALOC has the exceptions service up and tested on custom tests programs.

7 Likes

Hi.all !

15th of July 2026 : the gnat compiled Ada 83/TLALOC compiler compiles all its own sources to fasmg macros LLIR in 17 seconds. Then fasmg assembles the 8.7 Mb ADA_COMP bootstrapped compiler in 148 seconds 19 passes,
The Ada 83/TLALOC loop is in place

Now debugging the new executable to produce the “dis_bonjour” with entirely TLALOC compiled TLALOC from Ada 83 source.

5 Likes

Good news.
Is everything complete now, or are there more features that need implemented?

1 Like

Alas… no, producing the compiler exec is not enough, it has to compile effectively and itself produce the next generation exec. Debugging ahead, but it is a very significant step, with a great amount of work below.

6 Likes

Hi.all !
just a few words of update. A great battle to bootstrap TLALOC. A small null_prog passes through PAR_PHASE in the TLALOC compiled TLALOC. In parallel with LRM pillars implementation, the bootstrap is debugged with a “fill the shouting holes” policy. That is every unimplemented feature is making noise through messaging and raise PROGRAM_ERROR. A listing mode allows for holes finding, and an update journal tracks every hole category to fill it with AI help. Reduction is in progress.

Fasmg does the job, in 18 passes but 2-3 minutes. Manageable.

The sync repos on Framagit and Github were too heavy, I extracted the minimum up to date compiler source in : Ada_83_TLALOC: Full MIL-STD-1815 Ada 83 compiler modern implementation with fasmg backend which is where the latest version is.

I’ll perhaps have to pull the foot off the pedal, my wife begins to ask what is all this effort worth… women… Hoping to bootstrap though.

3 Likes

@VMo you might want to get in contact with Justin Squarek (sp?) — the guy who has AdaDoom3 · GitHub — he’s working on an Ada83 compiler as well, and has gotten it to the point it’s passing some of the ACATS tests.

This is pretty interesting; it seems to be a single generated C file and RTS written in Ada that target LLVM 20. I’m not sure how much overlap they can have, since AdaDoom’s is pretty dense whereas @VMo’s is pretty readable, but useful in benchmarks and comparisons for sure.

True, his is in C, but two things, (1) it’s meant to bootstrap, and (2) it uses an IR that is heavily DIANA-inspired.

Hi OneWingedShark !
63550 lines of C in a single 2.6Mb file :flushed_face: How did he do that ? And add llvm behind.
I have so much pain with my ~100 Ada 83 files to insure it does what it is intended to do. And to have something maintainable which can be scrutinized…
Well I’ll try to have a look at it.

He did with AI, it’s mentioned in the readme iirc.

From what I understand, the development method of AdaDoom3/Ada83 is completely different from mine for TLALOC. The code seems entirely AI generated (repo changes very often) and maintenance of a single giant file without AI agents will be problematic. When I started TLALOC I wanted to have a human readable and maintainable compiler. I use AI modifications under my control with step by step copy/paste source blocs. So that I read what is done. Of course, I want to have an Ada 83 written compiler, and a mastered backend even if for now performance is not at a premium.

2 Likes

Indeed, and I appreciate this.
However, if the backend consumes DIANA, you should be able to swap out backends fairly easily. If you need to, that is.

And, another issue is that of bootstrapping: you don’t necessarily have to keep your backend as assembler. (There are pros and cons to ASM, as there are to other codegen techniques.)