La séparation des langues humaines provient de l'évolution (darwinienne?) Dans des communautés isolées. La séparation des langages de programmation provient des variations des besoins techniques, de l'idéologie technique, des changements dans la compréhension technique et théorique, des changements dans notre capacité technique à mettre en œuvre. C'est un processus un peu plus conscient, je pense.
Les langages informatiques pourraient-ils ressembler davantage aux langages naturels? Probablement un peu, jusqu'à un certain point. Je suppose qu'une grande partie de la complexité du langage naturel résulte d'une variété de phénomènes d'évolution simultanés qui n'ont aucune raison de produire un résultat cohérent à un moment donné, même s'il est probable que les anciennes incohérences soient probablement éliminées progressivement tandis que de nouvelles apparaissent. . Je ne suis pas un expert en linguistique diachronique. Mais voulons-nous ce genre de complexité dans les langages de programmation.
La question de l'ambiguïté est importante, mais pas comme l'a déclaré la plupart des gens. Une langue est un moyen de communication, et elle doit être analysée dans le contexte de cette communication (homme-homme, homme-machine, les deux, entre les lieux ou entre les temps, ... pour le dire un peu simpliste). Ce qui importe n'est pas de savoir si vous ne pouvez faire que des déclarations sans ambiguïté dans la langue, mais si vous pouvez toujours vous assurer que la communication sera sans ambiguïté dans son contexte prévu. Il existe un langage de programmation bien connu et largement utilisé, qui permet d'écrire des programmes ambigus (enfin, il l'a fait, mais je n'ai pas regardé les dernières versions depuis un moment). Dans ce cas, le compilateur est suffisamment intelligent pour détecter l'ambiguïté et demander des éclaircissements, qui peuvent être incorporés dans le programme pour éliminer l'ambiguïté. Notez que la détection d'ambiguïté ne signifie pas qu'un seul des choix possibles a un sens, ils le font tous. La question est de savoir si l'une des entités communicantes peut détecter l'ambiguïté afin que l'expéditeur puisse la clarifier. Les êtres humains sont mauvais à cela, mais les ordinateurs peuvent être assez bons.
Les formalismes et les langages de programmation pourraient avoir une syntaxe plus riche et plus flexible. Je crois que la principale raison pour laquelle ils ne le font pas est le simple conservatisme. Les outils syntaxiques utilisés sont encore très souvent des outils conçus il y a trente ans ou plus, pour répondre aux limites des ordinateurs de l'époque. L'analyse de l'efficacité n'est plus un problème critique lors de la compilation et des techniques plus puissantes existent de manière pratique.
Fait intéressant, la base la plus largement utilisée pour la syntaxe des langages de programmation provient de la recherche en langage naturel: la grammaire sans contexte. Une grande partie de la recherche technique est passée à l'informatique théorique / technique dans les années 60, pour être quelque peu redécouverte au début des années 80 par les gens du langage naturel (je simplifie). Depuis lors, de nombreux progrès ont été réalisés pour la syntaxe dans les langues naturelles, tandis que l'informatique semble largement coincée avec les anciens outils syntaxiques. Le pendule du langage naturel oscille à nouveau vers les techniques statistiques, mais les approches algébriques de la syntaxe ne sont pas oubliées. Très probablement, de bonnes approches proviendront d'une combinaison de techniques algébriques et statistiques.
Mon sentiment est que le domaine critique est la sémantique et la transition entre la syntaxe et la sémantique. Ceci est encore très difficile à formaliser pour le langage naturel, alors que nous avons de nombreuses techniques précises dans le cas des langages de programmation et des systèmes formels. Comme le jeu est loin d'être joué pour les langues naturelles, il est difficile de dire quel impact il pourrait avoir sur les langages de programmation à l'avenir.
Un autre point est que de nombreux concepteurs de langages de programmation tentent de prouver quelque chose ou d'appliquer une idéologie technique. Ainsi, ils deviennent extrêmement normatifs dans leur conception pour empêcher les utilisateurs de s'écarter de leurs paradigmes prévus. C'est malheureusement extrêmement contre-productif pour la créativité. Le langage le plus créatif jamais conçu fut parmi les tout premiers: Lisp (1958). La liberté et la flexibilité qu'il a laissées ont été à l'origine d'une créativité considérable. Le prix était qu'il fallait de l'autodiscipline et de la compréhension. Mais Lisp était vraiment un métalangage, une langue pour la création de langues.
Maintenant, pour prendre une autre perspective, les programmes sont en fait des preuves de leur spécification considérée comme une déclaration mathématique (enfin, je simplifie encore). Certaines personnes (je ne me souviens pas des références, désolé) ont joué avec des prouveurs de théorèmes pour produire des preuves qui auraient l'air d'avoir été écrites par un mathématicien en langage naturel. Je suppose donc que l'idée d'avoir des programmes qui semblent avoir été écrits en langage naturel n'est peut-être pas totalement absurde.
Vous pouvez cependant remarquer que, même lorsqu'il est écrit de manière informelle par un mathématicien, le discours mathématique est très différent d'un discours ordinaire ou d'un livre d'histoire. Cela est dû à une différence significative dans l'univers du discours concerné, les domaines sémantiques dont on parle. Ainsi, alors que vous pouvez envisager des langages de programmation qui ressemblent davantage à des langages naturels, il existe une limitation naturelle qui est le domaine du discours et ses propres propriétés souhaitables. Elle restera très probablement essentiellement superficielle, c'est-à-dire principalement syntaxique. Le mathématicien peut parler de systèmes formels et de politique. Espérons que les deux discours ne se ressembleront pas. Les ordinateurs ne peuvent pas (encore?) Parler de politique ou la comprendre. Le jour où ils le feront, ce ne sera plus de la programmation.
En regardant en arrière dans l'histoire, les langages de haut niveau étaient, dès le premier (FORTRAN), une tentative de se rapprocher d'une forme plus naturelle pour exprimer des tâches de calcul, mais ces tâches étaient comprises comme mathématiques ou logiques (Fortran 1957, Algol 1958, Lisp 1958 ), ou davantage axé sur les affaires (Cobol 1959). En moins de 10 ans, les gens s'inquiétaient des langues qui seraient plus proches, mieux adaptées au problème en question, et il y avait des recherches significatives en soi-disant extensible
languages
, couvrant à la fois la syntaxe et la sémantique. L'émergence de object
orientation
(parfois sous d'autres noms) est une voie majeure pour exprimer les problèmes de manière plus naturelle . Bien qu'il soit toujours difficile d'attribuer la parentalité, il est probablement né des travaux sur l'intelligence artificielle, principalement en lisp, et de la langueSimula
67
(Famille Algol) qui était elle-même destinée à exprimer plus naturellement des problèmes du monde réel à simuler sur ordinateur. Tout semble historiquement cohérent.