web-dev-qa-db-ja.com

プログラミング言語を指すとき、「表現力」とはどういう意味ですか?

私はこの言葉を「JavaScriptは非常に表現力豊かな言語です」のような文章でよく耳にします。ルールがあまりないという意味ですか、それとも「表現力」がより具体的な意味を持つのですか?

67
morgancodes

「表現力のある」とは、コンパイラと人間の読者の両方にとって、理解しやすいコードを簡単に作成できることを意味します。

表現力を高める2つの要素:

  • 直感的に読みやすい構造
  • ボイラープレートコードの欠如

この表現力豊かなGroovyと、表現力の少ないJava相当:

3.times {
   println 'Hip hip hooray'
}

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

精度と表現力をトレードオフする場合があります-Groovyの例は、Javaで明示的に指定するようになっていることを前提としているため機能します。

58
slim

表現アイデア/アルゴリズム/タスクを読みやすく簡潔な方法で実行できることを意味します。

通常、私は表現力豊かな言語を構文糖と関連付けますが、常にそうであるとは限りません。表現力豊かなC#の例は次のとおりです。

  • foreach(明示的に反復を記述する代わりに)
  • usingステートメント(try/finallyを明示的に記述するのではなく)
  • クエリ式(LINQクエリを作成するためのより単純な構文)
  • 拡張メソッド(メソッド呼び出しのチェーンを許可します。これも主にLINQ用です)
  • 匿名メソッドとラムダ式(デリゲートと式ツリーの構築を容易にする)

別の例はジェネリックです。C#がジェネリックになる前は、「文字列のみを含むArrayList」という考えをコードで表現できませんでした。 (もちろん、それを文書化することも、独自のStringListタイプを記述することもできますが、まったく同じではありません。)

16
Jon Skeet

Neal Grafterにはブログがあります この件についての良い引用があります...

私の考えでは、言語の構造は、それなしでは作成(および使用)できないAPIを作成(および使用)できる場合、表現力があります。

コードで自分の考えをより自然に表現できるということです。

10
TofuBeer

それは難しいことです。

私にとって、それはあなたが自分の意図を簡単に表現できることに関係しています。これは言語によって異なり、また何をしたいかに大きく依存するため、これは一般化が一般的である領域です。もちろん、主観的で個人的なものでもあります。

より高級な言語は常により表現力があると考えるのは簡単ですが、私はそれが本当だとは思いません。それは、表現しようとしている内容、つまり問題のあるドメインによって異なります。

バイナリパターン0xdeadbeefを含む浮動小数点数を出力する場合、たとえば、BashよりもCを使用する方がはるかに簡単です。しかし、BashはCと比較して、超高級言語です。一方、プログラムを実行してその出力をテキストファイルに収集する場合、それは非常に簡単なので、Bashではほとんど見えませんが、Cでは少なくとも1ページのコードが必要です(POSIX環境を想定)。

5
unwind
3
Yardena

ここで、非常に物議を醸している比較:

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

それで、これらの指標によって最高の言語は何ですか?

中央値とIQRによるランキングに基づいてトップ10を選択した場合、それらの交差点をとります。これが残りです。中央値とIQRは、名前の直後にリストされています。

Augeas(48、28):構成ファイルのドメイン固有の言語

パペット(52、65):構成用の別のDSL REBOL(57、47):分散コンピューティング用に設計された言語

eC(75、75):Ecere C、オブジェクト指向のC導関数

CoffeeScript(100、23):JavaScriptにトランスコンパイルする高水準言語

Clojure(101,51):関数型並行プログラミング用のLISP方言

Vala(123、61):GNOMEで使用されるオブジェクト指向言語

Haskell(127、71):強力な静的型付けを備えた純粋に関数型のコンパイル済み言語

2
AA.

多分このサイト http://gafter.blogspot.com/2007/03/on-expressive-power-of-programming.html はあなたを助けることができます

要するに彼は言う:私の心の中で、言語構造は表現力があります構成なしでは作成(および使用)できないAPIを作成(および使用)できる場合。 Java提案された言語拡張のクロージャのコンテキストでは、コントロール抽象化APIは、競合する提案ではサポートされていないようです。

1
TStamper