stringtranslate.com

Джон М. Скоулз

Джон Морли Шоулз (1948–2019) был британским ученым-компьютерщиком . В своей профессиональной карьере он посвятил себя разработке языка программирования APL . Он был разработчиком и реализатором прямых функций .

Личный

Джон Шоулз родился 24 апреля 1948 года в семье Джерри и Эми Шоулз. Он вырос в Лимингтон-Спа , Уорикшир, Англия, и учился в Лимингтонском колледже для мальчиков с 1960 по 1966 год. С 1966 по 1969 год он учился в Манчестерском университете и получил степень бакалавра наук (с отличием) по математике. [2]

Скоулз наслаждался поэтическими и романтическими качествами в своей жизни. Помимо APL, он также находил красоту в природе, опере, музыке Тома Уэйтса , литературе Джеймса Джойса , [3] поэзии У. Б. Йейтса . Он был членом общества Джойса в Дублине . В 2013 году он и его жена Флора Доулинг отправились в Слайго в летнюю школу У. Б. Йейтса и встретились с поэтом Шеймусом Хини летом перед смертью Хини. [2]

Сторона APL и романтическая сторона часто встречались: видео Depth-First Search [4] (ниже) было записано на рассвете летнего солнцестояния 2014 года, с пением птиц в воздухе, когда он и его жена находились на 21-дневном дзен-ретрите во Франции под руководством Тхить Нят Ханя . Скоулз был доволен как техническим содержанием, так и обстоятельствами этой работы. [2]

Карьера

Первой работой Шоулза была должность стажера-программиста в International Computers Limited (ICL) (1969–70), а оттуда он перешел в отдел исследований операций WS Atkins в Эпсоме , графство Суррей (1971–75), а затем в отдел поддержки продаж в Уоррингтоне , Ланкашир (1976–77). С 1977 по 1978 год он работал в Европейском космическом агентстве в Мадриде, Испания, в качестве программиста для проекта International Ultraviolet Explorer . Затем он вернулся в ICL Dataskil, работая над APL для операционной системы VME/B (1978–82). В 1982 году он начал проект Dyalog APL для машин Unix [5] [6] , а в 1988 году стал партнером и директором компании Dyalog. В 2004 году Шоулз продал свои акции компании, но продолжил работать консультантом и, по его словам, следовал своему страстному интересу к программированию на APL по различным математическим темам в целом и функциональному программированию и dfns в частности. Или « ботанику », как он это еще называл. [2]

Прямые функции (dfns)

Кеннет Э. Айверсон , изобретатель APL, был недоволен тем, как определялись пользовательские функции. В 1974 году он придумал «формальное определение функции» или «прямое определение» для использования в описании. [7] Прямое определение состоит из двух или четырех частей, разделенных двоеточиями:

имя : выражение имя : выражение0 : предложение : выражение1        

В прямом определении обозначает левый аргумент и правый аргумент. В первом случае результатом expressionявляется результат функции; во втором случае результатом функции является результат , expression0если она propositionоценивается как 0, или expression1если она оценивается как 1. Присваивания в прямом определении динамически локальны . Примеры использования прямого определения можно найти в лекции на премии Тьюринга 1979 года [8] , а также в книгах и прикладных статьях. [9] [10] [11] [12] [13]

Прямое определение было слишком ограничено для использования в более крупных системах. Идеи были далее развиты несколькими авторами в нескольких работах, [14] [15] [16] [17] [18] [19] [20] , но результаты были громоздкими. Из них «альтернативное определение функции APL» Бунды в 1987 году [19] было ближе всего к текущим возможностям, но имеет недостатки в конфликтах с существующими символами и в обработке ошибок, что могло бы вызвать практические трудности, и никогда не было реализовано. Главные выводы из различных предложений заключались в том, что (a) определяемая функция является анонимной , с последующим именованием (если требуется), осуществляемым путем присваивания; (b) функция обозначается символом и тем самым допускает анонимную рекурсию . [13]

