Douglas McIlroy

Last updated
Malcolm Douglas McIlroy
Douglas McIlroy.jpeg
McIlroy at the Japan Prize Foundation in 2011
Born(1932-04-24)April 24, 1932
Newburgh, New York
Alma mater Cornell University (B.S., 1954)
Massachusetts Institute of Technology (Ph.D., 1959)
Known for Macros, Unix pipelines, Unix philosophy, software componentry, echo, diff, sort, join, RUNOFF, tr, Unix manual
Scientific career
Fields Computer science, mathematics, engineering
Thesis On the Solution of the Differential Equations of Conical Shells (1959)
Doctoral advisors Eric Reissner
Website www.cs.dartmouth.edu/~doug/

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 having originally proposed Unix pipelines and developed several Unix tools, such as spell, diff, sort, join, graph, speak, and tr. [1] He was also one of the pioneering researchers of macro processors and programming language extensibility. He participated in the design of multiple influential programming languages, particularly PL/I, SNOBOL, ALTRAN, TMG and C++.

Contents

His seminal work on software componentization [2] and code reuse [3] [4] makes him a pioneer of component-based software engineering and software product line engineering.

Biography

McIlroy earned his bachelor's degree in engineering physics from Cornell University, [5] and a Ph.D. in applied mathematics from MIT in 1959 for his thesis On the Solution of the Differential Equations of Conical Shells (advisor Eric Reissner). [6] He taught at MIT from 1954 to 1958. [5]

McIlroy joined Bell Laboratories in 1958; from 1965 to 1986 was head of its Computing Techniques Research Department (the birthplace of the Unix operating system), and thereafter was Distinguished Member of Technical Staff. [5]

From 1967 to 1968, McIlroy also served as a visiting lecturer at Oxford University. [5]

In 1997, McIlroy retired from Bell Labs, and took a position as an Adjunct Professor in the Dartmouth College Computer Science Department. [5]

He has previously served the Association for Computing Machinery as national lecturer, Turing Award chairman, member of the publications planning committee, and associate editor for the Communications of the ACM , the Journal of the ACM , and ACM Transactions on Programming Languages and Systems . He also served on the executive committee of CSNET. [5]

Research and contributions

Macro processors

McIlroy is considered to be a pioneer of macro processors. [7] [8] [9] In 1959, together with Douglas E. Eastwood of Bell Labs, he introduced conditional and recursive macros into popular SAP assembler, [10] creating what is known as Macro SAP. [11] His 1960 paper was also seminal in the area of extending any (including high-level) programming languages through macro processors. [7] [10] These contributions started the macro-language tradition at Bell Labs ("everything from L6 and AMBIT to C"). [12] McIlroy's macro processing ideas were also the main inspiration for TRAC macro processor. [13]

He also coauthored M6 macro processor in FORTRAN IV, [14] which was used in ALTRAN [15] and later was ported to and included into early versions of Unix. [16]

Contributions to Unix

Throughout the 1960s and 1970s McIlroy contributed programs for Multics (such as RUNOFF [17] ) and Unix operating systems (such as diff , echo, tr, join and look [16] ), versions of which are widespread to this day through adoption of the POSIX standard and Unix-like operating systems. He introduced the idea of Unix pipelines. [17] He also implemented TMG compiler-compiler in PDP-7 and PDP-11 assembly, which became the first high-level programming language running on Unix, prompting development and influencing Ken Thompson's B programming language [17] and Stephen Johnson's Yacc parser-generator. [18]

McIlroy also took over from Dennis Ritchie compilation of the Unix manual "as a labor of love". Particularly, he edited volume 1 of the manual pages for Version 7 Unix. [19] According to Sandy Fraser: "The fact that there was a manual, that he [McIlroy] insisted on a high standard for the manual, meant that he insisted on a high standard for every one of the programs that was documented". [20]

Computer language design

McIlroy influenced the design and implementation of SNOBOL programming language. His string manipulation macros were used extensively in the initial SNOBOL implementation of 1962, and figured prominently in subsequent work, eventually leading to its machine-independent implementation language SIL. The table type (associative array) was added to SNOBOL4 on McIlroy's insistence in 1969. [21]

In 1960s, he participated in the design of PL/I programming language. [4] [22] He was a member of the IBMSHARE committee that designed the language [23] and, together with Robert Morris, wrote the Early PL/I (EPL) compiler in TMG for the Multics project. [24] [25]

