Ma réponse n'est vraiment qu'une élaboration de Gilles, que je n'avais pas lue avant d'écrire la mienne. C'est peut-être néanmoins utile.
Permettez-moi de commencer ma tentative de répondre à votre question en distinguant deux dimensions du travail des langages de programmation qui se rapportent assez différemment à la théorie du langage de programmation en général et au calcul des processus en particulier.
Ce dernier se déroule généralement dans l'industrie dans le but de fournir des langages de programmation en tant que produit. Les équipes développant Java chez Oracle et C # chez Microsoft en sont des exemples. En revanche, la recherche pure n'est pas liée aux produits. Son objectif est de comprendre les langages de programmation comme des objets d'intérêt intrinsèque et d'explorer les structures mathématiques sous-jacentes à tous les langages de programmation.
En raison d'objectifs divergents, différents aspects de la théorie du langage de programmation sont pertinents dans la recherche pure et dans la R&D axée sur les produits. L'image ci-dessous peut donner une indication de ce qui est important où.
On peut se demander à ce stade pourquoi les deux dimensions sont si différentes en apparence et comment elles sont néanmoins liées.
L'idée principale est que la recherche et le développement de langages de programmation ont plusieurs dimensions: technique, sociale et économique. Presque par définition, l'industrie s'intéresse aux retombées économiques des langages de programmation. Microsoft et al ne développent pas de langages par bonté mais parce qu'ils croient que les langages de programmation leur confèrent un avantage économique. Et ils ont étudié en profondeur pourquoi certains langages de programmation réussissent, et d'autres, apparemment similaires ou avec des fonctionnalités plus avancées, ne le font pas. Et ils ont constaté qu'il n'y avait pas une seule raison. Les langages de programmation et leurs environnements sont complexes, tout comme les raisons pour adopter ou ignorer un langage spécifique. Mais le facteur le plus important pour le succès d'un langage de programmation est l'attachement préférentiel des programmeurs à des langages déjà largement utilisés: plus les gens utilisent un langage, plus les bibliothèques, les outils, le matériel pédagogique sont disponibles et plus le programmeur est productif peut utiliser cette langue. Cela s'appelle également l'effet réseau. Une autre raison est le changement de langue coûteux pour les individus et l'organisation: la maîtrise du langage, en particulier pour un programmeur peu expérimenté, et lorsque la distance sémantique avec les langues familières est grande, est un effort sérieux et long. Compte tenu de ces faits, on peut se demander pourquoi les nouvelles langues gagnent du terrain? Pourquoi les entreprises développent-elles de nouvelles langues? Pourquoi ne restons-nous pas simplement avec Java ou Cobol? Je pense qu'il y a plusieurs raisons principales pour lesquelles une langue réussit,
Un nouveau domaine de programmation s'ouvre et n'a aucun titulaire à déplacer. Le principal exemple est le Web avec son essor concomitant de Javascript.
Adhérence linguistique. J'entends par là le prix élevé du changement de langue. Mais parfois, les programmeurs se déplacent dans différents domaines, emportant un langage de programmation avec eux et réussissant avec l'ancien langage dans le nouveau domaine.
Une langue est poussée par une grande entreprise avec une puissance de feu financière sérieuse. Ce soutien réduit le risque d'adoption, car les premiers utilisateurs peuvent être raisonnablement sûrs que la langue sera toujours prise en charge dans quelques années. Un bon exemple de cela est C #.
Une langue peut venir avec des outils convaincants et un écosystème. Ici aussi, C # et son écosystème .Net et Visual Studio pourraient être mentionnés à titre d'exemple.
Les anciennes langues récupèrent de nouvelles fonctionnalités. Java vient à l'esprit, qui, à chaque itération, reprend plus de bonnes idées de la tradition de programmation fonctionnelle.
Enfin, un nouveau langage pourrait avoir des avantages techniques intrinsèques, par exemple être plus expressif, avoir une syntaxe plus agréable, des systèmes de frappe qui captent plus d'erreurs, etc.
Dans ce contexte, il ne devrait pas être surprenant qu'il y ait un certain décalage entre la recherche pure en langage de programmation et le développement de langage de programmation commercial. Alors que les deux visent à rendre la construction et l'évolution des logiciels plus efficaces, en particulier pour les logiciels à grande échelle, le travail en langage de programmation industriel doit être plus intéressé à faciliter une adoption rapide pour atteindre une masse critique et obtenir l'effet réseau. Cela conduit à une concentration de la recherche sur les choses qui intéressent les programmeurs qui travaillent. Et cela a tendance à être des choses comme la disponibilité de la bibliothèque, la vitesse du compilateur, la qualité du code compilé, la portabilité, etc. Le calcul de processus tel que nous le pratiquons aujourd'hui est peu utile aux programmeurs travaillant sur des projets traditionnels (bien que je pense que cela changera à l'avenir).
λπβ-réduction pour la programmation fonctionnelle, résolution / unification pour la programmation logique, passage de nom pour le calcul simultané). Pour comprendre si un langage comme Scala peut avoir une inférence de type complète viable, nous n'avons pas à nous soucier de la JVM. En effet, la réflexion sur la JVM nuira à une meilleure compréhension de l'inférence de type. C'est pourquoi l'abstraction du calcul en minuscules calculs de base est vitale et puissante.
Donc, vous pouvez penser à la recherche sur le langage de programmation comme un immense bac à sable où les gens jouent avec des jouets, et s'ils trouvent quelque chose d'intéressant en jouant avec un jouet spécifique et ont étudié le jouet à fond, alors ce jouet intéressant commence sa longue marche vers l'acceptation industrielle traditionnelle . Je dis longue marche parce que les fonctionnalités du langage inventées pour la première fois par un chercheur en langage de programmation ont tendance à prendre des décennies avant d'être largement acceptées. Par exemple, la collecte des ordures a été conçue dans les années 1950 et est devenue largement disponible avec Java dans les années 1990. La correspondance des motifs remonte à 1970 et n'est largement utilisée que depuis Scala.
Le calcul de processus est un jouet particulièrement intéressant. Mais c'est trop nouveau pour faire l'objet d'une enquête approfondie. Cela prendra encore une décennie de recherche pure. Ce qui se passe actuellement dans la recherche sur la théorie des processus est de prendre la plus grande réussite de la recherche sur le langage de programmation, la théorie des types (séquentiels) et de développer la théorie des types pour la transmission simultanée de messages. Les systèmes de typage d'expressivité modérée pour la programmation séquentielle, disent Hindley-Milner, sont maintenant bien compris, omniprésents et acceptés par les programmeurs qui travaillent. Nous aimerions avoir des types modérément expressifs pour la programmation simultanée. Les recherches à ce sujet ont commencé dans les années 80 par des pionniers comme Milner, Sangiorgi, Turner, Kobayashi, Honda et d'autres, souvent basés, explicitement ou implicitement, sur l'idée de linéarité qui vient de la logique linéaire. Les dernières années ont vu une augmentation importante de l'activité et je m'attends à ce que cette trajectoire ascendante se poursuive dans un avenir prévisible. Je m'attends également à ce que ce travail commence à s'infiltrer dans la R&D axée sur les produits, en partie pour la raison pragmatique que de jeunes chercheurs qui ont été formés au calcul des processus iront travailler dans des laboratoires de R&D industriels, mais aussi en raison de l'évolution du CPU et de l'architecture informatique. à partir de formes séquentielles de calcul.
En résumé, je ne m'inquiéterais pas que vous ne trouviez pas la théorie de pointe du langage de programmation telle que le calcul de processus utile dans votre propre travail de construction de langages. C'est tout simplement parce que la théorie de pointe ne répond pas aux préoccupations des langages de programmation actuels. Il s'agit de futures langues. Il faudra du temps pour que le «monde réel» se rattrape. Les connaissances que vous utilisez pour créer des langages d'aujourd'hui sont la théorie du langage de programmation du passé. Je vous encourage à en savoir plus sur le calcul des processus car c'est l'un des domaines les plus intéressants de toute l'informatique théorique.