В 1996 году Шоулз изобрел прямые функции или dfns (произносится как «ди фанс»), крупное отличительное достижение APL начала 21-го века по сравнению с предыдущими версиями. [21] [22] [23] [24] dfns представляют собой уникальное сочетание программирования массивов , функций высшего порядка и функционального программирования . Идеи возникли в 1989 году, когда он прочитал специальный выпуск The Computer Journal о функциональном программировании. [25] Затем он приступил к изучению функционального программирования и был сильно мотивирован («больным желанием», как Йейтс) принести эти идеи в APL. [23] [24] Первоначально он действовал скрытно , потому что беспокоился, что изменения могут быть сочтены слишком радикальными и ненужным усложнением языка; другие наблюдатели говорят, что он действовал скрытно, потому что коллеги Dyalog не были так очарованы и считали, что он зря тратит свое время и доставляет людям неприятности. Dfns были впервые представлены на форуме поставщиков Dyalog на конференции APL '96 и выпущены в Dyalog APL в начале 1997 года. [21] Принятие и признание приходили медленно. Еще в 2008 году в Dyalog at 25 , [6] публикации, посвященной 25-летию Dyalog Ltd, dfns были едва упомянуты (упоминались дважды как «динамические функции» и без уточнений). По состоянию на 2019 год dfns реализованы в Dyalog APL, [26] NARS2000, [27] и ngn/apl. [28] Они также играют ключевую роль в попытках использовать вычислительные возможности GPU ( графического процессора). [29] [13]

Dfns проиллюстрированы здесь на примере. Гораздо более подробное объяснение и примеры можно найти в статье о прямых функциях и в ссылках. [22] [13] [30]

Быстрая сортировка массива работает путем выбора «осевого элемента» случайным образом среди его основных ячеек, а затем катенации отсортированных основных ячеек, которые строго предшествуют опорному элементу, основных ячеек, равных опорному элементу, и отсортированных основных ячеек, которые строго следуют за опорным элементом, как определено функцией сравнения ⍺⍺. Определяется как dop (прямой оператор ) Q:

 Q { 1 ≥≢ ⍵:⍵ ( ⌿⍨ 0 > s ) ( ⌿⍨ 0 = ​​s ) ⌿⍨ 0 < s ⍺⍺ ?≢ }       ⍝ предшествует ⍝ следует ⍝ равно 2 ( ×- ) 8 8 ( ×- ) 2 8 ( ×- ) 8 ¯1 1 0            х 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— это вариант, который объединяет три части, заключенные в функцию, а не части как таковые . Три части, генерируемые на каждом рекурсивном шаге, очевидны в структуре конечного результата. Применение функции, полученной из , Q3к одному и тому же аргументу несколько раз дает разные результаты, поскольку опорные точки выбираются случайным образом. Упорядоченный обход результатов дает тот же отсортированный массив.

 Q3 { 1 ≥≢ ⍵:⍵ ( ⌿⍨ 0 > s ) ( ⌿⍨ 0 = ​​s ) ⍪⊂ ⌿⍨ 0 < s ⍺⍺ ?≢ }       ( ×- ) Q3 x ┌───────────────────────────────────────── ─┬─────┬┐ │┌â€─────────────┬─┬────────────────────────┐│ 19 19 ││ ││┌──────┬───┬─┐│ 6 │┌──────┬─┬─────────────┐││ ││ │││┌┬─┬─┐│ 3 3 4 ││ ││┌┬ ─┬─┐│ 9 │┌┬──┬────────┐│││ ││ │││││ 0 2 ││ ││ ││││ 7 8 ││ │││ 10 │┌──┬──┬┐││││ ││ │││└┴─┴─┘ │ ││ ││└┴─┴─┘│ │││ ││ 14 15 ││││││ ││ ││└──────┴──┴─┘│ ││ │││ │└──┴──┴┘││││ ││ ││ ││ │└┴─ ─┴────────┘│││ ││ ││ │└──────┴─┴──────────────┘││ ││ │└─────────────┴─┴─ ─────────────────────────┘│ ││ └────────────────────────────────────────────┴──── ─┴┘ ( ×- ) Q3 x ┌───────────────────────────┬─┬────────────────── ──────────┐ │┌┬─┬─────────────────────┐│ 7 │┌────────────────── ──┬─────┬┐│ │││ 0 │┌┬─┬────────────────┐││ ││┌──────┬──┬────────┐│ 19 19 │││ │││ │││ 2 │┌───────────┬─┬┐│││ │││┌┬─┬─┐│ 10 │┌──┬──┬┐││ │││ │││ │ ││ ││┌───────┬─┬┐│ 6 │││││ │││││ 8 9 ││ ││ 14 15 ││││ │││ │││ │││ │││┌┬───┬┐│ 4 │││ │││ ││ │││└┴─┴─ ┘│ │└──┴──┴┘││ │││ │││ │││ │││││ 3 3 │││ │││ │││││ ││└─────┴──┴──────┘│ │││ │││ │││ │││└ ┴ ───┴┘│ │││ │││││ │└───────────────────┴─────┴┘│ │││ │││ ││└──────┴─┴ ┘│ │││││ │││ │││ │└───────────┴─┴┘│││ │││ │└┴─┴──────────────┘│ │                                                                            │└┴─┴──────────────────────┘│ └──────────────────────────┴─┴────────────────── ──────────┘  

