Multics > People > Stories
21 May 1993

TRAC and the Shell

Tom Van Vleck

Louis Pouzin suggested the name and original design for the Multics shell in 1965. The original design specification of the Multics command language in the MSPM, led by Doug Eastwood of BTL with the input of many others, specified a very complex language. There were "interjected commands" and "evaluated commands" and a very baroque system of option processing, pushing, popping, and merging built into the language, as well as many other features.

Early implementations of the shell in EPL were very slow under the 645 Simulator, so slow that we implemented a hack. The simplest command processing case, a command line containing no shell meta-characters, was isolated in a very small program called the "mini-shell." If a user typed a command line beginning with "." it was sent to the mini-shell by the listener, and executed much faster.

About this time, in 1966, Calvin Mooers published a fine paper in the Communications of the ACM, describing the TRAC (Text Reckoning and Compiling) language . TRAC was the first language name I know of that was trademarked, so that nobody else could call something TRAC if it didn't meet the standards Mooers established. (Ada was the second.) Many Multics programmers at Project MAC read the article. Bill Southworth in particular was enthusiastic about TRAC as a replacement for the shell/mini-shell combination. The TRAC algorithm was right there in the paper: Bill coded it up and demonstrated it on Multics. He also demonstrated that the Multics command language syntax could be mapped trivially onto the TRAC syntax; I forget the differences, but they were mere sugar.

Bill's TRAC-based command processor did not survive in Multics. The command language team came up with a THIRD implementation of the command processor in EPL, I believe a complete rewrite, which simplified the command language syntax and provided an implementation that was efficient enough to let all commands be processed through it. Bob Daley had a major influence on this piece of code. The term "shell" was replaced by "command processor," and didn't return until UNIX; and the only survivals of TRAC in the Multics command processor were the term "active function" (a command that returns a string to the command line for further expansion) and our sharpened understanding of what command processing should be.

Mooers' paper is a gem, still worth reading today. [TRAC, a Procedure-Describing Language for the Reactive Typewriter, Calvin N. Mooers, Comm. ACM Vol. 9, No. 3, p. 215, March 1966]

(I met Calvin Mooers on a mushroom walk perhaps 10 years later, and he told me he believed that Multics had ripped off his language and not given him credit. I told him what I just told you about the history. He deserves credit for the TRAC language and for a fine paper, but to my knowledge Multics did not improperly use his algorithm. He died in 1994.)

posted to USENET 21 May 1993; added to multicians.org Aug 2021