Around 1965, McIlroy, together with W. Stanley Brown, implemented the original version of ALTRAN programming language for IBM 7094 computers. [15] [10]

McIlroy has also made a significant influence on design of the programming language C++ (e.g., he proposed the stream output operator <<). [26]

Algorithms

In the 1990s, McIlroy worked on improving sorting techniques, particularly he co-authored an optimized qsort with Jon Bentley. [27]

In 1969, he contributed an efficient algorithm to generate all spanning trees in a graph (first discovered by George J. Minty in 1965). [10] [28]

Awards and recognition

In 1995, he was elected as a Fellow of the American Association for the Advancement of Science. [29] In 2004, he won both the USENIX Lifetime Achievement Award ("The Flame") [30] and its Software Tools User Group (STUG) award. [1] In 2006, he was elected as a member of the National Academy of Engineering. [31]

Views on computing

McIlroy is attributed the quote "The real hero of programming is the one who writes negative code," [32] where the meaning of negative code is taken to be similar to the famous Apple developer, Bill Atkinson, team anecdote [33] (i.e., when a change in a program source makes the number of lines of code decrease ('negative' code), while its overall quality, readability or speed improves).

See also

Literature

Related Research Articles

<span class="mw-page-title-main">Brian Kernighan</span> Canadian computer scientist, co-creator of the Unix operating system

Brian Wilson Kernighan is a Canadian computer scientist. He worked at Bell Labs and contributed to the development of Unix alongside Unix creators Ken Thompson and Dennis Ritchie. Kernighan's name became widely known through co-authorship of the first book on the C programming language with Dennis Ritchie. Kernighan affirmed that he had no part in the design of the C language.

B is a programming language developed at Bell Labs circa 1969 by Ken Thompson and Dennis Ritchie.

In computing, a compiler is a computer program that translates computer code written in one programming language into another language. The name "compiler" is primarily used for programs that translate source code from a high-level programming language to a low-level programming language to create an executable program.

<span class="mw-page-title-main">Literate programming</span> A programming approach of software development

Literate programming is a programming paradigm introduced in 1984 by Donald Knuth in which a computer program is given as an explanation of how it works in a natural language, such as English, interspersed (embedded) with snippets of macros and traditional source code, from which compilable source code can be generated. The approach is used in scientific computing and in data science routinely for reproducible research and open access purposes. Literate programming tools are used by millions of programmers today.

<span class="mw-page-title-main">Macro (computer science)</span> Rule for substituting a set input with a set output

In computer programming, a macro is a rule or pattern that specifies how a certain input should be mapped to a replacement output. Applying a macro to an input is known as macro expansion. The input and output may be a sequence of lexical tokens or characters, or a syntax tree. Character macros are supported in software applications to make it easy to invoke common command sequences. Token and tree macros are supported in some programming languages to enable code reuse or to extend the language, sometimes for domain-specific languages.

SNOBOL is a series of programming languages developed between 1962 and 1967 at AT&T Bell Laboratories by David J. Farber, Ralph E. Griswold and Ivan P. Polonsky, culminating in SNOBOL4. It was one of a number of text-string-oriented languages developed during the 1950s and 1960s; others included COMIT and TRAC.

troff, short for "typesetter roff", is the major component of a document processing system developed by Bell Labs for the Unix operating system. troff and the related nroff were both developed from the original roff.

Joseph Frank Ossanna, Jr. was an American electrical engineer and computer programmer who worked as a member of the technical staff at the Bell Telephone Laboratories in Murray Hill, New Jersey. He became actively engaged in the software design of Multics, a general-purpose operating system used at Bell.

roff is a typesetting markup language. As the first Unix text-formatting computer program, it is a predecessor of the nroff and troff document processing systems.

<span class="mw-page-title-main">Unix philosophy</span> Software development philosophy

The Unix philosophy, originated by Ken Thompson, is a set of cultural norms and philosophical approaches to minimalist, modular software development. It is based on the experience of leading developers of the Unix operating system. Early Unix developers were important in bringing the concepts of modularity and reusability into software engineering practice, spawning a "software tools" movement. Over time, the leading developers of Unix established a set of cultural norms for developing software; these norms became as important and influential as the technology of Unix itself, and have been termed the "Unix philosophy."

Robert H. Morris Sr. was an American cryptographer and computer scientist.

