49 votes

Qu'entendez-vous par l'expressivité d'un langage de programmation?

Je vois que beaucoup le mot "expressivité" quand les gens veulent le stress d'une langue est meilleure que l'autre. Mais je ne vois pas exactement ce qu'ils veulent dire par elle.

  • Est-ce la verbosité désirée/concision? Je veux dire, si une langue peut écrire quelque chose de plus court que l'autre, est-ce à dire expressivité? Veuillez vous reporter à mon autre question - http://stackoverflow.com/questions/2411772/article-about-code-density-as-a-measure-of-programming-language-power
  • Est-il le pouvoir de la langue? Paul Graham dit qu'une langue est plus puissant que l'autre langue, en un sens, qu'une seule langue peut faire l'autre langue ne peut pas le faire (par exemple, LISP peut faire quelque chose avec macro que l'autre langue ne peut pas le faire).
  • Est-il juste quelque chose qui rend la vie plus facile? Expression régulière peut être l'un des exemples.
  • Est-ce une autre façon de résoudre le même problème: quelque chose comme SQL pour résoudre le problème de recherche?

Que pensez-vous de l'expressivité d'un langage de programmation? Pouvez-vous montrer l'expressivité à l'aide du code?

Quel est le rapport avec l'expressivité et l'adsl? Faire les gens DSL pour obtenir l'expressivité?

31voto

Reed Copsey Points 315315

Personnellement, j'ai l'impression que le "expressivité" d'une langue vient vraiment à la manière dont les constructions de langage peut exprimer le développeur intentions.

Par exemple, j'ai l'impression que C# (surtout LINQ via C# 3+) est en train de devenir beaucoup plus expressif. Cette LINQ déclaration est un excellent exemple:

var results = collection.Where(item => item > 5);

Sans connaître les détails de la langue ou de la mise en œuvre utilisée, le développeur intention est (à mon avis) très clair dans l'énoncé ci-dessus.

Je ne pense pas que la verbosité désirée de la langue est égal à son expressivité, cependant, il existe une certaine corrélation en place. Si une langue nécessite beaucoup de code dans le but d'exprimer une abstraction, c'est moins expressif. Ces deux liés, mais différents, des concepts.

La même chose est vraie avec le pouvoir - même si une langue fonctionnalités (c'est à dire: la puissance) doit être suffisamment complète pour exprimer l'abstraction clairement. Sans cela, l'expressivité va en souffrir. Cela étant dit, une langue peut être très "puissant" en termes de fonctionnalités, mais pas nécessairement d'être expressif, si l'ensemble des fonctionnalités est difficile à comprendre.

29voto

Wayne Conrad Points 31052

"Expressivité" signifie la capacité de dire que ce que vous voulez faire:

bad_event = events.find(&:bad)

plutôt que de la façon dont vous voulez qu'il fait:

i = 0
bad_event = nil
while i < events.size && bad_event.nil?
  event = events[i]
  if event.bad?
    bad_event = event
  end
  i += 1
end

Parmi les facteurs qui contribuent à l'expressivité sont:

  • Un manque de sucre syntaxique
  • La première des fonctions de classe
  • La collecte des ordures
  • Typage dynamique
  • La langue de base n'étant pas forcément minimaliste
  • Une bonne fonctionnalité de la bibliothèque standard

À un certain degré, de l'expressivité de n'importe quelle langue peut être augmenté en poussant autant de "comment faire" off dans les sous-programmes/objets que possible, de sorte que la plupart du reste du code est "quoi faire". Le montant du "comment faire" le code nécessaire dans les plus abstraites de code est une mesure d'une langue de l'expressivité: La plus ressemble le code pseudo-code, la plus expressive, il est de l'intention du programmeur.

On peut aussi penser à la "méta-expressivité" de la langue: Comment expressive est la langue à la construction Spécifique au Domaine Langues?

26voto

Norman Ramsey Points 115730

J'aime Matthias Felleisen de la notion de puissance expressive, qui est comparative:

  • La langue A est strictement plus expressif que le langage B si les deux conditions suivantes sont remplies:

    • Tout programme écrit dans un langage B peut être réécrite sous la langue tout en gardant l'essentiel de la structure du programme intact.
    • Certains programmes écrits dans la langue d'Un être violemment restructuré afin d'être écrite dans la langue B.

Habituellement, nous voulons faire de ces comparaisons en regardant une sorte de "noyau essentiel" d'une langue—par exemple, peut-être, nous voulons considérer un dialecte de C avec seulement while pas for et do...while. Ou peut-être que nous voulons considérer un dialecte de Perl avec seulement un préfixe if forme et pas unless formulaire. Mais parfois, ces superficielle syntaxique distinctions sont exactement ce que nous entendons par "puissance expressive"; pour certains, des programmeurs, c'est important de le dire

die ("found no solutions") unless length(solutions) > 0;

au lieu de

if (length(solutions) == 0) { die("found no solutions"); }

Donc, vous avez à établir si vous demandez à propos de la puissance expressive de la surface de la syntaxe ou de la structure plus profonde.

L'autre chose que j'aime à propos de Felleisen l'idée est qu'il n'admet la notion de deux langues qui sont bien différents, mais l'un n'est plus expressif que les autres.

Vous pouvez lire une présentation plus détaillée dans les deux premières pages de son livre Sur le Pouvoir d'expression des Langages de Programmation. Après cela vient beaucoup de proue à tête de théorie :-)

4voto

Andres Points 2253

Pour moi, c'est la capacité de la langue a à exprimer clairement ma logique et des idées par le code, de façon que quelqu'un qui lit le code que j'ai écrit peut facilement comprendre ce que je pensais quand je l'ai fait.

3voto

Bob Points 4773

Wikipédia a un peu le concept. J'ai moi-même que cela signifie que d'une langue peut faire plus avec moins (dite "informelle" dans l'article de Wikipedia).

Je considère JavaScript expressive (bien que cela pourrait être parce que Douglas Crockford foré cette idée dans ma caboche), car il peut faire beaucoup avec peu de mots-clés. Par exemple, l' function mot-clé est une fonction, ainsi qu'une méthode, une classe, et un lambda.

Du code de l'illustration (en laissant quelques détails pour des raisons de concision) en JavaScript. C'est un événement de classe, j'ai écrit:

SJJS.util.Event = (function() {
    var _listeners = [];
    var _listenerReturns = [];

    return {
        addDomListener: function(element, eventName, listener) {
        },
        trigger: function(element, eventName) {
        },
        removeListener: function(eventlistener) {
        }
    }
})();

Avec juste function, var, et certains d'accolades et de parenthèses, j'ai fait une classe statique avec des méthodes et des variables privées.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X