Moja odpowiedź jest tak naprawdę rozwinięciem Gillesa, którego nie przeczytałem przed napisaniem własnego. Może jednak jest to pomocne.
Pozwólcie, że zacznę próbę odpowiedzi na wasze pytanie z rozróżnieniem między dwoma wymiarami pracy języków programowania, które odnoszą się zupełnie inaczej do ogólnej teorii języków programowania, a zwłaszcza do rachunku procesowego.
Ten drugi typowo ma miejsce w przemyśle w celu zapewnienia języków programowania jako produktu. Zespoły rozwijające Javę w Oracle i C # w Microsoft to przykłady. Natomiast czyste badania nie są powiązane z produktami. Jego celem jest zrozumienie języków programowania jako obiektów o istotnym znaczeniu i zbadanie struktur matematycznych leżących u podstaw wszystkich języków programowania.
Ze względu na rozbieżne cele różne aspekty teorii języka programowania są istotne w czystych badaniach oraz w badaniach i rozwoju ukierunkowanych na produkt. Poniższy rysunek może wskazywać, co jest ważne gdzie.
W tym miejscu można zapytać, dlaczego te dwa wymiary są tak pozornie różne i jak się odnoszą.
Kluczowym wnioskiem jest to, że badania i rozwój języka programowania mają wiele wymiarów: techniczny, społeczny i ekonomiczny. Niemal z definicji przemysł jest zainteresowany opłacalnością ekonomiczną języków programowania. Microsoft i wsp. Nie rozwijają języków z dobroci serca, ale ponieważ wierzą, że języki programowania dają im przewagę ekonomiczną. Dokładnie zbadali, dlaczego niektóre języki programowania odnoszą sukcesy, a inne, pozornie podobne lub z bardziej zaawansowanymi funkcjami, nie. I odkryli, że nie ma jednego powodu. Języki programowania i ich środowiska są złożone, podobnie jak powody przyjęcia lub zignorowania określonego języka. Ale najważniejszym czynnikiem decydującym o sukcesie języka programowania jest preferencyjne przywiązanie programistów do języków, które są już powszechnie używane: im więcej ludzi używa języka, tym więcej bibliotek, narzędzi, materiałów dydaktycznych jest dostępnych i im bardziej produktywny jest programista może używać tego języka. Nazywa się to również efektem sieciowym. Innym powodem są wysokie koszty zamiany języków dla osób i organizacji: opanowanie języka, szczególnie dla niezbyt doświadczonego programisty, a gdy odległość semantyczna do znanych języków jest duża, jest poważnym i czasochłonnym wysiłkiem. Biorąc pod uwagę te fakty, można zapytać, dlaczego nowe języki w ogóle się cieszą? Dlaczego firmy w ogóle opracowują nowe języki? Dlaczego nie pozostaniemy przy Javie lub Cobolu? Myślę, że istnieje kilka kluczowych powodów, dla których język nie odnosi sukcesu,
Otwiera się nowa domena programowania, w której nie ma żadnych operatorów zasiedlających. Podstawowym przykładem jest sieć z towarzyszącym jej wzrostem Javascript.
Lepkość językowa. Rozumiem przez to wysoką cenę zmiany języka. Ale czasami programiści przechodzą do różnych dziedzin, zabierając ze sobą język programowania i odnosząc sukces ze starym językiem w nowej dziedzinie.
Język jest wspierany przez dużą firmę o poważnej finansowej sile ognia. To wsparcie zmniejsza ryzyko adopcji, ponieważ wcześni użytkownicy mogą mieć pewność, że język będzie nadal obsługiwany za kilka lat. Dobrym tego przykładem jest C #.
Język może pochodzić z przekonujących narzędzi i ekosystemu. Tutaj również C # i jego ekosystem .Net i Visual Studio można wymienić jako przykład.
Stare języki wychwytują nowe funkcje. Przychodzi mi na myśl Java, która w każdej iteracji czerpie więcej dobrych pomysłów z tradycji programowania funkcjonalnego.
Wreszcie, nowy język może mieć nieodłączne zalety techniczne, np. Być bardziej wyrazisty, mieć lepszą składnię, systemy pisania, które wychwytują więcej błędów itp.
Biorąc to pod uwagę, nie powinno dziwić, że istnieje pewien rozdźwięk między badaniami czystego języka programowania a rozwojem komercyjnego języka programowania. Podczas gdy oba mają na celu usprawnienie budowy i ewolucji oprogramowania, szczególnie w przypadku oprogramowania na dużą skalę, praca w języku programowania przemysłowego musi być bardziej zainteresowana ułatwieniem szybkiego przyjęcia, aby osiągnąć masę krytyczną i uzyskać efekt sieci. Prowadzi to do skoncentrowania badań na rzeczach, na których zależy pracującym programistom. I takie są na przykład dostępność biblioteki, szybkość kompilatora, jakość skompilowanego kodu, przenośność i tak dalej. Rachunek procesowy, który ćwiczymy dzisiaj, jest mało przydatny dla programistów pracujących nad projektami głównego nurtu (chociaż wierzę, że to się zmieni w przyszłości).
Badania nad czystym językiem programowania są zupełnie inne. Działa z uproszczonymi modelami języków programowania: -calculus to ogromne uproszczenie programowania funkcjonalnego. W ten sam sposób -calculus jest ogromnym uproszczeniem współbieżnego programowania. Te ogromne uproszczenia są kluczem do udanych badań. Umożliwiają nam skupienie się na podstawowych mechanizmach obliczeniowych (np.π βλπβ- redukcja do programowania funkcjonalnego, rozdzielczość / unifikacja do programowania logiki, przekazywanie nazw dla obliczeń współbieżnych). Aby zrozumieć, czy język taki jak Scala może mieć pełne możliwości wnioskowania na podstawie typu, nie musimy się martwić o JVM. Rzeczywiście, myślenie o JVM wpłynie negatywnie na lepsze zrozumienie wnioskowania typu. Dlatego abstrakcja obliczeń na małe kalkulatory rdzeniowe jest niezbędna i potężna.
Możesz więc myśleć o badaniach nad językiem programowania jako o ogromnej piaskownicy, w której ludzie bawią się zabawkami, a jeśli znajdą coś interesującego podczas zabawy z konkretną zabawką i dokładnie ją zbadają, to ta interesująca zabawka rozpoczyna swój długi marsz w kierunku powszechnej akceptacji przemysłowej . Mówię długi marsz, ponieważ funkcje językowe opracowane po raz pierwszy przez programistów zajmujących się językiem programowania zwykle trwają dekady, zanim stają się powszechnie akceptowane. Na przykład wyrzucanie elementów bezużytecznych zostało wymyślone w latach 50. XX wieku i stało się szeroko dostępne w Javie w latach 90. Dopasowywanie wzorców nawiązuje do 1970 roku i jest szeroko stosowane dopiero od Scali.
Rachunek procesowy jest szczególnie interesującą zabawką. Ale to zbyt nowe, aby je dokładnie zbadać. To zajmie kolejną dekadę czystych badań. W badaniach nad teorią procesów obecnie bierze się największy sukces badań nad językiem programowania, teorię typów (sekwencyjnych) i rozwija teorię typów współbieżności przekazywania komunikatów. Systemy pisania o umiarkowanej ekspresji dla programowania sekwencyjnego, powiedzmy Hindley-Milner, są teraz dobrze zrozumiane, wszechobecne i akceptowane przez pracujących programistów. Chcielibyśmy mieć umiarkowanie ekspresyjne typy do równoczesnego programowania. Badania w tej dziedzinie rozpoczęły w latach 80. pionierzy tacy jak Milner, Sangiorgi, Turner, Kobayashi, Honda i inni, często opierając się, wprost lub pośrednio, na idei liniowości wynikającej z logiki liniowej. W ciągu ostatnich kilku lat nastąpił znaczny wzrost aktywności i oczekuję, że ta tendencja wzrostowa utrzyma się w dającej się przewidzieć przyszłości. Spodziewam się również, że praca ta zacznie przenikać do badań i rozwoju ukierunkowanego na produkt, częściowo z pragmatycznego powodu, że młodzi badacze, którzy zostali przeszkoleni w zakresie rachunku procesowego, pójdą do pracy w przemysłowych laboratoriach badawczo-rozwojowych, ale także z powodu ewolucji procesora i architektury komputera z sekwencyjnych form obliczeń.
Podsumowując, nie martwiłbym się, że nie znalazłeś nowatorskiej teorii języka programowania, takiej jak rachunek procesowy, przydatnej we własnej pracy nad budowaniem języków. Jest tak po prostu dlatego, że najnowsza teoria nie uwzględnia problemów obecnych języków programowania. Chodzi o przyszłe języki. Nadejście „prawdziwego świata” potrwa. Wiedza, której używasz do tworzenia języków na dziś, to teoria języków programowania z przeszłości. Zachęcam do zapoznania się z rachunkiem procesowym, ponieważ jest to jeden z najbardziej ekscytujących obszarów całej teoretycznej informatyki.