表現力はウィキペディアによって次のように定義されています:
そのページをもう一度読みましょう。最初に注意することの1つは、「プログラミング言語」ではなく「言語」と言うことであり、その例のほとんどはプログラミング言語ではありません。たとえば、最初の例はOWL2 ELとOWL2 RLの比較です。言語。
この概念はプログラミング言語に適用できますが、パターンマッチング言語、マークアップ言語、クエリ言語、視覚スタイルシート言語、正規表現(およびそれらが参照するすべての正規言語)などにも適用できます。英語のような自然言語の表現力を参照することもできます。これは非常に非公式に行われますが、自然言語処理に関連する問題を考慮するとより深刻になります。
「アイデア」とは、マシンと通信できるもの(操作、構造、アルゴリズムなど)を指しますか?それとも、他の人間に言語でキャプチャして伝達できる「人間」の概念を指しますか?
それは、その言語で表現できるものを指し、それ自体が純粋に物と見なされます。
たとえば、(あなたの質問はあなたが知っている言語の1つであることを示しているため、例ではjavascriptを使用します)javascriptステートメントを検討してください:
var x = 3 + 4;
これは、3と4の値の合計が計算さx
れ、特定の名前空間スコープ内のラベルに関連付けられた値が表されることを表します。
世界中のすべてのコンピューターを破壊し、そのコードを紙に書いたとしても、javascriptでも同じ意味が残ったままです。このようなコードを何に対しても実行することはできませんが、言語の抽象的な定義はまだ話し合うことができます。
これはつまらないように思えるかもしれませんが、実際のコンピューターを考慮せずに、言語が抽象的に推論できるものであることが実際に非常に重要です。一つには、コンピューター言語の理論的ポイントについて、実際にはまだ実現可能ではなかったと考える人々が、私たちを今日の私たちに導いたものの1つです。コンピューターはコンピューターサイエンスを必要としますが、コンピューターサイエンスはコンピューターを必要とせず、計算のアイデアだけを必要とします。
もちろん、私たちは現実の世界でコンピューターを使用しています。最近では、理論上それらを議論する少数の専門家ではなく、実際にコンピューターを使用する人が大勢います。リンクしたページには次のように表示されます:
表現力という用語は、さまざまな意味で使用できます。それはその言語で表現可能なアイデアの尺度を意味する場合があります:
簡単に関係なく(理論的表現力)
簡潔かつ容易に(実用的な表現力)
最初の感覚は、形式言語理論、数学論理、プロセス代数など、言語の正式な記述とその意味を扱う数学と論理の分野で支配的です。
非公式の議論では、この用語はしばしば第2の感覚、またはその両方を指します。これは、プログラミング言語について議論する場合によくあります。用語のこれらの非公式の使用を形式化する努力がなされました
この2つの用語の使用のうち、最初の実際の影響は、コンピューターに伝達できるものにのみ関係します。
2つ目は、読み取りと書き込みの両方の人間の理解に関連しますが、その程度は使用法によって大きく異なります。非公式であり、厳密に定義されていないためです。
たとえば、JavaScriptのような言語を使用して、変数がアンダースコアを前に付けた8桁の数字でなければならないなど、変数名に奇妙な制限を課した場合、/^_[0-9]{8}$/
表現力は失われますか?
正式な定義では、表現力は失われていません:100,000,000個の変数に制限されていますが、本当に必要な場合は、新しく作成された名前空間内でより多くの変数を保持するオブジェクトを作成することでこれを回避できます。そのため、今日javascriptで記述されたプログラムはすべてこの新しい形式に書き換えることができるため、同様に表現力があります。
非公式の定義では一部を失いましたが、どれだけ非公式かによって異なります。これは、非公式の使用に関する「ルール」とは言えないため、変化します。同じ名前空間に100,000,000を超える変数を持つプログラムは、単純な置換を超えて書き直さなければならないため、わずかな量を失ったと言えるかもしれません。さらにもっと非公式な使用法は、このような不格好な変数名が人間の包括的なものに与える精神的な影響に言及します。
また、人々が非公式に言語の一部ではないものを非公式に検討することにも注意してください。Javascriptの作成から今日までの変更を検討してください。
最も正式な定義では、表現力にはほとんど変化がありません。結局のところ、そもそもチューリング完全でした。
より非公式な定義により、配列操作、例外処理、(おそらく何よりも)正規表現の包含などの特定の点で、表現力が大幅に向上しました。これらは、以前はjavascriptでできなかったことを何もしませんが、javascript1.0で書くのに数キロバイトのコードを必要とし、実行に長い時間を要する数秒と1秒未満の実行時間で何かをすることができます。
はるかに非公式な定義により、ブラウザでのJavaScriptの最初の使用からの変更(フォーム入力の値を変更できdocument.write
、ページが最初に解析されて新しい場所に移動するか、履歴で前後に移動できますが、それ以外のことはほとんどありません)(サーバー呼び出しからのデータに基づいたものを含め、ページ上のほぼすべてを変更できる)それは絶対に計り知れませんが、そのほとんどはjavascriptではなく、作成されたオブジェクトモデルとAPIに関連しています言語ではなく、利用可能です(たとえば、IEのvbscriptは、これらの変更から等しく恩恵を受けました)。
私の考えでは、その最後の使用は非常に非公式なので実際には正しくありませんが、それは非公式の定義の問題です。
正式な定義では、それは実際にはまったく表情豊かになりませんでした。