Language agnostic 你所说的编程语言的表达能力是什么意思?

Language agnostic 你所说的编程语言的表达能力是什么意思?,language-agnostic,programming-languages,Language Agnostic,Programming Languages,当人们想强调一种语言优于另一种语言时,我看到了很多“表达性”这个词。但我不明白他们的确切意思 是冗长/简洁吗?我的意思是,如果一种语言能写下比另一种语言短的东西,这意味着表达能力吗?请参阅我的另一项质询— 这是语言的力量吗?Paul Graham说,从某种意义上讲,一种语言比另一种语言更强大,一种语言可以做另一种语言做不到的事情(例如,LISP可以用宏做另一种语言做不到的事情) 这只是让生活更轻松的事情吗?正则表达式就是一个例子 这是解决同一问题的另一种方法吗:类似SQL的方法来解决搜索问题

当人们想强调一种语言优于另一种语言时,我看到了很多“表达性”这个词。但我不明白他们的确切意思

  • 是冗长/简洁吗?我的意思是,如果一种语言能写下比另一种语言短的东西,这意味着表达能力吗?请参阅我的另一项质询—
  • 这是语言的力量吗?Paul Graham说,从某种意义上讲,一种语言比另一种语言更强大,一种语言可以做另一种语言做不到的事情(例如,LISP可以用宏做另一种语言做不到的事情)
  • 这只是让生活更轻松的事情吗?正则表达式就是一个例子
  • 这是解决同一问题的另一种方法吗:类似SQL的方法来解决搜索问题
您如何看待编程语言的表达能力?你能用一些代码来表达吗

表现力和DSL之间有什么关系?人们想出DSL来获得表现力吗

我自己认为这意味着一种语言可以用更少的资源完成更多的任务(维基百科文章中的所谓“非正式用法”)

我认为JavaScript有表现力(虽然这可能是因为道格拉斯克罗克福德把这个想法钻进我的NoGIN),因为它能用几个关键词来做很多事情。例如,
function
关键字是一个函数,也是一个方法、一个类和一个lambda

JavaScript中的一些代码说明(为了简洁起见,省略了一些细节)。这是我写的一个事件类:

SJJS.util.Event = (function() {
    var _listeners = [];
    var _listenerReturns = [];

    return {
        addDomListener: function(element, eventName, listener) {
        },
        trigger: function(element, eventName) {
        },
        removeListener: function(eventlistener) {
        }
    }
})();

仅使用
函数
变量
,以及一些大括号和圆括号,我就创建了一个包含方法和私有变量的静态类

就我个人而言,我觉得语言的“表现力”实际上可以归结为语言结构能够“表达”开发人员意图的程度

例如,我觉得C#(特别是LINQ via C#3+)的表现力越来越强。这个LINQ语句是一个很好的例子:

var results = collection.Where(item => item > 5);
在不知道所使用的语言或实现的细节的情况下,开发人员的意图(在我看来)在上述声明中是非常清楚的

我不认为这门语言的冗长程度等于它的表达能力,然而,这两者之间存在某种关联。如果一种语言需要大量的代码来表达一个抽象,那么它的表达能力就会降低。这是两个相关但不同的概念


power也是如此——尽管在这里,一种语言的特性(即power)必须足够完整,以清楚地表达抽象。没有这一点,表达能力就会受到影响。也就是说,就功能而言,一种语言可能非常“强大”,但如果功能集难以理解,则不一定具有表达能力。

一般来说,使用图灵完备的编程语言,您可以做其他图灵完备语言可以做的任何事情。尽管如此,有些人可以做得比其他人好得多

我认为表达意味着你能说多少容易,说得多好/清楚。简洁的能力就是其中的一部分(一种非常强大和简洁的语言就是这样)。一般来说,我发现简洁是表达能力的良好标志。如果语言能够以简单的方式表达一个复杂的操作,那么它就是朝着正确的方向发展的

至于语言的力量,表达能力并不是语言的全部力量。虽然它可能是它的一部分,但速度、安全、稳定,所有这些因素都会影响它

示例:使用循环运算符对Common lisp中的列表求和既简洁又有表现力


(列表和x中x的循环)
精确性、简洁性和可读性是表达能力的主要组成部分。

对我来说,是语言通过代码清晰地表达我的逻辑和想法的能力,在某种程度上,其他阅读代码的人可以很容易地理解我在写代码时的想法。

如果你想要一个理论性的答案,但比大多数答案更严格,你可能想看看Matthias Felleisen关于编程语言表达能力的文章。我敢肯定,只要在网上浏览一下,就会发现至少有几本

如果你想得到一个更实际的答案,来回答大多数人说这话时的实际意思,坦率地说,这是完全不同的。至少在我的经验中,“表达性”语言通常意味着:“我喜欢这种语言,但不能引用太多(如果有的话)客观支持。”相反,“表达性较低”或“不表达性”通常意味着:“我不喜欢这种语言(或不太喜欢),但不能引用太多(如果有的话)客观支持。”

“没有表现力”通常类似于一个政客指责另一个人是“法西斯”——显然是轻蔑的,但对所谓的错误没有任何有意义的定义

其中一个大问题来自根本性的意见分歧。人们对表现力至少有两种根本不同的一般看法:

  • 表达各种各样想法的能力
  • 清晰(通常简洁)地表达某些特定想法的能力
  • 考虑一些极端的例子,汇编语言将被第一个标准高度表达,你可以在汇编语言中做任何事情,你可以用高级语言,你可以用汇编语言做一些事情,但本质上没有任何高级语言。 显然,从第二个角度来看,汇编语言看起来并不那么好——它通常需要相当多相当不透明的代码才能完成很多工作。这一衡量标准倾向于使用Haskell或APL这样的语言,仅举几个例子

    这两个概念是什么?”
    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
    
    die ("found no solutions") unless length(solutions) > 0;
    
    if (length(solutions) == 0) { die("found no solutions"); }
    
    ++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.
    
    H
    
    // top 10 products with rating higher than 5
    return products
      .sort(p => p.rating)
      .filter(p => p.rating > 5)
      .map(p => p.title)
      .take(10)