Na jakie „pytanie” stara się odpowiedzieć teoria języka programowania?

10

Od jakiegoś czasu interesowałem się różnymi tematami, takimi jak logika kombinacyjna, rachunek lambda, programowanie funkcjonalne i studiowałem je. Jednak w przeciwieństwie do „teorii obliczeń”, która stara się odpowiedzieć na pytanie „obliczalności”, tj. Rzeczy, które można / nie można obliczyć z różnymi ograniczeniami, staram się znaleźć analogię do „teorii programowania”

Wikipedia opisuje to jako:

Teoria języków programowania (PLT) to dziedzina informatyki, która zajmuje się projektowaniem, wdrażaniem, analizą, charakteryzacją i klasyfikacją języków programowania oraz ich indywidualnymi cechami.

To tak, jakby powiedzieć „wszystko”, co nie jest tak naprawdę konkretne.

Wspólny postęp tematów jest zwykle taki:

Logika kombinacyjna> Rachunek lambda> Teoria typów Lofda> Typowany rachunek Lambda> (coś się tutaj dzieje)> Opracowano języki programowania - które mają bardzo mały związek z CL /λ

Widzę leżącą u podstaw „matematykę” związaną z CL /λi ciekawe dowody, które się w rezultacie ujawniają, w tym twierdzenie Church-Rosser i to jest fajne. Jednak staram się zrozumieć „cel końcowy” tego przedsięwzięcia? Jaki jest święty Graal PLT, jeśli chcesz? Na razie wydaje się, że to tylko drapanie intelektualnego swędzenia, ale tak naprawdę nie mogę przekroczyć mostu od badań / teorii do czegokolwiek praktycznego.

Uwaga: dostaję go do momentu użycia λ-calc dla dowodów nierozstrzygalności. Ale poza jego stosowalnością do „obliczalności” po prostu tego nie rozumiem i trudno mi nawet zrozumieć potrzebę badań nad PLT z tego wąskiego POV. Jakieś istniejące książki, odniesienia, które mogą rzucić światło na „duży obraz” PLT?

Doktorat
źródło
1
Całkowicie ignorujesz całe pokosy PLT w swoim „wspólnym postępie”. Z jakiegoś powodu twój widok wydaje się wypaczonyλ-kalkulus i teoria typów. Rzućmy okiem na artykuły zaakceptowane przez POPL 2019 : współbieżne programowanie losowe, programowanie probabilistyczne, weryfikowalny montaż, efekty algebraiczne, certyfikacja sieci neuronowych, modele słabej pamięci PL i sprzętowe, programowanie kwantowe itp. Wiele rzeczy, które nie są „tylko” teoria typów ”, nie powiedziałbyś?
Andrej Bauer,
Masz 100% racji. Dlatego zawołałem mój „wąski POV”. „Inne tematy” znam tylko czytając tutaj i sprawdzając SIGPLAN / POPL Proceedings. Jeszcze nie znalazłem „całościowego podręcznika / książki”, który zawiera szeroki przegląd PLT, który obejmuje wymienione przez ciebie tematy. Bit teorii typów pochodzi tylko z „mojego” POV (tworzenia?) Języków programowania. Czy masz jakieś wskazówki, które mogłyby zapewnić wprowadzenie na wysokim poziomie do różnych obszarów PLT, aby uzyskać ogólny przegląd? Jestem ciekawy, jakich bazowych „modeli” używają i jak?λ wszędzie?
Dr
2
@PhD Nie ma prezentacji na wysokim poziomie w różnych obszarach PLT, które chcesz, c'est la vie ! Może któregoś dnia to się zmieni. Ale nie wstrzymuj oddechu. Pole ewoluuje szybko i dzieli się na subpola. Inne popularne proste modele toπ-kalkul, strukturalna semantyka operacyjna, proste rachunki imperatywne (jak język WHILE) i wiele innych. Często wymyśla się rachunek różniczkowy zabawki, aby dopasować go do dziedziny aplikacji.
Martin Berger,

Odpowiedzi:

13

Ogólnym celem PLT jest uczynienie inżynierii oprogramowania przemysłowego (w sensie ogólnym) tańszym (również w sensie ogólnym) poprzez optymalizację najważniejszego narzędzia (języków programowania) i powiązanego ekosystemu narzędziowego.

