Johna M. Scholesa

Johna Scholesa
Scholes2011.jpg
Scholesa w 2011 roku
Urodzić się ( 1948-04-24 ) 24 kwietnia 1948
Anglia
Zmarł 18 lutego 2019 (18.02.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 dfns .dyalog .com

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