Template:Short description Template:Infobox scientist 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 echo, spell, diff, sort, join, graph, speak, and tr.<ref name="stug"/> 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++.

His seminal work on software componentization<ref>{{#invoke:citation/CS1|citation |CitationClass=web }}</ref> and code reuse<ref>{{#invoke:citation/CS1|citation |CitationClass=web }}</ref><ref name="End03"/> makes him a pioneer of component-based software engineering and software product line engineering.

BiographyEdit

McIlroy earned his bachelor's degree in engineering physics from Cornell University,<ref name="hoplBio"/> 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).<ref>{{#invoke:citation/CS1|citation |CitationClass=web }}</ref> He taught at MIT from 1954 to 1958.<ref name="hoplBio">Template:Cite encyclopedia</ref>

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.<ref name="hoplBio"/>

From 1967 to 1968, McIlroy also served as a visiting lecturer at Oxford University.<ref name="hoplBio"/>

In 1997, McIlroy retired from Bell Labs, and took a position as an adjunct professor in the Dartmouth College Computer Science Department.<ref name="hoplBio"/>

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.<ref name="hoplBio"/>

Research and contributionsEdit

Macro processorsEdit

McIlroy is considered to be a pioneer of macro processors.<ref name="Lay85"/><ref>Template:Cite journal</ref><ref>Template:Cite book</ref> In 1959, together with Douglas E. Eastwood of Bell Labs, he introduced conditional and recursive macros into popular SAP assembler,<ref name="CSTR99">{{#invoke:citation/CS1|citation |CitationClass=web }}</ref> creating what is known as Macro SAP.<ref name="MSAP">Template:Cite encyclopedia</ref> His 1960 paper was also seminal in the area of extending any (including high-level) programming languages through macro processors.<ref name="Lay85">Template:Cite journal</ref><ref name="CSTR99"/> These contributions started the macro-language tradition at Bell Labs ("everything from L6 and AMBIT to C").<ref name="BellSAP">Template:Cite encyclopedia</ref> McIlroy's macro processing ideas were also the main inspiration for TRAC macro processor.<ref name="trac_paper">Template:Cite book</ref>

He also coauthored M6 macro processor in FORTRAN IV,<ref>Template:Cite book</ref> which was used in ALTRAN<ref name="hall71"/> and later was ported to and included into early versions of Unix.<ref name="reader"/>

Contributions to UnixEdit

Throughout the 1960s and 1970s McIlroy contributed programs for Multics (such as RUNOFF<ref name="Evolution">Template:Cite journal As PDF</ref>) and Unix operating systems (such as diff, echo, tr, join and look<ref name="reader">Template:Cite tech report</ref>), 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.<ref name="Evolution"/> 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<ref name="Evolution"/> and Stephen Johnson's Yacc parser-generator.<ref name="yacc">Template:Cite tech report</ref>

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.<ref>{{#invoke:citation/CS1|citation |CitationClass=web }}</ref> 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".<ref name="crea">{{#invoke:citation/CS1|citation |CitationClass=web }}</ref>

Computer language designEdit

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.<ref name="Gris78">Template:Cite journal</ref>

In 1960s, he participated in the design of PL/I programming language.<ref name="End03">Template:Cite book</ref><ref>{{#invoke:citation/CS1|citation |CitationClass=web }}</ref> He was a member of the IBMSHARE committee that designed the language<ref>{{#invoke:citation/CS1|citation |CitationClass=web }}</ref> and, together with Robert Morris, wrote the Early PL/I (EPL) compiler in TMG for the Multics project.<ref>{{#invoke:citation/CS1|citation |CitationClass=web }}</ref><ref>{{#invoke:citation/CS1|citation |CitationClass=web }}</ref>

Around 1965, McIlroy, together with W. Stanley Brown, implemented the original version of ALTRAN programming language for IBM 7094 computers.<ref name="hall71">Hall, A.D., "The ALTRAN System for Rational Function Manipulation — A Survey". Communications of the ACM, 14(8):517–521 (August 1971).</ref><ref name="CSTR99"/>

McIlroy has also made a significant influence on design of the programming language C++ (e.g., he proposed the stream output operator <<).<ref name="hopl2">{{#invoke:citation/CS1|citation |CitationClass=web }}</ref>

AlgorithmsEdit

In the 1990s, McIlroy worked on improving sorting techniques, particularly he co-authored an optimized qsort with Jon Bentley.<ref>Template:Cite journal</ref>

In 1969, he contributed an efficient algorithm to generate all spanning trees in a graph (first discovered by George J. Minty in 1965).<ref name="CSTR99"/><ref>Template:Cite book</ref>

Awards and recognitionEdit

In 1995, he was elected as a Fellow of the American Association for the Advancement of Science.<ref>{{#invoke:citation/CS1|citation |CitationClass=web }}</ref> In 2004, he won both the USENIX Lifetime Achievement Award ("The Flame")<ref>{{#invoke:citation/CS1|citation |CitationClass=web }}</ref> and its Software Tools User Group (STUG) award.<ref name="stug">{{#invoke:citation/CS1|citation |CitationClass=web }}</ref> In 2006, he was elected as a member of the National Academy of Engineering.<ref>{{#invoke:citation/CS1|citation |CitationClass=web }}</ref>

Views on computingEdit

McIlroy is attributed the quote "The real hero of programming is the one who writes negative code,"<ref name="DLSLUG">These quotes were heard during a talk he gave to the DLSLUG 12/3/09</ref> where the meaning of negative code is taken to be similar to the famous Apple developer, Bill Atkinson, team anecdote<ref>{{#invoke:citation/CS1|citation |CitationClass=web }}</ref> (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 alsoEdit

LiteratureEdit

ReferencesEdit

Template:Reflist

External linksEdit

Template:Sister project

Bell Labs
cs.dartmouth.edu
Ancestry of Linux
code.google.com

Template:Multics Template:Timelines of computing Template:Authority control