Code Monkey home page Code Monkey logo

elsix's Introduction

Elsix: An implementation of L^6^, Bell Laboratory's Low-Level Linked List Language

© 2019 Robert Jacobson. Distributed under the MIT license. See LICENSE.txt for more details.

Introduction

This project implements the programming language L^6^, Bell Laboratories' Low-Level Linked List Language, designed and implemented by Kenneth C. Knowlton in 1965 for the IBM 7094 computer at Bell Labs. This language has fallen into obscurity and, to my knowledge, has no extant implementation.

This project implements an L^6^ interpreter in modern C++17. It seems appropriate, however, to honor the memory of the computing pioneers in the construction of this software in some way. I have chosen to do so by following the principles of handmade software as expressed in the Handmade Manifesto.

  1. Information about how to build and install it will eventually be found in the file doc/BUILDING.md. Right now, however, the project is an incomplete work in progress.
  2. A very brief overview of the L^6^ language is given in doc/Basics.md.
  3. A complete list of tests and operations is available in docs/Operations.md.
  4. L^6^ is context sensitive. Some notes documenting important context sensitivities are collected in doc/ContextSensitivity.md. This document is particularly interesting to anyone wishing to implement L^6^ themselves.
  5. A couple of historic character sets likely to have been used by L^6^ are given in doc/CharacterSets.md. The initial release will use ASCII, but a "nostalgia mode" using one of the other alternative character sets is planned.

The rest of this README discusses the historical significance of L^6^ and how the language this project implements differs from the historic L^6^.

History

Original Implementations

The original L^6^ implementation, "7094 L^6^," described in [@cite:Knowlton], was developed by Kenneth C. Knowlton for the IBM 7094 at Bell Labs in Fortan Assembly Programming. The 7094 had a 36-bit word size, 15-bit addressing, and 6-bit character encoding. It was capable of floating point operations, but L^6^ has no floating point literal type.

In [@cite:Knowlton], Knowlton reports that "an extended version of [L^6^] is being written for the GE-635 and GE-645." The GE systems were a logical choice: "[A]s a result of the 36-bit needs, [The GE-635] ended up acting a lot like the 7094. In fact GE offered a box to connect to the 635 called a 9SA that actually allowed the 635 to run 7094 programs." [@cite:Wikipedia]

Elsewhere in the paper, Knowlton references future versions of L^6^:

One restriction on fields for current 7094 L^6^ is that they may not include bits 0-2 or 18-20 of the 0th word. This restriction will be removed in subsequent versions and the examples in this paper do in fact violate it.

In 1968, another implementation, a "London version" called Lsix, was written by R. J. W. Housden for the London University Atlas computer and described in [@cite:Housden]. The Atlas had a 48-bit word size and 24-bit addressing. Lsix retained the maximum limit of 36 for the number of user definable fields, as this limit is imposed by the total number of single character names that may be formed from only digits (10) and letters (26). Likewise, both implementations allow up to 128 word blocks.

Kenneth C. Knowlton

Kenneth C. Knowlton is among the pioneers of the computer age. He began his career as many of the pioneers did, at Bell Labs, in the Computer Techniques Research Department, where he made a variety of contributions to graphics generation, representation, display, and transmission. Knowlton is especially well-known for his pioneering contributions to computer generated art. He developed a variety of programming languages at Bell Labs throughout the 60s for creating computer graphics: BEFLIX, EXPLOR, ATOMS, SPHERES. But he also made contributions in other areas, including human-computer interaction, operating systems, and programming languages.

​Differences from L^6^

This section is still evolving. I anticipate using machine sized words, which means a word will be 64 bits rather than 36 or 48. I also anticipate using UTF-8 with the legacy character sets as options for nostalgic compatibility. The two historic implementations both keep the original limits on user definable fields (36) and number of words per block (128), so it seems appropriate to keep them here.

Possible optional language extensions:

  • More than 128 words per block
  • Multi-character user-definable field names
  • More than 36 user definable fields
  • More bugs
  • C-style number literal representations.

References

{#cite:Knowlton} Kenneth C. Knowlton. 1966. A programmer's description of L^6^. Commun. ACM 9, 8 (August 1966), 616-625. DOI: https://doi.org/10.1145/365758.365792

{#cite:Housden} R. J. W. Housden, The Definition and Implementation of Lsix in BCL, The Computer Journal, Volume 12, Issue 1, February 1969, Pages 15–23, https://doi.org/10.1093/comjnl/12.1.15

{#cite:CCH} "GE-635 System Manual," The Centre for Computing History, ref. i.d. CH15671. Online: http://www.computinghistory.org.uk/det/15671/GE-635-System-Manual/

{#cite:Wikipedia} "GE-600 series", Wikipedia, Accessed September 4, 2019. Online: https://en.wikipedia.org/wiki/GE-600_series#History

BibTex:

@article{Knowlton:1966:PDL:365758.365792,
 author = {Knowlton, Kenneth C.},
 title = {A Programmer's Description of L6},
 journal = {Commun. ACM},
 issue_date = {Aug. 1966},
 volume = {9},
 number = {8},
 month = aug,
 year = {1966},
 issn = {0001-0782},
 pages = {616--625},
 numpages = {10},
 url = {http://doi.acm.org/10.1145/365758.365792},
 doi = {10.1145/365758.365792},
 acmid = {365792},
 publisher = {ACM},
 address = {New York, NY, USA},
}

@article{10.1093/comjnl/12.1.15,
    author = {Housden, R. J. W.},
    title = "{The Definition and Implementation of Lsix in BCL}",
    journal = {The Computer Journal},
    volume = {12},
    number = {1},
    pages = {15-23},
    year = {1969},
    month = {02},
    abstract = "{This paper describes the implementation on the London University Atlas computer of the Bell Telephone Laboratories low level linked list language L6. A syntactical definition of L6 is given in terms of BCL, a general purpose programming language with special emphasis on data structures. The description of the implementation in BCL includes details of the general field handling routines.}",
    issn = {0010-4620},
    doi = {10.1093/comjnl/12.1.15},
    url = {https://doi.org/10.1093/comjnl/12.1.15},
    eprint = {http://oup.prod.sis.lan/comjnl/article-pdf/12/1/15/884858/12-1-15.pdf},
}

elsix's People

Contributors

rljacobson avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.