Вышеприведенная формулировка не нова; см., например, рисунок 3.7 из классической книги «Проектирование и анализ компьютерных алгоритмов» . [31] Однако, в отличие от программы на языке ALGOL на рисунке 3.7, Qи Q3являются исполняемыми, а частичный порядок, используемый при сортировке, является операндом, как в примерах выше. [13](×-)

Статьи и презентации

Остроумие

Шоулз был хорошо известен среди коллег своим остроумием, чувством юмора и комическим моментом. Его "послеобеденные" презентации на конференциях Dyalog были долгожданными событиями. Выборка из них из списка выше:

Другие примеры можно найти в схолизмах . [86]

Ссылки

  1. ^ "Премия Кеннета Э. Айверсона". Ассоциация вычислительной техники . Получено 15 сентября 2019 г.
  2. ^ abcd Служба в честь жизни Джона Морли Скоулза , 4 марта 2019 г.
  3. Scholes, John (3 февраля 2015 г.), Чтение «Улисса» Джойса (аудио) , получено 24 сентября 2019 г.
  4. ^ ab Scholes, John (21 июня 2014 г.). Поиск в глубину в APL (видео). YouTube . Получено 21 сентября 2019 г. .
  5. ^ Поливка, Рэй (март 1998 г.). «Интервью с Питером Доннелли и Джоном Скоулзом». APL Quote Quad . 28 (3): 7–12. doi :10.1145/309730.309731. S2CID  28437582.
  6. ^ ab Dyalog (сентябрь 2008 г.). "Dyalog at 25" (PDF) . Вектор . Получено 20 сентября 2019 г.
  7. ^ Айверсон, Кеннет Э. (1974), «Глава 10, Формальное определение функции», Elementary Functions , IBM Corporation , получено 18 сентября 2019 г.
  8. ^ Айверсон, Кеннет Э. (август 1980 г.). «Нотация как инструмент мышления». Communications of the ACM . 23 (8): 444–465. doi : 10.1145/358896.358899 . Получено 8 апреля 2016 г.
  9. ^ Айверсон, Кеннет Э. (1976). Элементарный анализ . APL Press.
  10. ^ Орт, Д. Л. (1976). Исчисление в новом ключе . APL Press.
  11. ^ Хуэй, Роджер (май 1987). «Некоторые применения { и }». Труды конференции APL 87. Получено 15 апреля 2016 г.
  12. McDonnell, EE (май 1987 г.), «Жизнь: отвратительная, жестокая и короткая», APL 87 Conference Proceedings , получено 6 октября 2019 г.
  13. ^ abcde Хуэй, Роджер ; Кромберг, Мортен (июнь 2020 г.). «APL с 1978 года». Труды ACM по языкам программирования . 4 (HOPL): 1–108. doi : 10.1145/3386319 . S2CID  218517570.
  14. Айверсон, Кеннет Э. (26 апреля 1978 г.), «Операторы и функции, §8», номер исследовательского отчета #RC7091 , IBM Corporation , получено 19 сентября 2019 г.
  15. ^ Айверсон, Кеннет Э .; Вустер, Питер (сентябрь 1981 г.). «Оператор определения функции». Труды конференции APL81, APL Quote Quad . 12 (1).
  16. ^ Чейни, Карл М. (март 1981 г.), Справочное руководство по системе вложенных массивов APL*Plus, §4.17 (PDF) , STSC, Inc. , получено 18 сентября 2019 г.
  17. Айверсон, Кеннет Э. (6 января 1983 г.), Рационализированный APL, IP Sharp Associates , получено 19 сентября 2019 г.
  18. ^ Айверсон, Кеннет Э. (сентябрь 1987 г.). «Словарь APL». APL Quote Quad . 18 (1): 5–40. doi :10.1145/36983.36984. S2CID  18301178. Получено 19 сентября 2019 г.
  19. ^ ab Bunda, John (май 1987 г.). "APL Function Definition Notation". Труды конференции APL87, APL Quote Quad . 17 (4).
  20. ^ Хуэй, Роджер ; и др. (июль 1990 г.). "APL\?". Труды конференции по APL 90: для будущего . Том 20. стр. 192–200. doi :10.1145/97808.97845. ISBN 089791371X. S2CID  235453656 . Получено 10 сентября 2019 г. .
  21. ^ abc Scholes, John (октябрь 1996 г.). "Прямые функции в Dyalog APL" (PDF) . Vector . 13 (2) . Получено 16 сентября 2019 г. .
  22. ^ ab Scholes, John (1998–2019), Direct Functions Workspace , получено 15 сентября 2019 г.
  23. ^ abc Scholes, John (31 октября 2018 г.). Dfns: Past, Present and Future (видео). Встреча пользователей Dyalog '18 . Получено 21 сентября 2019 г.
  24. ^ abc Scholes, John (31 октября 2018 г.), Dfns: Past, Present and Future (текст) (PDF) , Dyalog '18 User Meeting , получено 21 сентября 2019 г.
  25. ^ Вадлер, Филип Л. и др. (1 января 1989 г.). «Специальный выпуск по функциональному программированию». The Computer Journal . 32 (2).
  26. ^ Dyalog (15 августа 2019 г.). Справочник по программированию Dyalog, версия 17.1, Dfns & Dops, стр. 133–147 (PDF) . Dyalog Ltd . Получено 30 сентября 2019 г. .
  27. Смит, Боб (2006–2019), NARS2000 , получено 18 сентября 2019 г.
  28. ^ Николов, Ник (сентябрь 2013 г.). «Компиляция APL в JavaScript». Vector . 26 (1) . Получено 19 сентября 2019 г. .
  29. ^ Хсу, Аарон (2019). Параллельный компилятор данных, размещенный на графическом процессоре (предварительный черновик) (диссертация). Университет Индианы .
  30. Хуэй, Роджер (26 ноября 2016 г.), История APL в 50 функциях , получено 21 сентября 2019 г.
  31. ^ Ахо, А.В .; Хопкрофт, Дж.Э .; Ульман, Дж.Д. (1974), Проектирование и анализ компьютерных алгоритмов , Эддисон-Уэсли
  32. ^ Шоулз, Джон (июль 1985 г.), «Операторы и вложенные массивы в Dyalog APL», Vector , 2 (1)
  33. ^ Кертин, А.Д.; Шоулз, Дж.М. (август 1989 г.). «⎕sm: полноэкранный менеджер для Dyalog APL». APL Quote Quad . 19 (4): 107–112. doi :10.1145/75145.75159.
  34. ^ Шоулз, Джон (апрель 1990 г.), «Семинар по определенным операторам», Vector , 6 (4)
  35. ^ Скоулз, Джон (апрель 1990 г.), «Новая среда разработки в Dyalog APL», Vector , 6 (4)
  36. ^ Scholes, John (июль 1994 г.), «Meeting: Dyalog APL Namespaces», Vector , 11 (1) , получено 21 сентября 2019 г.
  37. ^ Скоулз, Джон (октябрь 1998 г.), «Семинар APL98 – Потоки в Dyalog APL», Vector , 15 (2)
  38. ^ Скоулз, Джон (октябрь 1998 г.), «Потоки: Введение в многопоточность», Vector , 15 (2)
  39. ^ Scholes, John (апрель 2001 г.), «D: Функциональное подмножество Dyalog APL», Vector , 17 (4) , получено 21 сентября 2019 г.
  40. ^ Шоулз, Джон (июль 2001 г.), «Локализация эффектов системных функций в D», Vector , 18 (1)
  41. ^ Скоулз, Джон (июль 2003 г.), "[email protected]", Vector , 20 (1)
  42. ^ Scholes, John (июль 2003 г.), «Hungarian Method Cost Assignment», Vector , 20 (1) , получено 21 сентября 2019 г.
  43. ^ Скоулз, Джон (апрель 2004 г.), «Заметка о графиках», Vector , 20 (4)
  44. ^ Scholes, John (май 2005), «Как писать компьютерные программы» (PDF) , Vector , 21 (3) , получено 21 сентября 2019 г.
  45. ^ Скоулз, Джон (17 октября 2006 г.), Расширения языка , Конференция пользователей Dyalog '06
  46. ^ Scholes, John (17 октября 2006 г.), Функции как результаты (PDF) , Конференция пользователей Dyalog '06 , получено 21 сентября 2019 г.
  47. ^ Делькрос, Николас; Шоулз, Джон (1 октября 2007 г.), Улучшения производительности версии 11.1 , Конференция пользователей Dyalog '07
  48. ^ Шоулз, Джон (1 октября 2007 г.), Исследование операторов более высокого уровня , Конференция пользователей Dyalog '07
  49. ^ Делкрос, Николас; Шоулз, Джон (13 октября 2008 г.), Производительность переводчика , Конференция пользователей Dyalog '08
  50. ^ Scholes, John; Smith, Richard (13 октября 2008 г.). Journaled Files (видео). Конференция пользователей Dyalog '08 . Получено 21 сентября 2019 г.
  51. Scholes, John; Smith, Richard (13 октября 2008 г.), Journaled Files (текст), Dyalog '08 User Conference , получено 21 сентября 2019 г.
  52. ^ ab Scholes, John (13 октября 2008 г.). Призыв к простоте (видео). Конференция пользователей Dyalog '08 . Получено 21 сентября 2019 г.
  53. ^ Scholes, John (26 января 2009 г.). Conway's Game of Life в APL (видео). YouTube . Получено 21 сентября 2019 г.
  54. ^ Scholes, John (13 сентября 2009 г.). Введение в D-функции (видео). Конференция пользователей Dyalog '09 . Получено 21 сентября 2019 г.
  55. ^ Scholes, John (13 сентября 2009 г.). Введение в D-функции (видео). Конференция пользователей Dyalog '09 . Получено 21 сентября 2019 г.
  56. ^ Скоулз, Джон (13 сентября 2009 г.), Сессия Whizbangs , Конференция пользователей Dyalog '09
  57. ^ ab Scholes, John (14 сентября 2009 г.). Complex Numbers (видео). Dyalog '09 User Conference . Получено 21 сентября 2019 г.
  58. ^ Scholes, John (14 сентября 2010 г.). Workshop—Introduction to D-functions (видео). Dyalog '10 User Conference . Получено 21 сентября 2019 г.
  59. ^ Scholes, John (14 сентября 2010 г.). Workshop—Introduction to D-functions (видео). Dyalog '10 User Conference . Получено 21 сентября 2019 г.
  60. ^ Фоад, Джей; Скоулз, Джон; Хуэй, Роджер (2 октября 2011 г.), Conference Edition Workshop , Конференция пользователей Dyalog '11
  61. Скоулз, Джон; Хуэй, Роджер (3 октября 2011 г.), Знакомство с изданием Dyalog '11 Conference Edition , Конференция пользователей Dyalog '11
  62. ^ Кромберг, Мортен; Скоулз, Джон; Манктелов, Джонатан (3 октября 2011 г.). APL# (видео). Конференция пользователей Dialog '11 . Проверено 21 сентября 2019 г.
  63. ^ Кромберг, Мортен; Скоулз, Джон; Манктелов, Джонатан (3 октября 2011 г.), APL # (текст), Конференция пользователей Dyalog '11 , получено 21 сентября 2019 г.
  64. ^ Скоулз, Джон (3 октября 2011 г.), Функциональные поезда для Dyalog APL , Конференция пользователей Dyalog '11
  65. ^ ab Scholes, John; Hui, Roger (3 октября 2011 г.). Что такое функциональное программирование? (видео). Конференция пользователей Dyalog '11 . Получено 21 сентября 2019 г.
  66. ^ Скоулз, Джон (5 октября 2011 г.), Закрытия , Конференция пользователей Dyalog '11
  67. ^ Scholes, John; Hui, Roger (15 октября 2012 г.). Возможные возможности языка версии 14.0 (видео). Конференция пользователей Dyalog '12 . Получено 21 сентября 2019 г.
  68. Scholes, John; Hui, Roger (15 октября 2012 г.), Potential Version 14.0 Language Features (текст), Dyalog '12 User Conference , получено 21 сентября 2019 г.
  69. ^ ab Scholes, John (15 октября 2012 г.). State-Free Programming (видео). Dyalog '12 User Conference . Получено 21 сентября 2019 г.
  70. ^ ab Scholes, John (15 октября 2012 г.). Calling Alan Turing (видео). Конференция пользователей Dyalog '12 . Получено 22 сентября 2019 г.
  71. ^ Scholes, John (27 октября 2012 г.). A Sudoku Solver в APL (видео). YouTube . Получено 21 сентября 2019 г.
  72. ^ Scholes, John (22 октября 2013 г.). Train Spotting в версии 14.0 (видео). Конференция пользователей Dyalog '13 . Получено 21 сентября 2019 г.
  73. ^ Scholes, John (22 октября 2013 г.), Train Spotting in Version 14.0 (текст) (PDF) , Конференция пользователей Dyalog '13 , получено 21 сентября 2019 г.
  74. ^ ab Scholes, John (22 октября 2013 г.). Социальные навыки для программистов (видео). Конференция пользователей Dyalog '13 . Получено 21 сентября 2019 г.
  75. ^ ab Scholes, John (22 сентября 2014 г.). Отвлекающие факторы (видео). Dyalog '14 User Meeting . Получено 21 сентября 2019 г.
  76. ^ Смит, Фиона; Скоулз, Джон; Смит, Ричард; Хуэй, Роджер (7 сентября 2015 г.). Dya(b)log (видео). Встреча пользователей Dyalog '15 . Получено 21 сентября 2019 г.
  77. ^ Смит, Фиона; Скоулз, Джон; Смит, Ричард; Хуэй, Роджер (7 сентября 2015 г.), Dya(b)log (текст) (PDF) , Встреча пользователей Dyalog '15 , получено 21 сентября 2019 г.
  78. ^ Scholes, John; Hui, Roger (10 сентября 2015 г.), Future Operator Proposals: Cut, Under, and Merge (видео), Dyalog '15 User Meeting , получено 21 сентября 2019 г.(текст)
  79. Scholes, John; Hui, Roger (10 сентября 2015 г.), Future Operator Proposals: Cut, Under, and Merge (текст), Dyalog '15 User Meeting , получено 21 сентября 2019 г.(текст)
  80. ^ Scholes, John; Hui, Roger (10 октября 2016 г.). Новые примитивные функции и операторы (видео). Встреча пользователей Dyalog '16 . Получено 21 сентября 2019 г.
  81. Scholes, John; Hui, Roger (10 октября 2016 г.), New Primitive Functions and Operators (текст), Dyalog '16 User Meeting , получено 21 сентября 2019 г.
  82. Scholes, John; Hui, Roger (10 октября 2016 г.), New Primitive Functions and Operators (скрипт), Dyalog '16 User Meeting , получено 21 сентября 2019 г.
  83. ^ Тейлор, Стивен; Стритер, Джефф; Шоулз, Джон (12 октября 2016 г.). Реализация Dyalog: Ранние годы (видео). Встреча пользователей Dyalog '16 . Получено 21 сентября 2019 г.
  84. ^ Scholes, John (11 сентября 2017 г.). Пример: перекодирование из процедурного в денотативный стиль (видео). Dyalog '17 User Meeting . Получено 21 сентября 2019 г.
  85. ^ Scholes, John (11 сентября 2017 г.), A Case Study—Recoding from Procedural to Denotative Style (PDF) , Dyalog '17 User Meeting , получено 21 сентября 2019 г.
  86. ^ Scholes, John (март 2019), Hui, Roger (ред.), Scholisms , получено 20 сентября 2019

Внешние ссылки