Malcolm Douglas McIlroy (born 1932) is an American mathematician, engineer, and programmer. As of 2019, he is an Adjunct Professor of Computer Science at Dartmouth College. McIlroy is best known for first suggesting the use of Unix pipelines and creating several Unix tools, including echo, spell, diff, sort, join, graph, speak, and tr. He also helped develop early tools for macro processors and methods to expand programming languages. He worked on the design of several important programming languages, such as PL/I, SNOBOL, ALTRAN, TMG, and C++.
His important work on software parts and reusing code made him a pioneer in creating software using reusable components and designing software product lines.
Biography
McIlroy earned a bachelor's degree in engineering physics from Cornell University and a Ph.D. in applied mathematics from MIT in 1959 for his thesis titled On the Solution of the Differential Equations of Conical Shells (advisor: Eric Reissner). He taught at MIT from 1954 to 1958.
In 1958, McIlroy joined Bell Laboratories. From 1965 to 1986, he was the head of the Computing Techniques Research Department, which was the origin of the Unix operating system. After that, he became a Distinguished Member of Technical Staff.
From 1967 to 1968, McIlroy served as a visiting lecturer at Oxford University.
In 1997, McIlroy retired from Bell Labs and later became an adjunct professor in the Computer Science Department at Dartmouth College.
He has served the Association for Computing Machinery in various roles, including national lecturer, chairman of the Turing Award committee, member of the publications planning committee, and associate editor for Communications of the ACM, Journal of the ACM, and ACM Transactions on Programming Languages and Systems. He also served on the executive committee of CSNET.
Research and contributions
McIlroy is recognized as an early leader in the development of macro processors. In 1959, he worked with Douglas E. Eastwood from Bell Labs to introduce conditional and recursive macros into the SAP assembler, creating a system called Macro SAP. His 1960 paper was important for showing how macro processors could expand programming languages, including high-level ones. These contributions began a tradition of using macro languages at Bell Labs, which included systems like L6, AMBIT, and C. McIlroy’s ideas about macro processing also inspired the creation of the TRAC macro processor.
He also helped design the M6 macro processor for FORTRAN IV. This tool was used in ALTRAN and later adapted for early versions of Unix.
Throughout the 1960s and 1970s, McIlroy created programs for Multics (such as RUNOFF) and Unix (such as diff, echo, tr, join, and look). Many of these programs are still widely used today through the POSIX standard and Unix-like systems. He introduced the concept of Unix pipelines. He also built the TMG compiler-compiler using PDP-7 and PDP-11 assembly, which became the first high-level language to run on Unix. This work influenced the development of Ken Thompson’s B programming language and Stephen Johnson’s Yacc parser-generator.
McIlroy took over the task of compiling the Unix manual from Dennis Ritchie, treating it as a personal project. He edited the first volume of the manual pages for Version 7 Unix. Sandy Fraser noted that McIlroy’s insistence on high-quality documentation set a standard for the programs included in the manual.
McIlroy shaped the design of the SNOBOL programming language. His string manipulation macros were used in the first SNOBOL implementation in 1962 and later helped create SIL, a machine-independent implementation language. He also pushed for the addition of the table type (associative array) to SNOBOL4 in 1969.
In the 1960s, McIlroy participated in designing the PL/I programming language. He was part of the IBM–SHARE committee that created the language and, with Robert Morris, wrote the Early PL/I (EPL) compiler using TMG for the Multics project.
Around 1965, McIlroy and W. Stanley Brown created the original version of the ALTRAN programming language for IBM 7094 computers.
McIlroy had a major impact on the design of the C++ programming language. For example, he suggested the stream output operator <<.
In the 1990s, McIlroy worked on improving sorting methods. He co-authored an optimized qsort with Jon Bentley.
In 1969, he developed an efficient algorithm to generate all spanning trees in a graph. This algorithm was first discovered by George J. Minty in 1965.
Awards and recognition
In 1995, he was chosen as a Fellow of the American Association for the Advancement of Science. In 2004, he received both the USENIX Lifetime Achievement Award ("The Flame") and the Software Tools User Group (STUG) award. In 2006, he was selected as a member of the National Academy of Engineering.
Views on computing
McIlroy is said to have stated, "The real hero of programming is the one who writes negative code." This phrase refers to a story from Bill Atkinson, an Apple developer, about a time when changing a program's code made the number of lines shorter. In this case, the program's quality, how easy it is to read, or how fast it works improved.
Literature
- Brock, David C. and McIlroy, Malcom D. (September 30, 2019). Oral history interview with Malcom (Doug) Douglas, first part. Computer History Museum. Page 59.
- Brock, David C. and McIlroy, Malcom D. (November 6, 2019). Oral history interview with Malcom (Doug) Douglas, second part. Computer History Museum. Page 52.