---
created_at: '2017-11-26T04:23:49.000Z'
title: LIL, the Little Implementation Language (1974)
url: http://www.ultimate.com/phil/lil/
author: akkartik
points: 89
story_text: 
comment_text: 
num_comments: 6
story_id: 
story_title: 
story_url: 
parent_id: 
created_at_i: 1511670229
_tags:
- story
- author_akkartik
- story_15779411
objectID: '15779411'

---
[Source](http://www.ultimate.com/phil/lil/ "Permalink to 
LIL, The Little Implementation Language
")

# 
LIL, The Little Implementation Language


# LIL, The Little Implementation Language

LIL, The Little Implementation Language, has been a lost and overlooked chapter in the history of Unix and the C language. 

Back in the days when systems programmers still disdained "high level languages" there were stories in the compiler community, passed mouth to ear about LIL, a high level assembler, whose creator, had a friendly competition with the creators of C, as to which language could generate more efficient code. Each time LIL edged out C, the C compiler would be improved, and erase LIL's margin of advantage. 

A unique element to the LIL saga, is that LIL's creator documented the story, available here (thanks to a copy provided by the author); 

> [A Little Implementation Language][1]

Also available for the first time, thanks to the author, and courtesy of Bell Labs/Lucent Technologies the following internal Bell Labs memos; 

Bell Labs Technical Memo: TM-74-1352-8 : [LIL Reference Manual][2] Bell Labs Technical Memo: TM-74-1352-6 : [Programming in LIL: A Tutorial][3] An introduction to LIL for PDP-11 Assembler programmers. 

## Thanks

Many thanks to P.J. Plauger, for his insightful documentation, and also for digging up, and photocopying the documents, and his permission to reproduce them here. Thanks also to John Mashey for providing institutional memory and information useful in the unearthing of the memos, and to Dennis Ritchie for providing permission to release the internal memos. 

## See Also

Plauger:1976:LIL [301] P. J. Plauger. A Little Implementation Language. ACM SIGPLAN Notices, 11 (4):135-137, April 1, 1976. CODEN SINODQ. ISSN 0362-1340 

Usenet postings; 

* [8/23/2000 posting by John Mashey][4]. An excellent retrospective on the history of High Level Assemblers. 
* [5/10/1994 net.lang posting by Kenneth Almquist][5], with code examples 
* [8/16/1991 comp.arch posting by John Mashey][6]
* [5/22/1985 net.lang posting by John Mashey][7]
* [11/29/1983 net.lang posting by Kenneth Almquist][8]; Origin of the BSS acronym 
* * *

## Related topics

Other mid-level implementation languages; 

### BCPL

Basic version of the Combined Programming Language (CPL). First implemeted by Martin Richards at MIT in the 1960's. Used on the Xerox Alto and Amiga? 

* [Martin Richards' BCPL page][9]
* Early C
* [DMR's 1967 Project MAC BCPL manual][10]

### B

A simplified version of BCPL, implemented on the PDP-7 by Ken Thompson. The immediate predicessor to C, B was word oriented. 

* [User' Reference to B][11]
* [The Programming Language B][12]
* [The Development of the C Language][13]

### BLISS

A descendant of BCPL, BLISS (the Basic Language for the Implementation of System Software) was originally implemented at CM-U by Bill Wulf as BLISS-10, an implementation language for the PDP-10. A second compiler, BLISS-11 was implemented in BLISS-10, which cross-compiled code for the PDP-11. This optimizing compiler is described in the excellent book ["The Design of an Optimizing Compiler"][14], by Wulf, Johnsson, Weinstock, Hobbs, and Geschke. 

BLISS-11 was developed by DEC into "Common BLISS", a family which included BLISS-16, a cross compiler for the PDP-11, BLISS-32 for the VAX, and BLISS-36 for the PDP-10. There is reputed to have been a PDP-11 native Commmon BLISS compiler, called uBliss (micro-BLISS). 

BLISS-36C ran on the PDP-10, and translated a subset of BLISS-36 to BLISS-10 (the subset that one could express by targeting BLISS-10). A few features were added to BLISS-10 to allow BLISS-36C to support more of BLISS-36. There was also a BLISS-16C that translated BLISS-16 to BLISS-11. These compilers were used to get Common BLISS code up and running (presumably including the BLISS-16, BLISS-32 and BLISS-36 compilers themselves) This is reputed to be covered in the article: 

Ronald F. Brender: Generation of BLISSes. TSE 6(6): 553-563 (1980) 

Articles, available from Hunter Goatley's FILESERV at Process Software; 

[PostScript session notes for Matthew Madison's "Introduction to BLISS"][15] (describes "Common BLISS") 

["BLISS: A Language for Systems Programming", CACM 14(12):780-790, Dec 1971][16] (describes BLISS-10) 

Sources, thanks to Tim Shoppa, from the PDP-10 Software Archive at trailing-edge.com; 

* [BLISS-10][17] from TOPS-20 V7.0 TOOLS Tape. 
* [BLISS-11][18] from DECUS tapes. 

BLISS-32 (for the VAX) and BLISS-32EN and BLISS-64EN (for Alpha AXP) are available on the [OpenVMS Freeware CD-ROM][19]. 

[BLISS-36 V4.2 (236) 16-Oct-1989][20] binaries (for TOPS-10) are available at Trailing Edge. 

manuals: 

* [Bliss Language Guide by digital equipment corp., 2nd edition, january 1980, for Bliss-11, Bliss-32, and Bliss-36][21]
* [VAX-11 Bliss-32 User's Guide of 1980, for VAX/VMS V2][22]
* [Bliss Pocket Guide][23]

Other articles: "The BLISS programming language: a history", Ronald F. Brender, Softw., Pract. Exper.2002 

### Early C

[Dennis Ritchie's home page][24] has a number of great documents (and code) from the early days of C, and documentation on C's ancestors, BCPL and B (look for the section titled "C and its immediate ancestors"). Attempting to compile the [Primeval C compilers][25] under a modern C compiler will be instructive as to what C was like at the time of LIL. See also DMR's paper: [The Development of the C Language][13]. 

### C--

A current research project at Harvard, [C--][26] is a C-like language meant to be used as interface between high-level compilers and retargetable, optimizing code generators. It is described as a "[a] portable assembly language that could be generated by a front end and implemented by any of the available code generators." 

### COMFY

COMFY is A Comfortable Set of Control Primitives for Machine Language Programming; a low level compiler, designed and implemented by Henry Baker, see: 

> Henry G. Baker: [COMFY - A Comfortable Set of Control Primitives for Machine Language Programming][27]. SIGPLAN Notices 32(6): 23-27 (1997) 

and 

> Henry G. Baker: The COMFY 6502 Compiler. SIGPLAN Notices 32(11): 25-30 (1997) 

### DECAL

A structured assembler for the PDP-1 c. 1964? [Some DECAL programs][28]. Was considered "hard to debug". 

### EPL

"Early PL/I", used on Multics before full PL/I was available. 

See the EPL entry in the [Multics Glossary][29]

### Burroughs ESPOL

Executive Systems Programming Oriented Language -- the native (and only) implementation language on Burroughs B6700. The Burroughs architecture was (is -- it lives on, in Unisys "A Series" systems) stack oriented, and was meant to directly support High Level Languages. 

Most code was written in Burroughs Extended Algol, with ESPOL reserved only for hardware oriented operations? 

* [Burroughs B5500 Extended Algol][30]
* [Burroughs B5500 ESPOL Ref Man Oct 1967][31]

### MOL940

"Systems programmer compiler language for the SDS 940." Developed for the NASA Langley Human Intellect Augmentation project? 

> Hay & Rulifson. MOL940: Preliminary specifications for an ALGOL-like machine-oriented language for the SDS 940. Interim Technical Report 2. Prepared for NASA, Langley Research Center. Contract NAS1-5904. [March 1968] 

### PL/360

"PL/360, A Programming Language for the 360 Computers", N. Wirth, JACM 15(1):37-74 (Jan 1968) 

Usenet postings; 

* [PL360 history][32]
* [PL360 expressions][33]

From [FOLDOC][34]: 

Structured assembly language for the IBM 360 and IBM 370, with a few high-level constructs. Syntactically it resembles ALGOL 60. Its grammar is defined entirely by operator precedence. 

Files: 

* [PL360 Manual][35] (pdf) 
* [PL360 Manual][36] (text) 
* [pl360.tar.gz][37] (source and object decks, and linking code for both the mainframe and Unix) 
* [Dick Guertin's Introduction to PL360 programming textbook][38]

### PL-11

From [FOLDOC][34]: 

A high-level machine-oriented language for the PDP-11 developed by R.D. Russell of CERN in Nov 1971. It is similar to PL360 and is written in Fortran IV and cross-compiled on other machines. 

Mention of the PL-11 and PL-VAX languages from [PL-11 and PL-VAX][39] languages from a CERN News Letter. 

### PL/S

From [FOLDOC][34]:   

> An IBM machine-oriented language derived from PL/I in the late 1960s for the IBM 360 and IBM 370. PL/S permitted inline assembly language and control over register usage. 

### SYMPL

A subset of Jovial. SYMPL (SYsteMs Programming Language) an Algol-like systems implementation language created by Control Data for its 6000 and 7000 Series computers. 

From [FOLDOC][34]:   

> CDC's derivative of Jovial. SYMPL is a non-re-entrant block structured language with extensive bit manipulation facilities, which is linkable with Fortran. Major parts of CDC systems during the 1970s were written in SYMPL. 

[Used to implement TCP on the Cyber 175.][40]

### TERSE

A commercial "Algebraic Assmbly Language" for the x86 available from [www.terse.com][41]. 

### misc

* [Programming Languages over the Years][42]
* * *

[Phil Budne][43] ![][44]

[1]: http://www.ultimate.com/tp://www.ultimate.com/lil.html
[2]: http://www.ultimate.com/tp://www.ultimate.com/ref.html
[3]: http://www.ultimate.com/tp://www.ultimate.com/tut.html
[4]: http://www.ultimate.com/tp://groups.google.com/group/comp.lang.misc/browse_thread/thread/3f40d1dde811aeb3/53f90a1f896c03ea?hl=en&lnk=st&q=john+mashey+lil#53f90a1f896c03ea
[5]: http://www.ultimate.com/tp://groups.google.com/groups?selm=CpLpMo.1zr%40cbfsb.cb.att.com
[6]: http://www.ultimate.com/tp://groups.google.com/groups?selm=7021%40spim.mips.COM
[7]: http://www.ultimate.com/tp://groups.google.com/groups?selm=138%40mips.UUCP
[8]: http://www.ultimate.com/tp://groups.google.com/groups?selm=127%40hou3c.UUCP
[9]: http://www.ultimate.com/tp://www.cl.cam.ac.uk/users/mr/BCPL.html
[10]: http://www.ultimate.com/tp://cm.bell-labs.com/cm/cs/who/dmr/bcpl.html
[11]: http://www.ultimate.com/tp://www.bell-labs.com/usr/dmr/www/kbman.html
[12]: http://www.ultimate.com/tp://www.bell-labs.com/usr/dmr/www/bintro.html
[13]: http://www.ultimate.com/tp://www.bell-labs.com/usr/dmr/www/chist.html
[14]: http://www.ultimate.com/tp://repository.cmu.edu/cgi/viewcontent.cgi?article=3093&context=compsci
[15]: http://www.ultimate.com/tp://vms.process.com/scripts/fileserv/fileserv.com?BLISS-INTRO
[16]: http://www.ultimate.com/tp://vms.process.com/scripts/fileserv/fileserv.com?BLISS-ARTICLE
[17]: http://www.ultimate.com/tp://pdp-10.trailing-edge.com/bb-m836d-bm/index.html
[18]: http://www.ultimate.com/tp://pdp-10.trailing-edge.com/decus/10-213.html
[19]: http://www.ultimate.com/tp://www.openvms.compaq.com/openvms/freeware/
[20]: http://www.ultimate.com/tp://pdp-10.trailing-edge.com/bls36v42/index.html
[21]: http://www.ultimate.com/tp://www.fh-jena.de/~kleine/history/languages/BlissLanguageGuide.pdf
[22]: http://www.ultimate.com/tp://www.fh-jena.de/~kleine/history/languages/VAX-11_Bliss-32_UsersGuide.pdf
[23]: http://www.ultimate.com/tp://www.fh-jena.de/~kleine/history/languages/BlissPocketGuide.pdf
[24]: http://www.ultimate.com/tp://www.bell-labs.com/usr/dmr/www/
[25]: http://www.ultimate.com/tp://www.bell-labs.com/usr/dmr/www/primevalC.html
[26]: http://www.ultimate.com/tp://www.cminusminus.org/
[27]: http://www.ultimate.com/tp://home.pipeline.com/~hbaker1/sigplannotices/COMFY.TXT
[28]: http://www.ultimate.com/tp://www.grundu.net/projects/pdp-1/
[29]: http://www.ultimate.com/tp://www.multicians.org/mge.html#EPL
[30]: http://www.ultimate.com/tp://www.fh-jena.de/~kleine/history/languages/burroughs_B5500_ExtendedAlgol.pdf
[31]: http://www.ultimate.com/tp://www.fh-jena.de/~kleine/history/languages/burroughs_B5500_ESPOL_RefManOct67.pdf
[32]: http://www.ultimate.com/tp://groups.google.com/groups?q=pl360&hl=en&lr=&ie=UTF-8&selm=1757%40garth.UUCP&rnum=3
[33]: http://www.ultimate.com/tp://groups.google.com/groups?q=pl360&hl=en&lr=&ie=UTF-8&selm=4031%40alice.UUCP&rnum=10
[34]: http://www.ultimate.com/tp://wombat.doc.ic.ac.uk/foldoc/
[35]: http://www.ultimate.com/tp://www.fh-jena.de/~kleine/history/languages/pl360man.pdf
[36]: http://www.ultimate.com/tp://www.fh-jena.de/~kleine/history/languages/pl360man.txt
[37]: http://www.ultimate.com/tp://lindy.stanford.edu/~guertin/pl360.tgz
[38]: http://www.ultimate.com/tp://lindy.stanford.edu/~guertin/document/pl360txt.html
[39]: http://www.ultimate.com/tp://ref.cern.ch/CERN/CNL/2001/001/programming/
[40]: http://www.ultimate.com/tp://gopher.quux.org:70/Archives/usenet-a-news/FA.tcp-ip/82.01.20_ucbvax.5859_fa.tcp-ip.txt
[41]: http://www.ultimate.com/tp://www.terse.com/
[42]: http://www.ultimate.com/tp://ref.cern.ch/CERN/CNL/2001/001/programming/Pr/
[43]: http://www.ultimate.com/
[44]: /cgi-bin/count?lil

