提到编程语言时,“expression”是什么意思?

我听到这个词很多,像“javascript是一个非常有performance力的语言”。 这是否意味着没有很多的规则,或者“expression”具有更具体的含义?

“expression”意味着编写易于理解的代码,无论是编译器还是读者,都很容易。

两个因素,performance力:

  • 直观可读的构造
  • 缺乏样板代码

比较这个富有performance力的Groovy和performance较差的Java等价性:

3.times { println 'Hip hip hooray' } 

VS

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

有时候为了expression而交易精度 – Groovy示例的工作原理是因为它假设了Java让你明确指定的东西。

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

通常我会把一种expression语言与句法糖联系起来,尽pipe情况并非总是如此。 C#中的例子是expression性的将是:

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

一个不同的例子是generics:在C#generics之前,你不能在代码中expression“仅包含string的ArrayList ”的概念。 (当然,你可以logging它,或者写你自己的StringListtypes,但这不完全相同。)

Neal Grafter在这个主题上有一个很好的引用的博客 …

在我看来,如果一个语言结构能让你编写(和使用)一个不能被编写(和使用)的API而没有这个结构,那么这个语言结构就是有performance力的。

我想说,这意味着你可以更自然地用代码expression你的想法。

这是一个艰难的。

对我来说,这与你expression意图的方便性有关。 这在不同的语言中是不同的,也取决于你想做什么,所以这是一个普遍化的领域。 当然,这也是主观和个人的。

很容易认为更高级的语言总是更具performance力,但我不认为这是真的。 这取决于你想expression什么,即在问题领域。

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

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

总之他说 :在我看来,如果一个语言结构能让你编写(和使用)一个不能被编写(和使用)的API而没有这个结构,那么这个语言结构就是有performance力的。 在Java提议的语言扩展的闭包环境中,控制抽象API是竞争性提议似乎不支持的东西。

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

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

那么,这些衡量指标最好的语言是什么?

如果你根据排名中位数和IQR排名前10位,那么把他们交叉点,这是剩下的。 中位数和IQR在名字后立即列出:

Augeas(48,28):用于configuration文件的领域特定语言

木偶(52,65):configurationREBOL的另一个DSL(57,47):为分布式计算devise的语言

eC(75,75):Ecere C,一个面向对象的C衍生物

CoffeeScript(100,23):一种可以编译成JavaScript的高级语言

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

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

Haskell(127,71):一个纯静态types的强大的编译语言