我在“ JavaScript是一种非常有表现力的语言”之类的句子中听到很多这个词。这仅仅是意味着没有很多规则,还是“表达”具有更具体的含义?
我在“ JavaScript是一种非常有表现力的语言”之类的句子中听到很多这个词。这仅仅是意味着没有很多规则,还是“表达”具有更具体的含义?
Answers:
“富有表现力”意味着对于编译器和人类读者而言,编写易于理解的代码都很容易。
表现力的两个因素:
将这种具有表现力的Groovy与具有较低表现力的Java等效进行比较:
3.times {
println 'Hip hip hooray'
}
与
for(int i=0; i<3; i++) {
System.out.println("Hip hip hooray");
}
有时,您会为了表达性而牺牲精度-Groovy示例之所以有效,是因为它假定Java使您可以明确指定。
int
在Java中使用循环变量是Java的产物;它本质上是没有意义的,并且比Groovy的精确度更高3.times
,所以不是)
expressiveness
。虽然我通常有一个非常直观的想法,但我很高兴是否存在某种语言表达能力的“形式定义”,如果是,那么用来衡量表达能力的“量化指标”是什么?
我的意思是说它能够以一种易于阅读和简洁的方式表达想法/算法/任务。
通常我将一种表达语言与语法糖联系起来,尽管并非总是如此。C#中具有表现力的示例如下:
foreach
(而不是显式地编写迭代)using
声明(而不是明确地写在try /终于)一个不同的例子是泛型:在C#获得泛型之前,您无法ArrayList
在代码中表达“仅包含字符串”的想法。(当然,您可以记录下来,也可以编写自己的StringList
类型,但这并不完全相同。)
尼尔·格里夫特(Neal Grafter)的博客对此主题做了很好的引用。
在我看来,如果语言构造使您能够编写(和使用)没有该构造就无法编写(和使用)的API,那么它就具有表达力。
我想说,这意味着您可以更自然地用代码表达您的想法。
在这里,一个非常有争议的比较:
http://redmonk.com/dberkholz/2013/03/25/programming-languages-ranked-by-expressiveness/
那么,根据这些指标,最好的语言是什么?
如果您根据中位数和IQR的排名选择前10名,然后将它们的交集取整,这就是剩下的内容。中位数和IQR在名称后立即列出:
Augeas(48、28):配置文件的特定于域的语言
Puppet(52,65):用于配置REBOL的另一种DSL(57,47):一种用于分布式计算的语言
eC(75,75):Ecere C,面向对象的C导数
CoffeeScript(100,23):一种可转换为JavaScript的高级语言
Clojure(101,51):一种Lisp方言,用于功能性并发编程
Vala(123,61):GNOME使用的一种面向对象的语言
Haskell(127,71):具有强静态类型的纯函数式编译语言
也许此网站http://gafter.blogspot.com/2007/03/on-expressive-power-of-programming.html 可以为您提供帮助
简而言之,他说:在我看来,如果语言构造使您能够编写(和使用)没有该构造就无法编写(和使用)的API,那么它就是具有表达力的。在Java的Closures提议的语言扩展的上下文中,控件抽象API似乎是竞争性提议所不支持的。