TRACLanguage is a programming language developed between 1959–1964 by Calvin Mooers and first implemented on the PDP-1 in 1964 by L. Peter Deutsch. It was one of three "first languages" recommended by Ted Nelson in Computer Lib. TRAC T64 was used until at least 1984, when Mooers updated it to TRAC T84.

<span class="mw-page-title-main">Stuart Feldman</span> American computer scientist

Stuart Feldman is an American computer scientist. He is best known as the creator of the computer software program make. He was also an author of the first Fortran 77 compiler, was part of the original group at Bell Labs that created the Unix operating system, and participated in development of the ALTRAN and EFL programming languages.

<span class="mw-page-title-main">History of Unix</span>

The history of Unix dates back to the mid-1960s, when the Massachusetts Institute of Technology, AT&T Bell Labs, and General Electric were jointly developing an experimental time-sharing operating system called Multics for the GE-645 mainframe. Multics introduced many innovations, but also had many problems. Bell Labs, frustrated by the size and complexity of Multics but not its aims, slowly pulled out of the project. Their last researchers to leave Multics – among them Ken Thompson, Dennis Ritchie, Doug McIlroy, and Joe Ossanna – decided to redo the work, but on a much smaller scale.

ALTRAN is a programming language for the formal manipulation of rational functions of several variables with integer coefficients. It was developed at Bell Labs in 1960s. ALTRAN is a FORTRAN version of ALPAK rational algebra package, and “can be thought of as a variant of FORTRAN with the addition of an extra declaration, the ‘algebraic’ type declaration.”

<span class="mw-page-title-main">History of compiler construction</span>

In computing, a compiler is a computer program that transforms source code written in a programming language or computer language, into another computer language. The most common reason for transforming source code is to create an executable program.

<span class="mw-page-title-main">Unix</span> Family of computer operating systems

Unix is a family of multitasking, multi-user computer operating systems that derive from the original AT&T Unix, whose development started in 1969 at the Bell Labs research center by Ken Thompson, Dennis Ritchie, and others.

<span class="mw-page-title-main">Ken Thompson</span> American computer scientist, co-creator of the Unix operating system

Kenneth Lane Thompson is an American pioneer of computer science. Thompson worked at Bell Labs for most of his career where he designed and implemented the original Unix operating system. He also invented the B programming language, the direct predecessor to the C programming language, and was one of the creators and early developers of the Plan 9 operating system. Since 2006, Thompson has worked at Google, where he co-developed the Go programming language.

<span class="mw-page-title-main">Lorinda Cherry</span> Computer scientist and original Unix team member (1944–2022)

Lorinda Cherry was an American computer scientist and programmer. Much of her career was spent at Bell Labs, where she was for many years a member of the original Unix Lab. Cherry developed several mathematical tools and utilities for text formatting and analysis, and influenced the creation of others.

<span class="mw-page-title-main">TMG (language)</span>

In computing TMG (TransMoGrifier) is a recursive descent compiler-compiler developed by Robert M. McClure and presented in 1965. TMG ran on systems including OS/360 and early Unix. It was used to build EPL, an early version of PL/I.