Kilka powodów, dla których matematyka jest zaangażowana:

  • PL są wysoce nietrywialne i nie jest jasne, czy postępują właściwie bez dowodów. Matematyka daje uproszczony model prawdziwych języków programowania. Ten model pozwala nam uczyć się prawdziwych języków programowania w znacznie uproszczonym ustawieniu, usuwając (mam nadzieję) większość problemów już na poziomie modelu. Prawdziwe języki programowania są obecnie matematycznie trudne. Innymi słowy: rachunek lambda to muszka owocowa, E.Coli, sferyczna krowa PLT.

  • PLT nie ma odpowiednich metod empirycznych, które byłoby miło / lepiej mieć, więc matematyka jest wykonywana jako zamiennik.

  • Matematyka jest piękna i głęboka.

  • Matematyka podaje prostą, sprawdzoną metodologię badań, która jest ważna, aby pomóc doktorantom w ukończeniu studiów. Zazwyczaj niektóre warianty np .: Zbadaj PL zawierają XYZ poprzez dodanie go do rachunku lambda. Dodaj proste typy dla XYZ i udowodnij solidność tekstu. Dodaj generyczne dla XYZ i udowodnij poprawność tekstu. Udowodnij twierdzenie parametryczne dla generycznych XYZ. Dodaj typy zależne dla XYZ i udowodnij poprawność typów. Opracuj częściowe wnioskowanie o typach dla typów zależnych od XYZ. Dodaj stopniowe typy dla XYZ i udowodnij solidność tekstu. Dodaj umowy dla XYZ. Każdy z nich to artykuł. Możesz przerwać, jeśli doktorantowi lub postdocowi zabraknie czasu. Każde z powyższych jest interesujące i daje wgląd w informacje ogólne, parametryczne, wnioskowanie o typach itp. Ten potok jest świetnysposób poruszania się po trudnych wodach wszystkich możliwych języków programowania. Drugim sposobem uczenia się jest implementacja języków w kompilatorze, ale jest to mniej praktyczne dla osoby.

Czy PLT jest potrzebne, jest interesującym pytaniem. Wydaje się, że większość pracujących programistów uważa, że ​​tak nie jest. Mylą się: większość języków opracowanych przez pracujących programistów bez tła PLT (np. JavaScript, PHP) zaczyna się okropnie i popełnia wszystkie błędy, których teoretycy PL od dawna nauczyli się unikać. Jeśli PL opracowane przez amatora trafi do głównego nurtu, teoretycy PL potrzebują około dekady naprawienia oczywistych wad (np. Modernizacja statycznego systemu pisania, patrz Typescript). Pozwól, że streszczę tę sytuację:

 Every successful programming language ends up being ML! Either because 
 it was designed by a PL theorist as ML from the start, or because a 
 decade of painful evolution removes all the obvious flaws, leaving ML. ;-)

Poza tym: ten stan rzeczy jest całkowicie winą PLT, ponieważ ponieważ większość z nich nie ma doświadczenia w programowaniu przemysłowym, więc tak naprawdę nie wiem, jakie są bolączki pracujących inżynierów oprogramowania. W szczególności, z powodów socjologicznych, większość teoretyków PL uważa, że ​​czyste programowanie funkcjonalne w językach takich jak Agda jest rozwiązaniem wszystkich problemów, co nie jest w stanie zbadać.

Martin Berger
źródło
1
@MartinBerger: Czy CompCert jest traktowany jako przykład umiejętności obsługi języka programowania „teoretycznie”? Jeśli nie, to jak wysoko ustawiasz pasek, bo CompCert robi wrażenie.
Andrej Bauer,
2
@MartinBerger: Zastanów się nad rozwodnieniem „większość teoretyków PL uważa, że ​​czyste funkcjonalne programowanie w językach takich jak Agda jest rozwiązaniem wszystkich problemów”, ponieważ to tylko twoja racja i wentylacja. Na początek, nawet jeśli spojrzysz na tematy, które są obecnie obecne w ICFP i POPL, większość dotyczy nieczystych języków programowania.
Andrej Bauer,
5
@PhD: PLT to znacznie więcej niż teoria typów. Po prostu zauważasz teorię typów, ponieważ jest to jedno z głównych narzędzi PLT.
Andrej Bauer,
1
@AndrejBauer CompCert, CakeML itp. Są imponujące, ale daleko im do szeroko stosowanych kompilatorów, takich jak LLVM, GCC itp. Ponadto, kompilatory, w przeciwieństwie do jakiegokolwiek oprogramowania w świecie rzeczywistym, mają specyfikację (rodzaj / rodzaj), których po prostu nie dostajesz w normalnej inżynierii oprogramowania przemysłowego. Nie wspominając już o tym, że znaczna część wczesnych prac Xaviera nad CompCert polegała na precyzowaniu specyfikacji.
Martin Berger,
2
@PhD Jeśli chodzi o „„ radykalnie bardziej produktywny ”niż> nie-PLT C / C ++, Java, C #”, pamiętaj, że jeśli spojrzysz na te języki, a dokładniej ich ewolucję w czasie, prawie wszystko, co nabyli czas, np. lambda, monady (LINQ), dopasowanie wzorca, częściowe wnioskowanie typu pochodzi z PLT. Zespół C # ma doktorów PLT. Rzeczywiście w pewnym momencie próbowali mnie zatrudnić. Rozmowa kwalifikacyjna została mi stara się przekonać, że Anders Heijlsberg C # rodzajowych, które musi on się nie podoba w tym czasie ...
Martin Berger