Recherche et défis ouverts dans la théorie du langage de programmation


32

Dans l'esprit de certaines discussions générales comme celle- ci, j'ouvre ce fil avec l'intention de recueillir des opinions sur les défis ouverts et les sujets brûlants de la recherche sur les langages de programmation . J'espère que la discussion pourra même faire émerger des opinions sur l'avenir de la recherche dans les langages de programmation.

Je crois que ce genre de discussion aidera les nouveaux étudiants chercheurs, comme moi, intéressés par le PL, ainsi que ceux qui sont déjà quelque peu impliqués.


7
wiki communautaire?
Suresh Venkat

2
Je pense que cela améliorerait vraiment cette question et ceux qui y répondent si vous citiez ou résumiez le texte de la question "Frontières du TCS". La portée attendue des réponses à cette question n'est pas claire tandis que l'autre question est plus précise quant à ce qu'elle attendait.
Vijay D

quand j'ai posé cette question sur stackoverflow il y a quelque temps ... j'ai eu des downvotes et ma question était close!
Rorschach

Réponses:


23

Je pense que l'objectif global de la théorie du PL est de réduire le coût de la programmation à grande échelle en améliorant les langages de programmation et l'écosystème technologique dans lequel les langues sont utilisées.

Voici quelques descriptions de haut niveau, quelque peu vagues, des domaines de recherche en PL qui ont reçu une attention soutenue et continueront probablement de le faire pendant un certain temps.

  • La plupart des recherches sur les langages de programmation ont été effectuées dans le contexte du calcul séquentiel et, à ce jour, nous avons sans doute convergé vers un noyau de fonctionnalités disponibles dans la plupart des langages de programmation modernes (par exemple, fonctions d'ordre supérieur, inférence de type (partielle), correspondance de modèles). , ADT, polymorphisme paramétrique) et sont bien compris. Il n'y a pas encore de consensus sur les fonctionnalités du langage de programmation pour le calcul simultané et parallèle.

  • En relation avec le point précédent, le domaine de recherche des systèmes de typage a vu l'essentiel de son activité concerner le calcul séquentiel. Pouvons-nous généraliser ce travail pour trouver des disciplines de typage exploitables et utiles contraignant le calcul simultané et parallèle?

  • En tant que cas particulier du point précédent, la correspondance Curry-Howard concerne la théorie de la preuve structurelle et la programmation fonctionnelle, conduisant à un transfert technologique soutenu entre l'informatique et les (fondements des) mathématiques, avec par exemple la théorie du type homotopie en étant un exemple impressionnant. Il existe de nombreuses indications alléchantes selon lesquelles il peut être étendu à (certaines formes de) calcul simultané et parallèle.

  • La spécification et la vérification des programmes ont beaucoup mûri ces dernières années, par exemple avec des assistants de preuve interactifs comme Isabelle et Coq, mais la technologie est encore loin d'être utilisable à grande échelle dans la programmation quotidienne. Il reste encore beaucoup à faire pour améliorer cet état de fait.

  • Langages de programmation et technologie de vérification pour de nouvelles formes de calcul. Je
    pense ici en particulier au calcul quantique et aux mécanismes de calcul d'inspiration biologique, voir par exemple ici .

  • Unification. Il existe de nombreuses approches des langages de programmation, des types, de la vérification, et on sent parfois qu'il y a beaucoup de chevauchement entre eux, et qu'il y a une approche plus abstraite à découvrir. En particulier, les mécanismes de calcul d'inspiration biologique devraient continuer de nous submerger.

Un problème de la recherche sur le PL est qu'il n'y a pas de problème clair et clair comme la question P / NP où nous pouvons immédiatement dire si une solution proposée fonctionne ou non.


1
si je peux ajouter, l'informatique quantique et les langages de programmation quantique, même si l'informatique quantique ne se produit pas, pourtant l'étude de la façon dont certains concepts de programmation pourraient être transférés dans ce modèle de calcul est intéressante si rien d'autre, programmation en langage naturel, programmation floue, et même le calcul physique et la programmation physique (programmation directement sur la matière, au-delà du niveau moléculaire)
Nikos M.

1
@NikosM. Je suis d'accord, QC est un gros problème et fait l'objet d'une enquête approfondie. Cet article montre un lien surprenant entre les fondements de la mécanique quantique et la théorie du langage de programmation, mis à jour uniquement par l'abstraction.
Martin Berger

Bien, une question pourrait peut-être aborder ce type de relations formelles (ou non formelles)
Nikos M.

11

Permettez-moi d'énumérer quelques hypothèses qui limitent la recherche en langage de programmation. Celles-ci sont difficiles à rompre car elles ont le sentiment d'être une partie essentielle de la nature des langages de programmation, ou parce que l'exploration d'alternatives ne serait "plus la conception de langages de programmation". Avec chaque hypothèse, j'énumère ses effets limitatifs.

  1. Les programmes sont des constructions syntaxiques.

    • Les vrais programmeurs n'utiliseraient jamais d'iPad pour construire du code source. Et même s'ils le faisaient, ils ne pourraient jamais être aussi efficaces qu'avec Emacs, Eclipse, NetBeans, XCode, etc.
    • La recherche de méthodes alternatives de construction de programmes n'est pas la conception de langages de programmation, mais soit la conception d'interfaces graphiques ou l'éducation (cf. Scratch).
  2. Un programme partiellement écrit ne peut pas être exécuté.

    • À tout le moins, une erreur d'exécution se produit lorsque l'exécution atteint une partie manquante.
    • À quoi pourrait servir l'exécution de programmes inachevés?
  3. Les programmes consistent à donner des instructions aux ordinateurs.

    • La conception d'un langage de programmation n'a rien à dire sur la façon d'écrire et d'organiser les lois. apliances.
    • Les bactéries n'écrivent pas de programmes.
  4. La programmation est comme la création et ne peut pas être faite par des gens ordinaires.

    • Les gens ordinaires ne connaissent pas la syntaxe, les concepts, les outils, ils ne peuvent donc pas écrire de programmes.
    • Même si nous essayons de permettre aux gens ordinaires d'écrire des programmes, ils ne pourront écrire que des choses triviales.

Je pense que je pourrais continuer.


2
James: excellent, j'informerai ma tante. Martin: c'est précisément le genre de chose dont je parle - la programmation non textuelle n'a pas été établie de manière convaincante parce que la communauté PL ne la prend pas au sérieux, parce qu'elle n'a pas été établie de manière convaincante. Mais il me semble assez évident que les humains n'étaient pas faits pour taper des mots sur des écrans. Nous sommes bons pour lancer des trucs et cueillir des bleuets.
Andrej Bauer

1
@AndrejBauer Comme argument scientifique, "c'est assez évident pour moi" n'est pas au-delà de l'amélioration. Si vous regardez l'histoire des systèmes d'écriture, dont les langages de programmation ne sont qu'un exemple récent, leur trajectoire historique est loin de l'écriture logographique. Peut-être que notre capacité à analyser les chaînes est plus pertinente que les bleuets. L'écriture alphabétique a évolué au cours des millénaires, il est donc peu probable qu'elle contienne des bogues massifs et facilement corrigeables. Cela dit, je suis heureux de croire que nous pouvons faire mieux que les chaînes linéaires basées sur ASCII. Je pense que ce sera un certain temps avant que nous le fassions.
Martin Berger

1
Le point de ma réponse est de "sortir des sentiers battus". Examiner les hypothèses cachées dans la recherche sur le PL et voir comment elles limitent le potentiel de recherche sur le PL.
Andrej Bauer

4
@AndrejBauer, je pense que limiter la portée à POPL est une erreur - beaucoup de ce genre de travail est effectué à OOPSLA, ou à l'ICSE, ou même au CHI. POPL n'est intéressé que s'il existe une nouvelle approche formelle, mais POPL n'est pas toute la communauté PL.
Sam Tobin-Hochstadt

2
@DominicMulligan: bien sûr, ce sont toutes des idées très bienvenues. Avec mes commentaires, j'essaie de changer la perception de ce qu'est la programmation. Donc, si les idées théoriques peuvent être mises à profit dans la pratique (j'entends par là que les programmeurs "ordinaires" les utiliseront dans la vie quotidienne), alors nous avons gagné.
Andrej Bauer

0

Il y a un problème que je me pose. Je n'ai aucune idée s'il s'agit d'un défi ouvert.

Les connaissances mathématiques n'ont cessé de croître avec le temps. Les fondements théoriques, les concepts, les notations et les preuves ont évolué au cours des siècles. Les mathématiciens ont géré l'agrégation sans nécessairement vérifier sa cohérence globale de manière systématique et formelle à tout moment (bien qu'il y ait eu des tentatives de le faire).

Nous devons nous attendre à ce que les langages de programmation et les bibliothèques de programmes s'agrègent et évoluent de manière similaire au fil du temps. Quel type d'outils pourrait aider à gérer l'agrégation des résultats de programmation et des bibliothèques afin de les garder cohérents et efficacement utilisables par tous, car les ordinateurs peuvent être plus formels et exigeants en termes de cohérence. Faut-il refaire les bibliothèques pour chaque nouveau langage de programmation. Pourquoi devrions-nous choisir un langage car il a les bonnes bibliothèques pour l'application envisagée plutôt que pour ses qualités intrinsèques en tant que support de programmation?

Sur un sujet différent, vous pourriez trouver des idées dans la question suivante: les langages de programmation deviennent-ils plus comme des langages naturels? Je me rends compte que l'idée peut ne pas plaire à de nombreux informaticiens théoriques, mais elle peut toujours être utile en examinant différentes questions ou d'un point de vue différent. Je suis loin d'être d'accord avec bon nombre des idées qui ont été publiées, mais c'est à cela que sert la discussion.


La concordance est sur-traitée.
Andrej Bauer

1
Je constate qu'il n'y a pas beaucoup d'accord sur cette suggestion, aussi modeste soit-elle. Pourtant, il pourrait être plus utile, du moins pour moi, d'avoir quelques mots explicatifs pour expliquer pourquoi. Au cas où je ne serais pas clair, je n'ai jamais voulu dire que les mathématiques pouvaient être incohérentes, seulement qu'elles n'étaient pas (nécessairement) agrégées avec des moyens cohérents (les historiens diraient mieux). D'un point de vue CS, je peux me tromper en ce qui concerne la difficulté d'agrégation (je n'ai jamais fait de travail technique à ce sujet), mais je ne fais que relier l'expérience utilisateur et le point de vue communément entendu, indirectement préjudiciable aux langages produits par TCS.
babou

1
Eh bien, ma remarque concerne principalement le fait que la cohérence est une idée tout ou rien, alors qu'en réalité la plupart des logiciels sont "principalement cohérents". Et pourtant, nous l'utilisons et le trouvons utile. Pourquoi alors les théoriciens sont-ils obsédés par ce qui semble être un concept pratiquement inaccessible et trop idéaliste? Il semblerait préférable de pouvoir quantifier la cohérence d'une manière moins triviale.
Andrej Bauer

@AndrejBauer - Merci d'avoir répondu. Je suis un peu surpris par votre déclaration, appliquée à ce que j'ai écrit. Rien n'y soutient une certaine forme de cohérence absolue, mais seulement le souhait d'une approche pratique qui rendrait l'agrégation possible et significative dans un contexte en évolution. La plupart du temps, comme vous le dites, pourrait le faire. Trouver ce qui devrait signifier cohérent dans le but faisait partie de l'idée, et je ne proposais aucune réponse, triviale ou autre. Je n'ai jamais été un théoricien obsédé, et je ne vois pas dans votre réponse où nous pourrions être en désaccord.
babou

1
Je pense que je me contentais de parler des "purs théoriciens", c'est tout. Veuillez m'ignorer.
Andrej Bauer

0

il y a eu une énorme innovation et explosion dans les langages de programmation des côtés appliqués et théoriques au cours du siècle dernier, mais on pourrait penser qu'il s'agit d'un événement singulier / unique dans l'histoire de l'informatique, semblable à une "explosion évolutionnaire" (voir aussi "pourquoi y a-t-il tant de langages de programmation?" sur cs.se), et que donc l'avenir ne sera pas comme le passé à cet égard. cependant, il existe certaines tendances actuelles identifiables à long terme dans le jeu / en cours de développement.

  • La complexité de la programmation / des logiciels et les moyens de les gérer / les minimiser / les atténuer / les réduire sont un sujet qui a toujours influencé la conception du langage et est peut-être encore plus important à l'heure actuelle avec des systèmes logiciels très grands / complexes assez courants. c'était un aspect majeur de la logique de conception de la POO, mais nous avons maintenant des systèmes de POO très complexes! une réflexion ciblée a conduit à des classiques dans le domaine tels que Mythical man-month de Brooks qui, à bien des égards, est encore une perspective très valable, peut-être encore plus pertinente que lorsqu'elle a été écrite.

  • parallélisme. il y a un changement de matériel vers un plus grand parallélisme (par exemple multicœur, etc.) et les augmentations de vitesse d'horloge ne sont plus suffisantes pour augmenter les performances. ce changement s'est produit vers le milieu des années 2000 et a une influence majeure sur la recherche / conception linguistique. le parallélisme a toujours été un sujet, mais il a une nouvelle importance / urgence, et il y a une pensée / consensus répandu que le parallélisme est trop compliqué et difficile dans la programmation et peut-être que différentes approches théoriques pourraient atténuer une partie de cela. une belle référence à ce sujet: Le paysage de la recherche informatique parallèle: une vue de Berkeley

  • datamining / big data . ceux-ci influencent la conception du langage de programmation. de nouvelles directions dans l'architecture des bases de données ondulent / impactent les langages de programmation.

  • la superinformatique a un impact significatif sur la conception du langage et chevauche également le parallélisme et le datamining / big data, par exemple avec de nouveaux langages comme MapReduce .

  • programmation visuelle / flux de données . il y a eu une augmentation de ces types de "langages" (dans un sens, la programmation visuelle est en fait à bien des égards découplant la programmation des "langages"). aussi forte pollinisation croisée avec parallélisme.

  • AI . il s'agit plus d'un caractère générique à long terme et son impact sur les langages informatiques et la programmation n'est pas très clair en ce moment, mais il sera probablement très important. dans le passé [sous une forme différente], cela a conduit à des langues entières comme le prologue . une première indication de la façon dont il peut être appliqué avec des résultats frappants est Algorithmes génétiques / Programmation génétique .

une référence qui pourrait avoir quelques idées utiles sur le modèle du "futur des langages de programmation", Beyond Java by Tate. il réfléchit (quoique de façon controversée) que peut-être Java (sans doute l'un des langages de programmation les plus sophistiqués / complets existant) commence à montrer son âge et il y a des signes précoces de nouveaux langages / approches émergents pour se substituer à sa place à long terme.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.