Что вы подразумеваете под выразительностью языка программирования? - PullRequest
47 голосов
/ 11 марта 2010

Я часто вижу слово «выразительность», когда люди хотят подчеркнуть, что один язык лучше другого. Но я не понимаю, что именно они имеют в виду.

  • Это многословие / лаконичность? Я имею в виду, если один язык может записать что-то более короткое, чем другой, означает ли это выразительность? Пожалуйста, обратитесь к моему другому вопросу - Статья о плотности кода как мера мощности языка программирования
  • Это сила языка? Пол Грэм говорит, что один язык более мощный, чем другой язык, в том смысле, что один язык может делать то, что другой язык не может сделать (например, LISP может делать что-то с макросом, что другой язык не может делать).
  • Это просто облегчает жизнь? Регулярное выражение может быть одним из примеров.
  • Это другой способ решения той же проблемы: что-то вроде SQL для решения проблемы поиска?

Что вы думаете о выразительности языка программирования? Можете ли вы показать выразительность, используя некоторый код?

Какая связь с выразительностью и DSL? Люди придумывают DSL, чтобы получить выразительность?

Ответы [ 11 ]

0 голосов
/ 11 марта 2010

Вообще говоря, с языком программирования, который является полным по Тьюрингу, вы можете делать все, что может делать другой язык с полным тестированием. При этом, некоторые могут сделать это намного лучше, чем другие.

Я понимаю, что выразительность означает, что вы можете сказать легко и насколько хорошо / ясно это можно сказать. Способность быть кратким является частью этого (очень мощный и лаконичный язык похож на J ). Обычно я нахожу, что краткость - хороший признак выразительности. Если язык может выразить сложную операцию простым способом, он идет в правильном направлении.

Что касается силы, выразительность - это не вся сила языка. Хотя это может быть частью этого, скорость, безопасность, стабильность, все эти факторы также влияют.

пример: суммирование списка в Common lisp с использованием оператора цикла является кратким и выразительным

(loop for x in list sum x)

...