Neliac 1958 was the US Navy’s algol compiler. Interesting how subroutines and assignments were done in contrast to ALGOL 60. it was the first portable and bootstrapable language. A good insight to how the early machines worked with cards,flexwriter and mag tape. The book Machine-Independent Computer Programming 1962 is online, and has source code for 3 machines.
Text input is 6 bit, so porting today would not be as clean as it was 63 years ago.
From a review of that book, some interesting details:
MACHINE-INDEPENDENT COMPUTER PROGRAMMING, by Maurice H . Halste ad.
Spartan Books, Washington, D. C. xii and 267 pp.
This book explains how a compiler can be written to translate statements written in a source language familiar to the programmer into the numerical language of the computer that is available to him. The basic concepts were developed at the Navy Electronics Laboratory and the source language that was used is a version of Algol, hence the name Neliac (Navy Electronic Laboratory International Algol Compilers). The original compiler (Neliac- C) was produced on the Univac M-460, “The Countess,” which in turn was used to write compilers for the CDC-1604, the IBM-704/709 and the Burroughs 220. In the development of these compilers, the application to a specific data-processing problem was of primary importance, hence only fixed-point arithmetic and one-dimensional arrays. It is claimed that what has been lost in generality this way, has been more than regained in terms of compiling speed and controlled efficiency of abject programs (for example, in the control of indexing operations).
The book can be borrowed from the Internet Archive here.
Interesting feature of that language is that it is the only one other that POP2 that does assignments properly, i.e. as → . e.g. 1 + 2 → A rather than A ← 1 + 2 (and avoids the objections from mathematicians over the use of ‘=’, not to mention the awkwardness in so many languages of the assignment ‘=’ vs the comparison ‘=’…)
Reading that paper it seems very much in the same vein as Atlas Autocode, i.e. an early response to the 1958 IAL proposal rather than the later Algol 60 standard. It’s not clear that this was implemented before Atlas Autocode and AA was also made boot-strappable through the compiler-compiler version. The actual language though doesn’t look much like IAL, Algol60, or AA.
The disadvantage with A ← 1 +2 is that left value needs to saved.Simple compilers just
push EFA and later store **sp++.
The same goes for subroutines. Foo(args) , foo needs to be saved until after the arguments. Neliac calls have no arguments.
High level languages can generate poor code,for the simple reason they don’t parse the whole
statement before generating code.
.
This is a better pdf than the internet archive one.
Assignments in the Beta programming language are also left to right and use the character pair “->” as an approximation to the right arrow.
A while back I created a programmable calculator language that uses the = symbol as assignment in that manner: 42 = A will store the value 42 in variable A. There is no direct compare operator, so no confusion with = for comparison.
It’s a bit esoteric, but usable, but also a story for another time & place..
-Gordon
‘=:’ might be better if ‘->’ is used for structures.