非フォンノイマンプログラミングモデルの実用的なアプリケーションはありますか?最も広く採用されている非フォンノイマンプログラミング言語は何ですか?
非フォンノイマンプログラミングモデルの実用的なアプリケーションはありますか?最も広く採用されている非フォンノイマンプログラミング言語は何ですか?
回答:
「フォンノイマンアーキテクチャ」と言うときは、「フォンノイマンボトルネック」によって制限されているハードウェアを意味します。つまり、すべてのデータが狭いデータバスを介して送られます。
私が最もよく遭遇する非フォンノイマンプログラミング言語は、VHDLとVerilogです。です。VHDLおよびVerilogでは、デフォルトですべてが同時に発生します。プログラマーは、一連のイベントを順番に発生させるために、さらに努力する必要があります。これは、デフォルトで任意の時点で最大1行のコードを実行する「命令ポインター」を意味する他のほとんどのプログラミング言語とは非常に異なり、プログラマーは同じことを複数発生させるために余分な労力を費やす必要があります時間。
一部の人々はそれがより自然なデフォルトだと言うでしょう。プログラミングを始めたばかりの学生の多くは、「while(x> 0){...}」ループがxがゼロになる瞬間を終了することを期待しており、コンピューターがその状態を継続的に評価います。
VHDLおよびVerilogコードを作成するほとんどの人は、プログラムをFPGAにコンパイルし、アクティビティの小さなブロックを作成し、すべてのアクティビティを常に最高速度で実行します。多くの場合、このような人々は、入力ピンからデータを読み取り、一連のブロックを介してデータを処理する「パイプライン」をセットアップし、1つのブロックの出力ピンを次のブロックの入力ピンに直接配線し、最終ブロックが結果を送信します出力ピン。Unixパイプラインを連想させるますが、クロックサイクルごとに新しいデータが入り、新しいデータが出る点が異なります。
入力ピン、中間ステージ、および出力ピンはすべて互いに独立しています。さまざまなデータ間で多重化された単一のデータバスを再利用する必要はありません。
また、興味があるかもしれません:フォン・ノイマン/チューリング・アーキテクチャー以外に他のコンピューター・アーキテクチャーはありますか?
非フォン・ノイマンとは、バッカスの論文「プログラミングをフォン・ノイマンのスタイルから解放できるか?」のように、「フォン・ノイマンのボトルネック」をバイパスした言語を意味すると思います。興味のある方は、こちらでコピーを見つけることができます:http : //www.thocp.net/biographies/papers/backus_turingaward_lecture.pdf
あなたの質問への答えは、いくつかの理由であいまいでなければなりません。
まず、どの言語が彼の論文の基準を満たしましたか?この記事では関数型プログラミングをトレースしているものもありますが、ポイントフリープログラミングのようなものを意味するため、誤解と見なされています。それで、あなたは元々の誤解を受け入れますか、それとも本書の真の意図ですか?彼が何を意味していたかについての詳細については、以下を参照してください。http: //en.wikipedia.org/wiki/Function-level_programming
第二に、誤解を招く場合、機能はどの程度機能しますか?純粋な関数型言語、不純な関数型言語、および関数型パラダイムに比較的優しい言語があります。あなたが人気について言及し、それと機能的純度の間に逆の関係があることを考慮して、ちょうどどの言語が含まれるべきですか?最も人気のある純粋な関数型言語(まったく人気がない)、または「機能性」の最小基準を満たすより人気のある言語が必要ですか?後者の場合、それらの基準は何ですか?
だからあなたの視点に応じて:
Haskellは、私が知っている完全に純粋な関数型言語の中で最も人気があり、それに書かれたアプリケーションがあります。ただし、関数型プログラミングコミュニティでは重量級ですが、大規模なプログラミングコミュニティでは人気がありません。また、それを使用したので、私はそれが実際の使用に実用的であると感じませんでした、そして、それは理論的な仕事のために評価されるようです。それはポイントフリースタイルを可能にしますので、それでBackusの目標のいくつかにアプローチすることができます。
Clojure、Scala、およびF#はそれほど純粋ではありませんが、より実用的で一般的な関数型言語です。F#は、ポイントフリースタイルにも適しています。
Forthはポイントフリー言語の典型的な例であり、現在ではかなり普及していますが、Factorは注目を集めている別のポイントフリー言語ですが、全盛期のForthの人気に匹敵するとは思えません。
APLは、ある時点でBackusによって(おそらく彼の論文ではなく)、一歩前進したものとして言及されましたが、彼の目標とは完全には互換性がありません。その日は、金融部門で大きかった。Jのように、必ずその子孫をチェックアウトしてください。
JavaScriptは機能的ではありませんが、クロージャーを多用していることから明らかなように、プログラミングの高次スタイルに対してはかなりフレンドリーです。その人気を考えると、それは単に基準を満たすかもしれません。カリー化やコンビネーターの実装など、JavaScriptで行われた興味深いことをいくつか確認してください。
脚注として、彼の目標についてより多くの視点を提供するために、彼が彼の基準を満たすように設計した2つの言語をチェックアウトできます。彼らはまったく知られていないので、これは純粋に知識のためです:
Lindaとタプルスペースのプログラミングはその法案に合うと思う。並行性を伴う連想/パターンマッチングメモリ操作は、(概念的に)フォンノイマンボトルネックが解消されることを意味します。
その方向に進むと、純粋なアクターモデル言語も命令の順序付けではなくコミュニケーションをモデル化します。そして、それらは形式主義であり、実際のプログラミング言語ではありませんが、Pi計算、CSP、ペトリネットのような計算を関連する方法でモデル化します。
リンクについてはウィキペディアを参照してください(私は新しいユーザーであり、スパムから保護されています)が、Lindaの名前に関するいくつかの風変わりなユーモアについては、http://c2.com/cgi/wiki?LindaEtymologyを参照してください。