在提到编程语言时,“表达”意味着什么?

时间:2009-03-12 14:32:58

标签: programming-languages

我在“javascript是一种非常富有表现力的语言”这样的句子中经常听到这个词。它只是意味着没有很多规则,或者“表达”是否具有更具体的含义?

7 个答案:

答案 0 :(得分:56)

'表达'意味着编写易于理解的代码很容易,无论是编译器还是人类读者。

表达性的两个因素:

  • 直观易读的构造
  • 缺少样板代码

将这种富有表现力的Groovy与表达程度较低的Java等效词进行比较:

3.times {
   println 'Hip hip hooray'
}

VS

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

有时你会为表达性交换精确度 - Groovy示例有效,因为它假设Java让你明确指定。

答案 1 :(得分:15)

我认为它能够以易于阅读和简洁的方式表达想法/算法/任务。

通常我将表达的语言与句法糖联系起来,尽管情况并非总是这样。 C#表达的例子是:

  • foreach(而不是显式编写迭代)
  • using语句(而不是显式编写try / finally)
  • 查询表达式(编写LINQ查询的简单语法)
  • 扩展方法(允许链接方法调用,主要用于LINQ)
  • 匿名方法和lambda表达式(允许更容易的委托和表达式树构造)

另一个例子是泛型:在C#得到泛型之前,你无法在代码中表达“只包含字符串ArrayList”的想法。 (当然,您可以记录它,或者编写您自己的StringList类型,但这并不完全相同。)

答案 2 :(得分:10)

Neal Grafter has a blog在这个问题上有一个很好的引用......

  

在我看来,如果一种语言结构能让你写作,那么它就具有表现力   (并使用)在没有构造的情况下无法编写(和使用)的API。

我会说这意味着你可以在代码中更自然地表达你的想法。

答案 3 :(得分:4)

答案 4 :(得分:4)

这是一个艰难的。

对我来说,这与您表达意图的容易程度有关。这在不同的语言中是不同的,并且还很大程度上取决于您想要做什么,因此这是一个常见的概括区域。当然,它也是主观的和个人的。

很容易认为更高级别的语言总是更具表现力,但我不认为这是真的。这取决于您要表达的内容,即问题域。

如果你想打印具有二进制模式0xdeadbeef的浮点数,那么在C中比在Bash中更容易做到。然而,与C相比,Bash是一种超高级语言。另一方面,如果你想运行一个程序并将其输出收集到一个文本文件中,这很简单,它在Bash中几乎不可见,但在C中至少需要一页代码(假设一个POSIX环境)。 / p>

答案 5 :(得分:2)

在这里,一个非常有争议的比较:

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

  

那么,这些指标的最佳语言是什么?

     

如果你根据中位数和IQR选择前10名,那么   走他们的路口,这就是剩下的。中位数和IQR   名称后紧接着列出:

     

Augeas(48,28):配置文件的特定于域的语言

     

Puppet(52,65):用于配置的另一个DSL REBOL(57,57):为分布式计算设计的语言

      eC(75,75):Ecere C,具有面向对象的C导数

     

CoffeeScript(100,23):一种可以转换为JavaScript的高级语言

     

Clojure(101,51):用于功能性并发编程的Lisp方言

     

Vala(123,61):GNOME使用的面向对象语言

     

Haskell(127,71):一种纯功能的编译语言,具有强大的静态类型

答案 6 :(得分:1)

也许这个网站http://gafter.blogspot.com/2007/03/on-expressive-power-of-programming.html可以帮助您

简而言之,他说:在我看来,语言构造富有表现力 如果它允许您编写(和使用)API没有构造就无法编写(和使用)的东西。在Closures for Java提议的语言扩展的上下文中,控制抽象API是竞争提议似乎不支持的那种东西。