John M. Scholes

Summary

John Morley Scholes (1948–2019) was a British computer scientist. In his professional career he was devoted to the development of the programming language APL. He was the designer and implementer of direct functions.

John Scholes
Scholes in 2011
Born(1948-04-24)24 April 1948
England
Died18 February 2019(2019-02-18) (aged 70)
EducationBSc; University of Manchester; 1969
Known forAPL
Direct functions
AwardsIverson Award[1]
Scientific career
FieldsComputer science
InstitutionsICL
W.S. Atkins Ltd.
European Space Agency
Dyalog Ltd.
Websitedfns.dyalog.com

Personal edit

John Scholes was born on 24 April 1948 to Gerry and Amy Scholes. He grew up in Leamington Spa, Warwickshire, England, and attended Leamington College for Boys between 1960 and 1966. Between 1966 and 1969 he attended the University of Manchester and received a BSc (with honours) in mathematics.[2]

Scholes enjoyed poetic and romantic qualities in his life. Apart from APL, he also found beauty in nature, opera, the music of Tom Waits, the literature of James Joyce,[3] the poetry of W. B. Yeats. He was a member of the Joyce society in Dublin. In 2013, he and his wife Flora Dowling went to Sligo to the W. B. Yeats Summer School and met the poet Seamus Heaney the summer before Heaney died.[2]

The APL side and the romantic side often met: The Depth-First Search video[4] (below) was recorded at dawn on the summer solstice of 2014, with birdsong in the air, while he and his wife were on a 21-day Zen retreat in France led by Thích Nhất Hạnh. Scholes was pleased with both the technical content and the circumstances of that work.[2]

Career edit

Scholes's first job was as a trainee computer programmer with International Computers Limited (ICL) (1969–70) and from there he went on to the Operations Research Department of WS Atkins in Epsom, Surrey (1971–75) and then to the Sales Support Department in Warrington, Lancashire (1976–77). Between 1977 and 1978 he worked with the European Space Agency in Madrid, Spain as a programmer for the International Ultraviolet Explorer project. He then returned to ICL Dataskil working on APL for the VME/B operating system (1978–82). In 1982, he started the Dyalog APL project for Unix machines,[5][6] and in 1988 became a partner and director of the Dyalog Company. In 2004, Scholes sold his shares in the company, but continued as a consultant and, in his words, pursued his passionate interest in APL programming on various mathematical topics in general and functional programming and dfns in particular. Or "nerding", as he also called it.[2]

Direct functions (dfns) edit

Kenneth E. Iverson, the inventor of APL, was dissatisfied with the way user functions were defined. In 1974, he devised "formal function definition" or "direct definition" for use in exposition.[7] A direct definition has two or four parts, separated by colons:

name : expression
name : expression0 : proposition : expression1

Within a direct definition, denotes the left argument and the right argument. In the first instance, the result of expression is the result of the function; in the second instance, the result of the function is that of expression0 if proposition evaluates to 0, or expression1 if it evaluates to 1. Assignments within a direct definition are dynamically local. Examples of using direct definition are found in the 1979 Turing Award Lecture[8] and in books and application papers.[9][10][11][12][13]

Direct definition was too limited for use in larger systems. The ideas were further developed by multiple authors in multiple works,[14][15][16][17][18][19][20] but the results were unwieldy. Of these, the "alternative APL function definition" of Bunda in 1987[19] came closest to current facilities, but is flawed in conflicts with existing symbols and in error handling which would have caused practical difficulties, and was never implemented. The main distillates from the different proposals were that (a) the function being defined is anonymous, with subsequent naming (if required) being effected by assignment; (b) the function is denoted by a symbol and thereby enables anonymous recursion.[13]

