编程语言的表现力是什么意思?

当人们想强调一种语言比另一种语言更好时,我会看到很多“表现力”一词。 但我不明白他们的意思。

  • 它是冗长/简洁吗? 我的意思是,如果一种语言可以写下比另一种语言短的东西,那么这是否意味着表现力? 请参考我的另一个问题 - 关于代码密度作为衡量编程语言能力的措施的文章
  • 这是语言的力量吗? Paul Graham认为,一种语言比另一种语言更强大,因为一种语言可以做另一种语言无法做到的事情(例如,LISP可以使用其他语言无法做到的宏)。
  • 这只是让生活更轻松吗? 正则表达式可以是其中一个例子。
  • 它是解决同一问题的另一种方式:像SQL一样解决搜索问题?
  • 你怎么看待编程语言的表现力? 你能用一些代码表现出表现力吗?

    与表现力和DSL有什么关系? 人们拿出DSL来获得表现力吗?


    我个人认为,语言的“表现力”实际上取决于语言结构能够“表达”开发者的意图。

    例如,我觉得C#(特别是通过C#3+的LINQ)变得更加富有表现力。 这个LINQ语句就是一个很好的例子:

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

    在不知道语言细节或正在使用的实现的情况下,开发人员的意图(在我看来)是非常清晰的。

    我不认为语言的冗长性等于它的表现力,但是,有一些相关性。 如果一种语言需要大量代码才能表达抽象,那么它就不那么富有表现力。 这是两个相关但不同的概念。

    权力也是如此 - 尽管这里语言的特征(即:权力)必须足够完整,以清楚地表达抽象。 没有这个,表现力就会受到影响。 也就是说,如果功能集很难理解,语言在功能方面可能非常“强大”,但不一定具有表现力。


    “表现力”意味着只能说出你想做的事情的能力:

    bad_event = events.find(&:bad)
    

    而不是你想如何完成:

    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
    

    有助于表达的事物包括:

  • 缺少所需的语法糖
  • 一流的功能
  • 垃圾收集
  • 动态类型或类型推断
  • 语言核心不是奴隶般的极简主义
  • 标准库中的良好功能
  • 在某种程度上,任何语言的表现力都可以通过尽可能多地将子程序/对象推入子程序/对象来增加,以便剩下的大部分代码是“要做什么”。 在最抽象的代码中需要的“如何去做”代码的量是语言表达能力的一种度量:代码看起来像伪代码越多,程序员的意图就越具有表现力。

    人们还可以思考一种语言的“元表现力”:在构建领域特定语言时语言的表达力如何?


    我喜欢Matthias Felleisen的表达力的概念,这是比较的:

  • 如果以下两种情况都是正确的,则语言A比语言B严格得多:

  • 任何用B语言编写的程序都可以用A语言重写,同时保持程序的基本结构不变。
  • 一些用A语言编写的程序必须进行剧烈的重组,以便用B语言编写。
  • 通常我们想通过查看某种语言的“基本核心”来进行这些比较 - 例如,我们可能只想考虑一种C的方言, while不是同时fordo...while 。 或者,也许我们想要考虑Perl的一种方言, if只有形式,只有前缀, unless形式。 但有时候,这些肤浅的句法区别正是我们所说的“表现力”。 对一些程序员来说,重要的是要说

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

    代替

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

    所以你必须确定你是否在询问表面语法的表达能力或更深的结构。

    另一件我喜欢Felleisen的想法是,它承认两种语言的概念是完全不同的,但它们都不是比其他语言更有表现力。

    您可以在他的论文“编程语言的表现力”前两页阅读更详细的论述。 之后出现了很多尖头理论:-)

    链接地址: http://www.djcxy.com/p/20679.html

    上一篇: What do you mean by the expressiveness of a programming language?

    下一篇: What programming language is most like natural language?