Le pouvoir expressif est défini par Wikipedia comme suit:
Relisons cette page. Une des premières choses à noter est qu’il est question de "langage" et non de "langage de programmation". La plupart de ses exemples ne sont pas des langages de programmation. langues.
On peut appliquer le concept aux langages de programmation, mais aussi aux langages de correspondance de modèles, aux langages de balisage, aux langages de requête, aux langages de feuilles de style visuelles, aux expressions régulières (et à tous les langages réguliers auxquels ils se rapportent), etc. On peut même parler du pouvoir expressif de langages naturels comme l’anglais, qui se fait souvent de manière très informelle, mais avec plus de sérieux lorsqu’on examine les problèmes liés au traitement du langage naturel.
Les "idées" font-elles référence aux choses (opérations, structures, algorithmes, etc.?) Que nous pouvons communiquer à la machine? Ou fait-il référence aux concepts "humains" qui peuvent être capturés et communiqués avec le langage à d'autres humains?
Il fait référence à ce qui peut être exprimé dans cette langue, considérée uniquement comme une chose en soi.
Par exemple, (je vais utiliser javascript tout au long de mes exemples, car votre question indique que c'est l'une des langues que vous connaissez), considérons l'instruction javascript:
var x = 3 + 4;
Cela signifie que la somme des valeurs de 3 et 4 est calculée et que la valeur est associée à une étiquette x
dans une portée d'espace de nom donnée.
Si nous détruisions tous les ordinateurs du monde et écrivions ce code sur une feuille de papier, il resterait que javascript a toujours la même signification; nous ne pourrions pas utiliser ce code sur quoi que ce soit, mais la définition abstraite du langage est toujours un sujet sur lequel nous pourrions parler.
Cela peut sembler pédant, mais il est en fait assez important que les langues soient des choses sur lesquelles on puisse raisonner de manière abstraite sans prendre en compte les ordinateurs réels. D'une part, les gens qui raisonnent sur des points théoriques du langage informatique qui n'étaient pas encore réalisables dans la pratique sont l'un des éléments qui nous ont amenés à ce que nous sommes aujourd'hui; les ordinateurs ont besoin de l'informatique, mais l'informatique n'a pas besoin des ordinateurs, juste l'idée d'un calcul.
Bien sûr, nous utilisons des ordinateurs dans le monde réel, et de nos jours, beaucoup de personnes les utilisent dans la pratique plutôt que quelques spécialistes en discutent en théorie. La page à laquelle vous avez accédé dit:
Le terme pouvoir expressif peut être utilisé avec une gamme de sens. Cela peut signifier une mesure des idées exprimables dans cette langue:
Le premier sens domine dans les domaines des mathématiques et de la logique qui traitent de la description formelle des langues et de leur signification, tels que la théorie des langues formelle, la logique mathématique et l’algèbre des processus.
Dans les discussions informelles, le terme fait souvent référence au second sens, ou aux deux. C'est souvent le cas lors des discussions sur les langages de programmation. Des efforts ont été faits pour formaliser ces utilisations informelles du terme
Parmi ces deux utilisations du terme, l'impact concret de la première concerne uniquement ce qui peut être transmis à l'ordinateur.
La seconde concerne davantage la compréhension humaine en lecture et en écriture, bien que son degré de différenciation diffère beaucoup selon les utilisations, car elles sont informelles et, en tant que telles, ne sont pas définies de manière rigoureuse.
Par exemple, si nous prenions un langage tel que JavaScript et imposions une restriction étrange sur les noms de variable, tel que variable doit être un nombre à 8 chiffres précédé d'un trait de soulignement, la correspondance /^_[0-9]{8}$/
perdrait-elle notre pouvoir expressif?
Selon la définition formelle, nous n’avons perdu aucun pouvoir d’expression: nous sommes limités à 100 000 000 de variables, mais si nous en avions vraiment besoin, nous pourrions résoudre ce problème en créant des objets destinés à contenir davantage de variables dans l’espace de nom nouvellement créé. En tant que tel, tout programme écrit aujourd'hui en javascript pourrait être réécrit sous cette nouvelle forme, de sorte qu'il est tout aussi expressif.
Selon la définition informelle, nous en avons perdu une partie, mais tout dépend de la manière dont nous sommes informels, ce qui variera, car encore une fois, vous ne pouvez pas dire quelle est la "règle" en matière d'utilisation informelle. Nous pourrions dire que nous avons perdu une quantité infime, car les programmes contenant plus de 100 000 000 variables dans le même espace de noms doivent être réécrits au-delà d'une simple substitution. Une utilisation encore plus informelle ferait de nouveau référence à l’impact mental de noms aussi variables que gaiement sur l’ensemble humain.
Il faut également noter que les gens vont considérer de manière informelle des choses qui ne font pas du tout partie de la langue. Considérez les changements en Javascript depuis sa création jusqu'à aujourd'hui.
Selon la définition la plus formelle, l'expressivité n'a pratiquement pas changé; C'était Turing complet pour commencer, après tout.
Selon une définition plus informelle, il est devenu beaucoup plus expressif dans certaines opérations telles que la manipulation de tableaux, la gestion des exceptions et (peut-être surtout) dans l’inclusion d’expressions régulières. Ceux-ci ne font rien qui ne pouvait pas être fait auparavant en javascript, bien qu'ils puissent souvent faire quelque chose en quelques lignes et en un temps d'exécution inférieur à une seconde qui prendrait des kilo-octets de code pour écrire en javascript1.0 et une longue durée.
Par une définition beaucoup plus informelle encore, le changement de la première utilisation de javascript dans les navigateurs (capable de changer les valeurs des entrées de formulaire, document.write
tandis que la page est d'abord analysée et déplacée vers un nouvel emplacement ou de revenir en arrière dans l'historique, mais jolie. Rien d’autre aujourd’hui (pouvoir changer à peu près tout sur la page, y compris sur la base de données provenant d’appels au serveur) est absolument immense, même si la plupart ne concerne pas le javascript, mais les modèles d’objets et les API créées disponible, plutôt que la langue (par exemple, vbscript dans IE a bénéficié de ces modifications de manière égale).
À mon avis, cette dernière utilisation est assez informelle pour ne pas être vraiment correcte, mais c'est le problème des définitions informelles.
Selon la définition officielle, il n’est vraiment pas devenu plus expressif du tout.