In 1996, Scholes invented direct functions or dfns (pronounced "dee funs"), a major distinguishing advance of early 21st century APL over prior versions.[21][22][23][24] Dfns are a unique combination of array programming, higher-order functions, and functional programming. The ideas originated in 1989 when he read a special issue of The Computer Journal on functional programming.[25] He then proceeded to study functional programming and became strongly motivated ("sick with desire", like Yeats) to bring these ideas to APL.[23][24] He initially operated in stealth because he was concerned the changes might be judged too radical and an unnecessary complication of the language; other observers say that he operated in stealth because Dyalog colleagues were not so enamored and thought he was wasting his time and causing trouble for people. Dfns were first presented in the Dyalog Vendor Forum at the APL '96 Conference and released in Dyalog APL in early 1997.[21] Acceptance and recognition were slow in coming. As late as 2008, in Dyalog at 25,[6] a publication celebrating the 25th anniversary of Dyalog Ltd, dfns were barely mentioned (mentioned twice as "dynamic functions" and without elaboration). As of 2019, dfns are implemented in Dyalog APL,[26] NARS2000,[27] and ngn/apl.[28] They also play a key role in efforts to exploit the computational capabilities of a GPU (graphics processing unit).[29][13]

Dfns are illustrated here with an example. Much more extensive explanation and examples are found in the direct functions article and in the references.[22][13][30]

Quicksort on an array works by choosing a "pivot" at random among its major cells, then catenating the sorted major cells which strictly precede the pivot, the major cells equal to the pivot, and the sorted major cells which strictly follow the pivot, as determined by a comparison function ⍺⍺. Defined as a dop (direct operator) Q:

   Q{1≥≢⍵:⍵  ( ⌿⍨0>s)(⌿⍨0=s) ⌿⍨0<s ⍺⍺ ?≢}

   ⍝ precedes            ⍝ follows            ⍝ equals
   2 (×-) 8              8 (×-) 2             8 (×-) 8
¯1                    1                    0

   x 2 19 3 8 3 6 9 4 19 7 0 10 15 14

   (×-) Q x
0 2 3 3 4 6 7 8 9 10 14 15 19 19

Q3 is a variant that catenates the three parts enclosed by the function instead of the parts per se. The three parts generated at each recursive step are apparent in the structure of the final result. Applying the function derived from Q3 to the same argument multiple times gives different results because the pivots are chosen at random. In-order traversal of the results does yield the same sorted array.

   Q3{1≥≢⍵:⍵  ( ⌿⍨0>s)(⌿⍨0=s)⍪⊂ ⌿⍨0<s ⍺⍺ ?≢}

   (×-) Q3 x
┌────────────────────────────────────────────┬─────┬┐
│┌──────────────┬─┬─────────────────────────┐│19 19││
││┌──────┬───┬─┐│6│┌──────┬─┬──────────────┐││     ││
│││┌┬─┬─┐│3 34││ ││┌┬─┬─┐│9│┌┬──┬────────┐│││     ││
│││││02││    ││ ││││78││ │││10│┌──┬──┬┐││││     ││
│││└┴─┴─┘│    ││ ││└┴─┴─┘│ │││  ││1415││││││     ││
││└──────┴───┴─┘│ ││       │││  │└──┴──┴┘││││     ││
││               ││       │└┴──┴────────┘│││     ││
││               │└──────┴─┴──────────────┘││     ││
│└──────────────┴─┴─────────────────────────┘│     ││
└────────────────────────────────────────────┴─────┴┘
   (×-) Q3 x
┌───────────────────────────┬─┬─────────────────────────────┐
│┌┬─┬──────────────────────┐│7│┌────────────────────┬─────┬┐│
│││0│┌┬─┬─────────────────┐││ ││┌──────┬──┬────────┐│19 19│││
│││ │││2│┌────────────┬─┬┐│││ │││┌┬─┬─┐│10│┌──┬──┬┐││     │││
│││ │││ ││┌───────┬─┬┐│6│││││ │││││89││  ││1415││││     │││
│││ │││ │││┌┬───┬┐│4│││ │││││ │││└┴─┴─┘│  │└──┴──┴┘││     │││
│││ │││ │││││3 3│││ │││ │││││ ││└──────┴──┴────────┘│     │││
│││ │││ │││└┴───┴┘│ │││ │││││ │└────────────────────┴─────┴┘│
│││ │││ ││└───────┴─┴┘│ │││││                              
│││ │││ │└────────────┴─┴┘│││                              
│││ │└┴─┴─────────────────┘││                              
│└┴─┴──────────────────────┘│                              
└───────────────────────────┴─┴─────────────────────────────┘

The above formulation is not new; see for example Figure 3.7 of the classic The Design and Analysis of Computer Algorithms.[31] However, unlike the pidgin ALGOL program in Figure 3.7, Q and Q3 are executable, and the partial order used in the sorting is an operand, the (×-) the examples above.[13]

