Malcolm Douglas McIlroy | |
|---|---|
McIlroy at the Japan Prize Foundation in 2011 | |
| Born | (1932-04-24)April 24, 1932 (age 93) 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 |
Malcolm Douglas McIlroy (born 1932) is an Americanmathematician,engineer, andprogrammer. As of 2019 he is anAdjunct Professor ofComputer Science atDartmouth College.McIlroy is best known for having originally proposedUnix pipelines and developed severalUnix tools, such as echo,spell,diff,sort,join,graph,speak, andtr.[1] He was also one of the pioneering researchers ofmacro processors and programming language extensibility. He participated in the design of multiple influential programming languages, particularlyPL/I,SNOBOL,ALTRAN,TMG andC++.
His seminal work on software componentization[2] andcode reuse[3][4] makes him a pioneer ofcomponent-based software engineering andsoftware product line engineering.
McIlroy earned hisbachelor's degree in engineering physics fromCornell University,[5] and aPh.D. in applied mathematics fromMIT in 1959 for his thesisOn the Solution of the Differential Equations of Conical Shells (advisorEric Reissner).[6]He taught at MIT from 1954 to 1958.[5]
McIlroy joinedBell 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 atOxford University.[5]
In 1997, McIlroy retired from Bell Labs, and took a position as an adjunct professor in theDartmouth College Computer Science Department.[5]
He has previously served theAssociation for Computing Machinery as national lecturer,Turing Award chairman, member of the publications planning committee, and associate editor for theCommunications of the ACM, theJournal of the ACM, andACM Transactions on Programming Languages and Systems. He also served on the executive committee ofCSNET.[5]
McIlroy is considered to be a pioneer ofmacro processors.[7][8][9] In 1959, together with Douglas E. Eastwood of Bell Labs, he introduced conditional and recursive macros into popularSAP assembler,[10] creating what is known as Macro SAP.[11] His 1960 paper was also seminal in the area of extending any (includinghigh-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 forTRAC macro processor.[13]
He also coauthored M6 macro processor inFORTRAN IV,[14] which was used inALTRAN[15] and later was ported to and included intoearly versions of Unix.[16]
Throughout the 1960s and 1970s McIlroy contributed programs forMultics (such asRUNOFF[17]) andUnix operating systems (such asdiff,echo,tr,join andlook[16]), versions of which are widespread to this day through adoption of thePOSIX standard andUnix-like operating systems. He introduced the idea of Unix pipelines.[17] He also implementedTMG compiler-compiler inPDP-7 andPDP-11 assembly, which became the first high-level programming language running on Unix, prompting development and influencingKen Thompson'sB programming language[17] and Stephen Johnson'sYacc parser-generator.[18]
McIlroy also took over fromDennis Ritchie compilation of theUnix manual "as a labor of love". Particularly, he edited volume 1 of the manual pages for Version 7 Unix.[19] According toSandy 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]
McIlroy influenced the design and implementation ofSNOBOL 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 toSNOBOL4 on McIlroy's insistence in 1969.[21]
In 1960s, he participated in the design ofPL/I programming language.[4][22] He was a member of theIBM–SHARE committee that designed the language[23] and, together withRobert Morris, wrote theEarly PL/I (EPL) compiler inTMG for theMultics project.[24][25]
Around 1965, McIlroy, together with W. Stanley Brown, implemented the original version ofALTRAN programming language forIBM 7094 computers.[15][10]
McIlroy has also made a significant influence on design of the programming languageC++ (e.g., he proposed the stream output operator<<).[26]
In the 1990s, McIlroy worked on improving sorting techniques, particularly he co-authored an optimizedqsort withJon Bentley.[27]
In 1969, he contributed an efficient algorithm to generate allspanning trees in agraph (first discovered by George J. Minty in 1965).[10][28]
In 1995, he was elected as a Fellow of theAmerican Association for the Advancement of Science.[29] In 2004, he won both theUSENIX Lifetime Achievement Award ("The Flame")[30] and its Software Tools User Group (STUG) award.[1] In 2006, he was elected as a member of theNational Academy of Engineering.[31]
McIlroy is attributed the quote "The real hero of programming is the one who writes negative code,"[32] where the meaning ofnegative code is taken to be similar to the famousApple developer,Bill Atkinson, team anecdote[33] (i.e., when a change in a programsource makes the number oflines of code decrease ('negative' code), while its overall quality, readability or speed improves).