Что означает "экспрессивный" при обращении к языкам программирования?


Я часто слышу это слово в предложениях типа "javascript-очень выразительный язык". Означает ли это, что существует не так много правил, или "выразительный" имеет более конкретное значение?

7 57

7 ответов:

'Expressive' означает, что легко написать код, который легко понять, как для компилятора, так и для человека-читателя.

два фактора, которые делают для выразительности:

  • интуитивно читаемые конструкции
  • отсутствие шаблонного кода

сравните этот выразительный Groovy, с менее выразительным Java eqivalent:

3.times {
   println 'Hip hip hooray'
}

vs

for(int i=0; i<3; i++) {
    System.out.println("Hip hip hooray");
}

иногда вы торгуете точностью для выразительности -- пример Groovy работает, потому что он предполагает, что Java заставляет вас явно указывать.

Я так понимаю, что он способен выражения идеи/алгоритмы/задачи в удобном для чтения и сжатой форме.

обычно я связываю язык, выразительные с синтаксическим сахаром, хотя это не всегда так. Примеры в C# его выразительности были бы:

  • foreach (вместо явного написания итерации)
  • the using оператор (вместо явного написания попробуйте / наконец)
  • выражения запросов (более простой синтаксис для написания запросов LINQ)
  • методы расширения (позволяющие цепочку вызовов методов, опять же в первую очередь для LINQ)
  • анонимные методы и лямбда-выражения (что позволяет упростить делегирование и построение дерева выражений)

Другим примером могут быть дженерики: до того, как C# получил дженерики, вы не могли выразить идею " an ArrayList содержит только строки" в коде. (Вы можете документировать это, конечно, или напиши сам StringList тип, но это не совсем то же самое.)

у Нила Графтера есть блог С хорошей цитатой из него на эту тему...

на мой взгляд, языковая конструкция выразительна, если она позволяет вам писать (и использовать) API, который не может быть написан (и использован) без конструкции.

Я бы сказал, что это означает, что вы можете более естественно выразить свои мысли в коде.

это сложно.

Если вы хотите напечатать число с плавающей запятой, которое имеет двоичный шаблон 0xdeadbeef, Это гораздо проще сделать в C, чем в Bash, например. Тем не менее, Bash, по сравнению с C, является языком сверхвысокого уровня. С другой стороны, если вы хотите запустить программу и собрать ее вывод в текстовый файл, это так просто, что он почти невидим в Bash, но потребует по крайней мере страницы кода в C (предполагая среду POSIX).

вот, очень спорное сравнение:

http://redmonk.com/dberkholz/2013/03/25/programming-languages-ranked-by-expressiveness/

Итак, каковы лучшие языки по этим метрикам?

Если вы выбираете топ-10, основываясь на рейтинге медиана и межквартильный интервал, то взять пересечение их, вот что осталось. Медиана и межквартильный интервал перечисляются сразу после имен:

Augeas (48, 28): A предметно-ориентированные языки для файлов конфигурации

Puppet (52, 65): Еще один DSL для конфигурации REBOL (57, 47): язык, предназначенный для распределенных вычислений

eC (75, 75): Ecere c, производная C с ориентацией объекта

CoffeeScript (100, 23): язык более высокого уровня, который транскомпилируется в JavaScript

Clojure (101,51): диалект Lisp для функционального, параллельного программирования

Вала (123, 61): An объектно-ориентированный язык, используемый GNOME

Haskell (127, 71): чисто функциональный, скомпилированный язык с сильным статическим типом

может быть, этот сайт http://gafter.blogspot.com/2007/03/on-expressive-power-of-programming.html может помочь вам

короче он говорит: по-моему, a языковая конструкция это выразительных если это позволяет вам писать (и использовать) API, который не может быть написан (и использован) без конструкции. В контексте закрытия для предлагаемого расширения языка Java API абстракции управления-это то, что не кажется будут поддержаны конкурирующие предложения.