Articles and presentations edit

  • 1985 Operators & Nested Arrays in Dyalog APL[32]
  • 1989 ⎕SM: A Full-Screen Manager for Dyalog APL[33]
  • 1990 Workshop on Defined Operators[34]
  • 1990 A New Development Environment in Dyalog APL[35]
  • 1994 Meeting: Dyalog APL Namespaces[36]
  • 1996 Direct Functions in Dyalog APL[21]
  • 1998 APL98 Workshop – Threads in Dyalog APL[37]
  • 1998 Threads: An Introduction to Multithreading[38]
  • 2001 D: A Functional Subset of Dyalog APL[39]
  • 2001 Letter: Localising the Effects of System Functions in D[40]
  • 2003 dfns@dyalog.com[41]
  • 2003 Hungarian Method Cost Assignment[42]
  • 2004 A Note on Graphs[43]
  • 2005 How to Write Computer Programs[44]
  • 2006 Language Extensions[45]
  • 2006 Functions as Results[46]
  • 2007 Version 11.1 Performance Enhancements[47]
  • 2007 An Investigation into Higher Level Operators[48]
  • 2008 Interpreter Performance[49]
  • 2008 Journaled Files (video)[50] (text)[51]
  • 2008 A Plea for Simplicity (video)[52]
  • 2009 Conway's Game of Life in APL (video)[53]
  • 2009 Introduction to D-functions (videos 1,[54] 2[55])
  • 2009 Session Whizbangs[56]
  • 2009 Complex Numbers (video)[57]
  • 2010 Workshop—Introduction to D-functions (video 1)[58] (video 2)[59]
  • 2011 Conference Edition Workshop[60]
  • 2011 Introducing the Dyalog '11 Conference Edition[61]
  • 2011 APL# (video)[62] (text)[63]
  • 2011 Function Trains for Dyalog APL[64]
  • 2011 What is Functional Programming? (video)[65]
  • 2011 Closures[66]
  • 2012 Potential Version 14.0 Language Features (video)[67] (text)[68]
  • 2012 State-Free Programming (video)[69]
  • 2012 Calling Alan Turing (video)[70]
  • 2012 A Sudoku Solver in APL (video)[71]
  • 2013 Train Spotting in Version 14.0 (video)[72] (text)[73]
  • 2013 Social Skills for Programmers (video)[74]
  • 2014 Depth-First Search in APL (video)[4]
  • 2014 Distractions (video)[75]
  • 2015 Dya(b)log (video)[76] (text)[77]
  • 2015 Future Operator Proposals: Cut, Under, and Merge (video)[78] (text)[79]
  • 2016 New Primitive Functions and Operators (video)[80] (text)[81] (script)[82]
  • 2016 Dyalog Implementation: The Early Years (video)[83]
  • 2017 A Case Study: Recoding from Procedural to Denotative Style (video)[84] (text)[85]
  • 2018 Dfns—Past, Present and Future (video)[23] (text)[24]

Wit edit

Scholes was well known among colleagues for his wit, sense of humor, and comic timing. His "after dinner" presentations at Dyalog conferences were highly anticipated events. A selection of them from the list above:

  • 2008 A Plea for Simplicity (video)[52]
  • 2009 Complex Numbers (video)[57]
  • 2011 What is Functional Programming? (video)[65]
  • 2012 State-Free Programming (video)[69]
  • 2012 Calling Alan Turing (extract of previous item, video)[70]
  • 2013 Social Skills for Programmers (video)[74]
  • 2014 Distractions (video)[75]

Other examples can be found in Scholisms.[86]

