Johna M. Scholesa
Johna Scholesa | |
---|---|
Urodzić się |
Anglia
|
24 kwietnia 1948
Zmarł | 18 lutego 2019 | (w wieku 70)
Edukacja | Licencjat ; Uniwersytet w Manchesterze ; 1969 |
Znany z |
Funkcje bezpośrednie APL |
Nagrody | Nagroda Iversona |
Kariera naukowa | |
Pola | Informatyka |
Instytucje |
MLK W.S. Atkins Ltd. Europejska Agencja Kosmiczna Dyalog Ltd. |
Wpływy |
Kenneth E. Iverson Jim Brown Philip Wadler |
Strona internetowa |
John Morley Scholes (1948–2019) był brytyjskim informatykiem . W swojej karierze zawodowej poświęcił się rozwojowi języka programowania APL . Był projektantem i realizatorem funkcji bezpośrednich .
Osobisty
John Scholes urodził się 24 kwietnia 1948 roku jako syn Gerry'ego i Amy Scholes. Dorastał w Leamington Spa w Warwickshire w Anglii i uczęszczał do Leamington College for Boys w latach 1960-1966. W latach 1966-1969 studiował na Uniwersytecie w Manchesterze i uzyskał tytuł licencjata (z wyróżnieniem) z matematyki.
Scholes miał w swoim życiu cechy poetyckie i romantyczne. Oprócz APL odnajdywał piękno w naturze, operze, muzyce Toma Waitsa , literaturze Jamesa Joyce'a , poezji WB Yeatsa . Był członkiem towarzystwa Joyce'a w Dublinie . W 2013 roku on i jego żona Flora Dowling pojechali do Sligo na letnią szkołę WB Yeats i spotkali poetę Seamusa Heaneya latem przed śmiercią Heaneya.
Strona APL i strona romantyczna często się spotykały: Film „Przeszukiwanie najpierw głębi” ( poniżej ) został nagrany o świcie podczas letniego przesilenia 2014 roku, przy śpiewie ptaków w powietrzu, kiedy on i jego żona byli na 21-dniowym odosobnieniu Zen w Francja kierowana przez Thích Nhất Hạnh . Scholes był zadowolony zarówno z treści technicznej, jak i okoliczności tej pracy.
Kariera
Pierwszą pracą Scholesa był stażysta programista komputerowy w International Computers Limited (ICL) (1969–70), a stamtąd przeszedł do Działu Badań Operacyjnych WS Atkins w Epsom , Surrey (1971–75), a następnie do Działu Wsparcia Sprzedaży Departament w Warrington , Lancashire (1976–77). W latach 1977-1978 pracował w Europejskiej Agencji Kosmicznej w Madrycie jako programista projektu International Ultraviolet Explorer . Następnie wrócił do ICL Dataskil, pracując nad APL dla VME/B system operacyjny (1978–82). W 1982 rozpoczął projekt Dyalog APL dla Unix , aw 1988 został partnerem i dyrektorem firmy Dyalog. W 2004 roku Scholes sprzedał swoje udziały w firmie, ale kontynuował pracę jako konsultant i, jak sam powiedział, kontynuował swoje pasjonujące zainteresowanie programowaniem APL w zakresie różnych zagadnień matematycznych w ogóle i programowania funkcjonalnego, aw szczególności dfns . Lub „ nerding ”, jak to również nazwał.
Funkcje bezpośrednie (dfns)
Kenneth E. Iverson , wynalazca APL, był niezadowolony ze sposobu definiowania funkcji użytkownika. W 1974 roku opracował „formalną definicję funkcji” lub „definicję bezpośrednią” do wykorzystania w ekspozycji. Definicja bezpośrednia składa się z dwóch lub czterech części oddzielonych dwukropkami:
nazwa : nazwa wyrażenia : wyrażenie0 : propozycja : wyrażenie1
W bezpośredniej definicji ⍺
oznacza lewy argument, a ⍵
prawy argument. W pierwszym przypadku wynik wyrażenia jest
wynikiem funkcji; w drugim przypadku wynikiem funkcji jest wyrażenie0 ,
jeśli zdanie
ma wartość 0, lub wyrażenie1
, jeśli ma wartość 1. Przypisania w ramach definicji bezpośredniej są dynamicznie lokalne . Przykłady użycia bezpośredniej definicji można znaleźć w Turing Award z 1979 r . oraz w książkach i dokumentach aplikacyjnych.
Definicja bezpośrednia była zbyt ograniczona do użytku w większych systemach. Pomysły były dalej rozwijane przez wielu autorów w wielu pracach, ale wyniki były nieporęczne. Spośród nich „alternatywna definicja funkcji APL” Bundy z 1987 r. Była najbliższa obecnym obiektom, ale zawiera błędy w konfliktach z istniejącymi symbolami i obsługą błędów, które spowodowałyby praktyczne trudności, i nigdy nie została wdrożona. Główne destylaty z różnych propozycji były takie, że (a) definiowana funkcja jest anonimowa , a późniejsze nazewnictwo (jeśli jest wymagane) jest dokonywane przez przypisanie; b) funkcja jest oznaczona symbolem i tym samym umożliwia anonimowa rekurencja .
W 1996 roku Scholes wynalazł funkcje bezpośrednie lub dfns (wymawiane jako „dee funs”), co było znaczącym postępem APL z początku XXI wieku w porównaniu z poprzednimi wersjami. Dfns to unikalne połączenie programowania tablicowego , funkcji wyższego rzędu i programowania funkcyjnego . Pomysły zrodziły się w 1989 roku, kiedy przeczytał specjalne wydanie The Computer Journal na temat programowania funkcjonalnego. Następnie zaczął studiować programowanie funkcjonalne i był silnie zmotywowany („chory z pragnienia”, jak Yeats), aby wprowadzić te pomysły do APL. Początkowo działał w ukryciu ponieważ obawiał się, że zmiany mogą zostać uznane za zbyt radykalne i niepotrzebne skomplikowanie języka; inni obserwatorzy twierdzą, że działał ukradkiem, ponieważ koledzy Dyalog nie byli tak zachwyceni i myśleli, że marnuje czas i sprawia ludziom kłopoty. Dfns zostały po raz pierwszy zaprezentowane na Dyalog Vendor Forum na konferencji APL '96 i wydane w Dyalog APL na początku 1997 roku. Akceptacja i uznanie nadchodziły powoli. Dopiero w 2008 roku w Dyalogu w wieku 25 lat , publikacji z okazji 25-lecia Dyalog Ltd, prawie nie wspomniano o dfns (wspomniane dwukrotnie jako „funkcje dynamiczne” i bez rozwinięcia). Od 2019 r. dfns są implementowane w Dyalog APL, NARS2000 i ngn/apl. Odgrywają również kluczową rolę w wysiłkach zmierzających do wykorzystania możliwości obliczeniowych GPU ( procesora graficznego).
Dfns są tutaj zilustrowane przykładem. Znacznie obszerniejsze wyjaśnienia i przykłady można znaleźć w dotyczącym funkcji bezpośrednich oraz w odnośnikach.
Szybkie sortowanie na tablicy ⍵
działa na zasadzie losowego wybierania „oś obrotu” spośród jej głównych komórek, a następnie łączenia posortowanych komórek głównych, które ściśle poprzedzają oś obrotu, głównych komórek równych osi obrotu i posortowanych komórek głównych, które ściśle podążają za osią obrotu, jak określono za pomocą funkcji porównania ⍺⍺
. Zdefiniowany jako dop ( operator bezpośredni ) Q
:
00 0
Q ← { 1 ≥≢ ⍵:⍵ ⋄ ( ∇ ⍵ ⌿⍨ > s ) ⍪ ( ⍵ ⌿⍨ = s ) ⍪ ∇ ⍵ ⌿⍨ < s ← ⍵ ⍺⍺ ⍵ ⌷ ⍨ ?≢ ⍵ } ⍝ poprzedza ⍝ następuje ⍝ równa się 2 ( ×- ) 8 8 ( ×- ) 2 8
0
0
0 ( ×- ) 8 ¯1 1 x ← 2 19 3 8 3 6 9 4 19 7 10 15 14 ( ×- ) Q x 2 3 3 4 6 7 8 9 10 14 15 19 19
Q3
jest wariantem, który łączy trzy części objęte funkcją ⊂
zamiast części per se . Trzy części generowane w każdym kroku rekurencyjnym są widoczne w strukturze wyniku końcowego. Wielokrotne zastosowanie funkcji wyprowadzonej z Q3 do tego samego argumentu daje różne wyniki, ponieważ punkty obrotu są wybierane losowo. Przechodzenie
wyników w kolejności daje tę samą posortowaną tablicę.
00 0
Q3 ← { 1 ≥≢ ⍵:⍵ ⋄ ( ⊂ ∇ ⍵ ⌿⍨ > s ) ⍪ ( ⊂ ⍵ ⌿⍨ = s ) ⍪⊂ ∇ ⍵ ⌿⍨ < s ← ⍵ ⍺⍺ ⍵ ⌷ ⍨ ?≢ ⍵ } ( ×- ) Q3 x ┌───────────────────────────────────── ───────┬─ ────┬┐ │┌──────────────┬─┬─────────────── ────────── ┐│
0
19 19 ││ ││┌──────┬───┬─┐│ 6 │┌──────┬─┬─────── ───────┐││ ││ │││┌┬─┬─┐│ 3 3 │ 4 ││ ││┌┬─┬─┐│ 9 │┌┬──┬────── ──┐│││ ││ ││ │││ │ 2 ││ │ ││ ││││ 7 │ 8 ││ │││ 10 │┌──┬──┬┐││││ ││ │││└┴─┴─┘│ │ │ │ ││└┴─┴─┘│ │││ ││ 14 │ 15 ││││││ ││
││└──────┴───┴─┘│ ││ │ │││ │└──┴──┴┘││││ ││ ││ │ ││ │ │└┴──┴ ────────┘│││ ││ ││ │ │└──────┴─┴─────────── ───┘││ ││ │└─ ─────────────┴─┴──────────────────────── ─┘│ ││ └──── ──────────────────────────────────────── ┴─────┴┘ ( × - ) Q3 x ┌───────────────────────────┬─┬─────── ──────── ──────────────┐ │┌┬─┬──────────────────── ──┐│ 7 │┌─── ─────────────────┬─────┬┐│ │││ 0
│┌┬─┬─────────────────┐││ ││┌──────┬──┬── ──────┐│ 19 19 │││ │││ │││ 2 │┌────────────┬─┬┐│││ │││┌┬─┬─ ┐│ 10 │┌──┬──┬ ┐││ │││ │││ │││ ││┌───────┬─┬┐│ 6 │││││ │││││ 8 │ 9 ││ ││ 14 │ 15 ││ ││ │││ │││ │││ │││┌┬───┬┐│ 4 │││ │││││ │││└┴─┴ ─┘│ │└──┴──┴┘ ││ │││ │││ │││
│││││ 3 3 │││ │││ │││││ ││└──────┴──┴──────── ┘│ │││ │││ │││ │││└┴───┴┘│ │││ │││││ │└────────────────── ──┴─────┴┘│ │││ │││ ││└───────┴─┴┘│ │││││ │ │ │││ │││ │└─ ───────────┴─ ┴┘│││ │ │ │││ │└┴─┴─────────────────┘││ │ │ │ └┴─┴──────── ──────────────┘│ │ │ └──────────────────── ───────┴─┴─ ────────────────────────────┘
Powyższe sformułowanie nie jest nowe; patrz na przykład rysunek 3.7 klasycznej książki The Design and Analysis of Computer Algorithms . Jednak w przeciwieństwie do pidgin ALGOL z rysunku 3.7, Q
i Q3
są wykonywalne, a kolejność częściowa używana w sortowaniu jest operandem ( x- )
w powyższych przykładach.
Artykuły i prezentacje
- 1985 Operatorzy i zagnieżdżone tablice w Dyalog APL
- 1989 ⎕ SM: Pełnoekranowy menedżer dla Dyalog APL
- 1990 Warsztaty na temat zdefiniowanych operatorów
- 1990 Nowe środowisko programistyczne w Dyalog APL
- 1994 Spotkanie: Przestrzenie nazw APL Dyalog
- 1996 Funkcje bezpośrednie w Dyalog APL
- 1998 Warsztaty APL98 – Wątki w Dyalog APL
- 1998 Wątki: wprowadzenie do wielowątkowości
- 2001 D: Funkcjonalny podzbiór Dyalog APL
- z 2001 r .: Lokalizowanie skutków funkcji systemowych w D
- 2003 [email protected]
- Przypisanie kosztów metodą węgierską z 2003 r
- 2004 Uwaga na temat wykresów
- 2005 Jak pisać programy komputerowe
- Rozszerzenia językowe 2006
- 2006 Funkcje jako wyniki
- z 2007 r. Ulepszenia wydajności
- 2007 Dochodzenie w sprawie operatorów wyższego szczebla
- Występ tłumacza 2008
- Pliki z kroniki 2008 (wideo) (tekst)
- 2008 Apel o prostotę (wideo)
- Gra życia Conwaya 2009 w APL (wideo)
- 2009 Wprowadzenie do funkcji D (filmy 1, 2)
- Sesja 2009 Whizbangs
- Liczby zespolone 2009 (wideo)
- 2010 — wprowadzenie do funkcji D (wideo 1) (wideo 2)
- Warsztaty edycji konferencji 2011
- 2011 Przedstawiamy edycję konferencyjną Dyalog '11
- 2011 APL# (wideo) (tekst)
- Pociągi funkcyjne 2011 dla Dyalog APL
- 2011 Czym jest programowanie funkcyjne? (wideo)
- 2011 Zamknięcia
- 2012 Potencjalna wersja 14.0 Funkcje językowe (wideo) (tekst)
- Programowanie bezstanowe 2012 (wideo)
- 2012 Dzwoniąc do Alana Turinga (wideo)
- 2012 Sudoku Solver w APL (wideo)
- 2013 Train Spotting w wersji 14.0 (wideo) (tekst)
- 2013 Umiejętności społeczne dla programistów (wideo)
- 2014 Wyszukiwanie w głąb w APL (wideo)
- 2014 Rozproszenia (wideo)
- 2015 Dya(b)log (wideo) (tekst)
- z 2015 r .: Wytnij, pod i scal (wideo) (tekst)
- 2016 Nowe prymitywne funkcje i operatory (wideo) (tekst) (skrypt)
- 2016 : wczesne lata (wideo)
- Studium przypadku z 2017 r .: Przekodowanie ze stylu proceduralnego na styl denotacyjny (wideo) (tekst)
- 2018 Dfns — przeszłość, teraźniejszość i przyszłość (wideo) (tekst)
Dowcip
Scholes był dobrze znany wśród kolegów ze swojego dowcipu, poczucia humoru i komicznego wyczucia czasu. Jego prezentacje „po obiedzie” na konferencjach Dyalog były bardzo oczekiwanymi wydarzeniami. Wybrane z powyższej listy:
- 2008 Apel o prostotę (wideo)
- Liczby zespolone 2009 (wideo)
- 2011 Czym jest programowanie funkcyjne? (wideo)
- Programowanie bezstanowe 2012 (wideo)
- 2012 Calling Alan Turing (fragment poprzedniej pozycji, wideo)
- 2013 Umiejętności społeczne dla programistów (wideo)
- Rozrywki 2014 (wideo)
Inne przykłady można znaleźć w Scholisms .
Linki zewnętrzne
- Oficjalna strona internetowa , John Scholes (1948–2019): Geniusz, dżentelmen i psotny uczeń
- Dialog: Funkcje bezpośrednie