提到编程语言时,“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它,或者写你自己的StringList
types,但这不完全相同。)
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的强大的编译语言