References edit

  1. ^ "Kenneth E. Iverson Award". Association for Computing Machinery. Retrieved 15 September 2019.
  2. ^ a b c d A Service to Celebrate the Life of John Morley Scholes, 4 March 2019
  3. ^ Scholes, John (3 February 2015), Reading from Joyce's Ulysses (audio), retrieved 24 September 2019
  4. ^ a b Scholes, John (21 June 2014). Depth-First Search in APL (video). YouTube. Retrieved 21 September 2019.
  5. ^ Polivka, Ray (March 1998). "An Interview with Peter Donnelly and John Scholes". APL Quote Quad. 28 (3): 7–12. doi:10.1145/309730.309731. S2CID 28437582.
  6. ^ a b Dyalog (September 2008). "Dyalog at 25" (PDF). Vector. Retrieved 20 September 2019.
  7. ^ Iverson, Kenneth E. (1974), "Chapter 10, Formal Function Definition", Elementary Functions, IBM Corporation, retrieved 18 September 2019
  8. ^ Iverson, Kenneth E. (August 1980). "Notation as a Tool of Thought". Communications of the ACM. 23 (8): 444–465. doi:10.1145/358896.358899. Retrieved 8 April 2016.
  9. ^ Iverson, Kenneth E. (1976). Elementary Analysis. APL Press.
  10. ^ Orth, D.L. (1976). Calculus in a New Key. APL Press.
  11. ^ Hui, Roger (May 1987). "Some Uses of { and }". APL 87 Conference Proceedings. Retrieved 15 April 2016.
  12. ^ McDonnell, E.E. (May 1987), "Life: Nasty, Brutish, and Short", APL 87 Conference Proceedings, retrieved 6 October 2019
  13. ^ a b c d e Hui, Roger; Kromberg, Morten (June 2020). "APL Since 1978". Proceedings of the ACM on Programming Languages. 4 (HOPL): 1–108. doi:10.1145/3386319. S2CID 218517570.
  14. ^ Iverson, Kenneth E. (26 April 1978), "Operators and Functions, §8", Research Report Number #RC7091, IBM Corporation, retrieved 19 September 2019
  15. ^ Iverson, Kenneth E.; Wooster, Peter (September 1981). "A Function Definition Operator". APL81 Conference Proceedings, APL Quote Quad. 12 (1).
  16. ^ Cheney, Carl M. (March 1981), APL*Plus Nested Array System Reference Manual, §4.17 (PDF), STSC, Inc., retrieved 18 September 2019
  17. ^ Iverson, Kenneth E. (6 January 1983), Rationalized APL, I. P. Sharp Associates, retrieved 19 September 2019
  18. ^ Iverson, Kenneth E. (September 1987). "A Dictionary of APL". APL Quote Quad. 18 (1): 5–40. doi:10.1145/36983.36984. S2CID 18301178. Retrieved 19 September 2019.
  19. ^ a b Bunda, John (May 1987). "APL Function Definition Notation". APL87 Conference Proceedings, APL Quote Quad. 17 (4).
  20. ^ Hui, Roger; et al. (July 1990). "APL\?". Conference proceedings on APL 90: For the future. Vol. 20. pp. 192–200. doi:10.1145/97808.97845. ISBN 089791371X. S2CID 235453656. Retrieved 10 September 2019.
  21. ^ a b c Scholes, John (October 1996). "Direct Functions in Dyalog APL" (PDF). Vector. 13 (2). Retrieved 16 September 2019.
  22. ^ a b Scholes, John (1998–2019), Direct Functions Workspace, retrieved 15 September 2019
  23. ^ a b c Scholes, John (31 October 2018). Dfns: Past, Present and Future (video). Dyalog '18 User Meeting. Retrieved 21 September 2019.
  24. ^ a b c Scholes, John (31 October 2018), Dfns: Past, Present and Future (text) (PDF), Dyalog '18 User Meeting, retrieved 21 September 2019
  25. ^ Wadler, Philip L.; et al. (1 January 1989). "Special Issue on Functional Programming". The Computer Journal. 32 (2).
  26. ^ Dyalog (15 August 2019). Dyalog Programming Reference Guide, version 17.1, Dfns & Dops, pp. 133-147 (PDF). Dyalog Ltd. Retrieved 30 September 2019.
  27. ^ Smith, Bob (2006–2019), NARS2000, retrieved 18 September 2019
  28. ^ Nickolov, Nick (September 2013). "Compiling APL to JavaScript". Vector. 26 (1). Retrieved 19 September 2019.
  29. ^ Hsu, Aaron (2019). A Data Parallel Compiler Hosted on a GPU (pre-print draft) (Ph.D. thesis). Indiana University.
  30. ^ Hui, Roger (26 November 2016), A History of APL in 50 Functions, retrieved 21 September 2019
  31. ^ Aho, A.V.; Hopcroft, J.E.; Ullman, J.D. (1974), The Design and Analysis of Computer Algorithms, Addison-Wesley
  32. ^ Scholes, John (July 1985), "Operators & Nested Arrays in Dyalog APL", Vector, 2 (1)
  33. ^ Curtin, A.D.; Scholes, J.M. (August 1989). "⎕sm: A Full-Screen Manager for Dyalog APL". APL Quote Quad. 19 (4): 107–112. doi:10.1145/75145.75159.
  34. ^ Scholes, John (April 1990), "Workshop on Defined Operators", Vector, 6 (4)
  35. ^ Scholes, John (April 1990), "A New Development Environment in Dyalog APL", Vector, 6 (4)
  36. ^ Scholes, John (July 1994), "Meeting: Dyalog APL Namespaces", Vector, 11 (1), retrieved 21 September 2019
  37. ^ Scholes, John (October 1998), "APL98 Workshop – Threads in Dyalog APL", Vector, 15 (2)
  38. ^ Scholes, John (October 1998), "Threads: An Introduction to Multithreading", Vector, 15 (2)
  39. ^ Scholes, John (April 2001), "D: A Functional Subset of Dyalog APL", Vector, 17 (4), retrieved 21 September 2019
  40. ^ Scholes, John (July 2001), "Localising the Effects of System Functions in D", Vector, 18 (1)
  41. ^ Scholes, John (July 2003), "dfns@dyalog.com", Vector, 20 (1)
  42. ^ Scholes, John (July 2003), "Hungarian Method Cost Assignment", Vector, 20 (1), retrieved 21 September 2019
  43. ^ Scholes, John (April 2004), "A Note on Graphs", Vector, 20 (4)
  44. ^ Scholes, John (May 2005), "How to Write Computer Programs" (PDF), Vector, 21 (3), retrieved 21 September 2019
  45. ^ Scholes, John (17 October 2006), Language Extensions, Dyalog '06 User Conference
  46. ^ Scholes, John (17 October 2006), Functions as Results (PDF), Dyalog '06 User Conference, retrieved 21 September 2019
  47. ^ Delcros, Nicolas; Scholes, John (1 October 2007), Version 11.1 Performance Enhancements, Dyalog '07 User Conference
  48. ^ Scholes, John (1 October 2007), An Investigation into Higher Level Operators, Dyalog '07 User Conference
  49. ^ Delcros, Nicolas; Scholes, John (13 October 2008), Interpreter Performance, Dyalog '08 User Conference
  50. ^ Scholes, John; Smith, Richard (13 October 2008). Journaled Files (video). Dyalog '08 User Conference. Retrieved 21 September 2019.
  51. ^ Scholes, John; Smith, Richard (13 October 2008), Journaled Files (text), Dyalog '08 User Conference, retrieved 21 September 2019
  52. ^ a b Scholes, John (13 October 2008). A Plea for Simplicity (video). Dyalog '08 User Conference. Retrieved 21 September 2019.
  53. ^ Scholes, John (26 January 2009). Conway's Game of Life in APL (video). YouTube. Retrieved 21 September 2019.
  54. ^ Scholes, John (13 September 2009). Introduction to D-functions (video). Dyalog '09 User Conference. Retrieved 21 September 2019.
  55. ^ Scholes, John (13 September 2009). Introduction to D-functions (video). Dyalog '09 User Conference. Retrieved 21 September 2019.
  56. ^ Scholes, John (13 September 2009), Session Whizbangs, Dyalog '09 User Conference
  57. ^ a b Scholes, John (14 September 2009). Complex Numbers (video). Dyalog '09 User Conference. Retrieved 21 September 2019.
  58. ^ Scholes, John (14 September 2010). Workshop—Introduction to D-functions (video). Dyalog '10 User Conference. Retrieved 21 September 2019.
  59. ^ Scholes, John (14 September 2010). Workshop—Introduction to D-functions (video). Dyalog '10 User Conference. Retrieved 21 September 2019.
  60. ^ Foad, Jay; Scholes, John; Hui, Roger (2 October 2011), Conference Edition Workshop, Dyalog '11 User Conference
  61. ^ Scholes, John; Hui, Roger (3 October 2011), Introducing the Dyalog '11 Conference Edition, Dyalog '11 User Conference
  62. ^ Kromberg, Morten; Scholes, John; Manktelow, Jonathan (3 October 2011). APL# (video). Dyalog '11 User Conference. Retrieved 21 September 2019.
  63. ^ Kromberg, Morten; Scholes, John; Manktelow, Jonathan (3 October 2011), APL# (text), Dyalog '11 User Conference, retrieved 21 September 2019
  64. ^ Scholes, John (3 October 2011), Function Trains for Dyalog APL, Dyalog '11 User Conference
  65. ^ a b Scholes, John; Hui, Roger (3 October 2011). What is Functional Programming? (video). Dyalog '11 User Conference. Retrieved 21 September 2019.
  66. ^ Scholes, John (5 October 2011), Closures, Dyalog '11 User Conference
  67. ^ Scholes, John; Hui, Roger (15 October 2012). Potential Version 14.0 Language Features (video). Dyalog '12 User Conference. Retrieved 21 September 2019.
  68. ^ Scholes, John; Hui, Roger (15 October 2012), Potential Version 14.0 Language Features (text), Dyalog '12 User Conference, retrieved 21 September 2019
  69. ^ a b Scholes, John (15 October 2012). State-Free Programming (video). Dyalog '12 User Conference. Retrieved 21 September 2019.
  70. ^ a b Scholes, John (15 October 2012). Calling Alan Turing (video). Dyalog '12 User Conference. Retrieved 22 September 2019.
  71. ^ Scholes, John (27 October 2012). A Sudoku Solver in APL (video). YouTube. Retrieved 21 September 2019.
  72. ^ Scholes, John (22 October 2013). Train Spotting in Version 14.0 (video). Dyalog '13 User Conference. Retrieved 21 September 2019.
  73. ^ Scholes, John (22 October 2013), Train Spotting in Version 14.0 (text) (PDF), Dyalog '13 User Conference, retrieved 21 September 2019
  74. ^ a b Scholes, John (22 October 2013). Social Skills for Programmers (video). Dyalog '13 User Conference. Retrieved 21 September 2019.
  75. ^ a b Scholes, John (22 September 2014). Distractions (video). Dyalog '14 User Meeting. Retrieved 21 September 2019.
  76. ^ Smith, Fiona; Scholes, John; Smith, Richard; Hui, Roger (7 September 2015). Dya(b)log (video). Dyalog '15 User Meeting. Retrieved 21 September 2019.
  77. ^ Smith, Fiona; Scholes, John; Smith, Richard; Hui, Roger (7 September 2015), Dya(b)log (text) (PDF), Dyalog '15 User Meeting, retrieved 21 September 2019
  78. ^ Scholes, John; Hui, Roger (10 September 2015), Future Operator Proposals: Cut, Under, and Merge (video), Dyalog '15 User Meeting, retrieved 21 September 2019 (text)
  79. ^ Scholes, John; Hui, Roger (10 September 2015), Future Operator Proposals: Cut, Under, and Merge (text), Dyalog '15 User Meeting, retrieved 21 September 2019 (text)
  80. ^ Scholes, John; Hui, Roger (10 October 2016). New Primitive Functions and Operators (video). Dyalog '16 User Meeting. Retrieved 21 September 2019.
  81. ^ Scholes, John; Hui, Roger (10 October 2016), New Primitive Functions and Operators (text), Dyalog '16 User Meeting, retrieved 21 September 2019
  82. ^ Scholes, John; Hui, Roger (10 October 2016), New Primitive Functions and Operators (script), Dyalog '16 User Meeting, retrieved 21 September 2019
  83. ^ Taylor, Stephen; Streeter, Geoff; Scholes, John (12 October 2016). Dyalog Implementation: The Early Years (video). Dyalog '16 User Meeting. Retrieved 21 September 2019.
  84. ^ Scholes, John (11 September 2017). A Case Study: Recoding from Procedural to Denotative Style (video). Dyalog '17 User Meeting. Retrieved 21 September 2019.
  85. ^ Scholes, John (11 September 2017), A Case Study—Recoding from Procedural to Denotative Style (PDF), Dyalog '17 User Meeting, retrieved 21 September 2019
  86. ^ Scholes, John (March 2019), Hui, Roger (ed.), Scholisms, retrieved 20 September 2019

External links edit

  • Official website, John Scholes (1948–2019): Genius, Gentleman, and Mischievous Schoolboy
  • Dyalog: Direct functions