References

  1. 1 2 "STUG Award". USENIX. 6 December 2011. Retrieved February 5, 2020.
  2. Bown, Rodney L., ed. (2–5 June 1986). "First International Conference on Ada (R) Programming Language Applications for the NASA Space Station, volume 2 - NASA-TM-101202" (PDF).
  3. McIlroy, Malcolm Douglas (January 1969). "Mass produced software components" (PDF). Software Engineering: Report of a conference sponsored by the NATO Science Committee, Garmisch, Germany, 7–11 Oct. 1968. Scientific Affairs Division, NATO. p. 79.
  4. 1 2 Endres, Albert; Rombach, H. Dieter (2003). A Handbook of Software and Systems Engineering: Empirical Observations, Laws, and Theories. Pearson Education. p. 327.
  5. 1 2 3 4 5 6 "Douglas McIlroy". HOPL: Online Historical Encyclopaedia of Programming Languages.
  6. "M. Douglas (Malcolm) McIlroy". Mathematics Genealogy Project . Retrieved February 7, 2020.
  7. 1 2 Layzell, P. (1985). "The History of Macro Processors in Programming Language Extensibility". The Computer Journal. 28 (1): 29–33. doi: 10.1093/comjnl/28.1.29 .
  8. David Walden (2014). "Macro memories, 1964–2013" (PDF). TUGboat . 35 (1).
  9. Krishnamurthi, Shriram; Felleisen, Matthias; Duba, Bruce F. (2000). Czarnecki, Krzysztof; Eisenecker, Ulrich W. (eds.). "From Macros to Reusable Generative Programming" (PDF). Generative and Component-Based Software Engineering. Lecture Notes in Computer Science. Berlin, Heidelberg: Springer. 1799: 105–120. doi:10.1007/3-540-40048-6_9. ISBN   978-3-540-40048-6. S2CID   2576063. Archived from the original (PDF) on November 25, 2004.
  10. 1 2 3 4 Holbrook, Bernard D.; Brown, W. Stanley. "Computing Science Technical Report No. 99 – A History of Computing Research at Bell Laboratories (1937–1975)". Bell Labs. Archived from the original on September 2, 2014. Retrieved February 2, 2020.
  11. "Macro SAP – Macro compiler modification of SAP". HOPL: Online Historical Encyclopaedia of Programming Languages. Archived from the original on August 13, 2008.
  12. "Bell SAP – SAP with conditional and recursive macros". HOPL: Online Historical Encyclopaedia of Programming Languages. Archived from the original on August 21, 2007.
  13. Mooers, C.N.; Deutsch, L.P. (1965). "TRAC, A Text-Handling Language". Proceeding ACM '65 Proceedings of the 1965 20th national conference. pp. 229–246. doi:10.1145/800197.806048. S2CID   40013081.
  14. Cole, A. J. (1981). Macro Processors (2nd, revised ed.). CUP Archive. p. 254.
  15. 1 2 Hall, A.D., "The ALTRAN System for Rational Function Manipulation — A Survey". Communications of the ACM , 14(8):517–521 (August 1971).
  16. 1 2 McIlroy, M. D. (1987). A Research Unix reader: annotated excerpts from the Programmer's Manual, 1971–1986 (PDF) (Technical report). Computing Science. AT&T Bell Laboratories. 139.
  17. 1 2 3 Ritchie, Dennis M. (1984). "The Evolution of the Unix Time-sharing System". AT&T Bell Laboratories Technical Journal. 63 (6 Part 2): 1577–93. doi:10.1002/j.1538-7305.1984.tb00054.x. Archived from the original on 6 May 2010. As PDF
  18. Johnson, Stephen C. (1975). Yacc: Yet Another Compiler-Compiler (Technical report). Murray Hill, New Jersey: AT&T Bell Laboratories. 32. Retrieved 31 January 2020.
  19. Dzonsons, Kristaps; Schwarze, Ingo. "History of UNIX Manpages". Practical UNIX Manuals.
  20. "The Creation of the UNIX Operating System". Bell Labs. Archived from the original on September 14, 2004.
  21. Griswold, Ralph (1978). "A history of the SNOBOL programming languages". ACM SIGPLAN Notices. ACM. 13 (8): 275–308. doi:10.1145/960118.808393. ISSN   0362-1340. S2CID   5413577.
  22. Lawson, Harold; Bromberg, Howard (June 12, 1997). "The World's First COBOL Compilers". Archived from the original on June 4, 2004.
  23. Michael S. Mahoney (18 August 1989). "Interview with M.D. McIlroy". Princeton.edu. Murray Hill.
  24. R. A. Frieburghouse. "The Multics PL/1 Compiler". Multicians.org.
  25. Tom Van Vleck (ed.). "The Choice of PL/I". Multicians.org.
  26. Stroustrup, Bjarne. "A History of C++: 1979−1991" (PDF).
  27. Jon L. Bentley; M. Douglas McIlroy (November 1993). "Engineering a sort function". Software—Practice & Experience. 23 (11).
  28. Narsingh Deo (1974). Graph Theory with Applications to Engineering and Computer Science. Prentice-Hall. p. 480.
  29. "Elected Fellows: Listing of Fellows who are current members". aaas.org. American Association for the Advancement of Science.
  30. "Flame Award". USENIX. 6 December 2011. Retrieved February 5, 2020.
  31. "Dr. M. Douglas McIlroy". nae.edu. National Academy of Engineering. Retrieved February 5, 2020.
  32. These quotes were heard during a talk he gave to the DLSLUG 12/3/09
  33. "MacPaint and QuickDraw Source Code". Computer History Museum. 18 July 2010.
Bell Labs
cs.dartmouth.edu
Ancestry of Linux
code.google.com