私はこの言葉を「JavaScriptは非常に表現力豊かな言語です」のような文章でよく耳にします。ルールがあまりないという意味ですか、それとも「表現力」がより具体的な意味を持つのですか?
「表現力のある」とは、コンパイラと人間の読者の両方にとって、理解しやすいコードを簡単に作成できることを意味します。
表現力を高める2つの要素:
この表現力豊かなGroovyと、表現力の少ないJava相当:
3.times {
println 'Hip hip hooray'
}
対
for(int i=0; i<3; i++) {
System.out.println("Hip hip hooray");
}
精度と表現力をトレードオフする場合があります-Groovyの例は、Javaで明示的に指定するようになっていることを前提としているため機能します。
表現アイデア/アルゴリズム/タスクを読みやすく簡潔な方法で実行できることを意味します。
通常、私は表現力豊かな言語を構文糖と関連付けますが、常にそうであるとは限りません。表現力豊かなC#の例は次のとおりです。
foreach
(明示的に反復を記述する代わりに)using
ステートメント(try/finallyを明示的に記述するのではなく)別の例はジェネリックです。C#がジェネリックになる前は、「文字列のみを含むArrayList
」という考えをコードで表現できませんでした。 (もちろん、それを文書化することも、独自のStringList
タイプを記述することもできますが、まったく同じではありません。)
Neal Grafterにはブログがあります この件についての良い引用があります...
私の考えでは、言語の構造は、それなしでは作成(および使用)できないAPIを作成(および使用)できる場合、表現力があります。
コードで自分の考えをより自然に表現できるということです。
それは難しいことです。
私にとって、それはあなたが自分の意図を簡単に表現できることに関係しています。これは言語によって異なり、また何をしたいかに大きく依存するため、これは一般化が一般的である領域です。もちろん、主観的で個人的なものでもあります。
より高級な言語は常により表現力があると考えるのは簡単ですが、私はそれが本当だとは思いません。それは、表現しようとしている内容、つまり問題のあるドメインによって異なります。
バイナリパターン0xdeadbeef
を含む浮動小数点数を出力する場合、たとえば、BashよりもCを使用する方がはるかに簡単です。しかし、BashはCと比較して、超高級言語です。一方、プログラムを実行してその出力をテキストファイルに収集する場合、それは非常に簡単なので、Bashではほとんど見えませんが、Cでは少なくとも1ページのコードが必要です(POSIX環境を想定)。
ここで、非常に物議を醸している比較:
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):強力な静的型付けを備えた純粋に関数型のコンパイル済み言語
多分このサイト http://gafter.blogspot.com/2007/03/on-expressive-power-of-programming.html はあなたを助けることができます
要するに彼は言う:私の心の中で、言語構造は表現力があります構成なしでは作成(および使用)できないAPIを作成(および使用)できる場合。 Java提案された言語拡張のクロージャのコンテキストでは、コントロール抽象化APIは、競合する提案ではサポートされていないようです。