実用的な非フォンノイマンアーキテクチャとは何ですか?


16

非フォンノイマンプログラミングモデルの実用的なアプリケーションはありますか?最も広く採用されている非フォンノイマンプログラミング言語は何ですか?


6
「非フォンノイマン」プログラミングモデルとは
スレシュヴェンカト

私も質問を理解していません。質問の背景を追加して、質問内容を理解しやすくすることもできます。
カベ

3
フォンノイマンアーキテクチャにはCPUがあります。したがって、並列処理アーキテクチャはほぼ間違いなく非ノイマンです(ノイマンアーキテクチャは並列処理の前に発明されました)。しかし、質問はあいまいであるか、曖昧に定義されているように思われることに同意しました。フォン・ノイマンは、実際のプログラミング・モデルではなく、コンピューター・アーキテクチャーを指します。シナジー/共生の一種でプログラミングモデルとCPU /コンピュータアーキテクチャが存在だけでなく、互いに多少独立している....異なるアーキテクチャはアーキテクチャに「結合」されているプログラミングモデルことなく、異なるプログラミングモデルを実装することができ...
vzn

1
非フォンノイマンプログラミング言語とは何ですか?さらに言えば、フォンノイマンプログラミング言語とは何ですか?(私はバッカスの定義---本質的に「命令型言語」---少しでも説得力がありません。)
ジェフ

1
@Ronny:ウィキペディアのページは、Backusの記事のオウムです。
ジェフ

回答:


12

「フォンノイマンアーキテクチャ」と言うときは、「フォンノイマンボトルネック」によって制限されているハードウェアを意味します。つまり、すべてのデータが狭いデータバスを介して送られます。

私が最もよく遭遇する非フォンノイマンプログラミング言語は、VHDLVerilogです。です。VHDLおよびVerilogでは、デフォルトですべてが同時に発生します。プログラマーは、一連のイベントを順番に発生させるために、さらに努力する必要があります。これは、デフォルトで任意の時点で最大1行のコードを実行する「命令ポインター」を意味する他のほとんどのプログラミング言語とは非常に異なり、プログラマーは同じことを複数発生させるために余分な労力を費やす必要があります時間。

一部の人々はそれがより自然なデフォルトだと言うでしょう。プログラミングを始めたばかりの学生の多くは、「while(x> 0){...}」ループがxがゼロになる瞬間を終了することを期待しており、コンピューターその状態を継続的に評価います。

VHDLおよびVerilogコードを作成するほとんどの人は、プログラムをFPGAにコンパイルし、アクティビティの小さなブロックを作成し、すべてのアクティビティを常に最高速度で実行します。多くの場合、このような人々は、入力ピンからデータを読み取り、一連のブロックを介してデータを処理する「パイプライン」をセットアップし、1つのブロックの出力ピンを次のブロックの入力ピンに直接配線し、最終ブロックが結果を送信します出力ピン。Unixパイプラインを連想させるますが、クロックサイクルごとに新しいデータが入り、新しいデータが出る点が異なります。

入力ピン、中間ステージ、および出力ピンはすべて互いに独立しています。さまざまなデータ間で多重化された単一のデータバスを再利用する必要はありません。

また、興味があるかもしれません:フォン・ノイマン/チューリング・アーキテクチャー以外に他のコンピューター・アーキテクチャーはありますか?


11

非フォン・ノイマンとは、バッカスの論文「プログラミングをフォン・ノイマンのスタイルから解放できるか?」のように、「フォン・ノイマンのボトルネック」をバイパスした言語を意味すると思います。興味のある方は、こちらでコピーを見つけることができます:http : //www.thocp.net/biographies/papers/backus_turingaward_lecture.pdf

あなたの質問への答えは、いくつかの理由であいまいでなければなりません。

まず、どの言語が彼の論文の基準を満たしましたか?この記事では関数型プログラミングをトレースしているものもありますが、ポイントフリープログラミングのようなものを意味するため、誤解と見なされています。それで、あなたは元々の誤解を受け入れますか、それとも本書の真の意図ですか?彼が何を意味していたかについての詳細については、以下を参照してください。http//en.wikipedia.org/wiki/Function-level_programming

第二に、誤解を招く場合、機能はどの程度機能しますか?純粋な関数型言語、不純な関数型言語、および関数型パラダイムに比較的優しい言語があります。あなたが人気について言及し、それと機能的純度の間に逆の関係があることを考慮して、ちょうどどの言語が含まれるべきですか?最も人気のある純粋な関数型言語(まったく人気がない)、または「機能性」の最小基準を満たすより人気のある言語が必要ですか?後者の場合、それらの基準は何ですか?

だからあなたの視点に応じて:

  1. Haskellは、私が知っている完全に純粋な関数型言語の中で最も人気があり、それに書かれたアプリケーションがあります。ただし、関数型プログラミングコミュニティでは重量級ですが、大規模なプログラミングコミュニティでは人気がありません。また、それを使用したので、私はそれが実際の使用に実用的であると感じませんでした、そして、それは理論的な仕事のために評価されるようです。それはポイントフリースタイルを可能にしますので、それでBackusの目標のいくつかにアプローチすることができます。

  2. Clojure、Scala、およびF#はそれほど純粋ではありませんが、より実用的で一般的な関数型言語です。F#は、ポイントフリースタイルにも適しています。

  3. Forthはポイントフリー言語の典型的な例であり、現在ではかなり普及していますが、Factorは注目を集めている別のポイントフリー言語ですが、全盛期のForthの人気に匹敵するとは思えません。

  4. APLは、ある時点でBackusによって(おそらく彼の論文ではなく)、一歩前進したものとして言及されましたが、彼の目標とは完全には互換性がありません。その日は、金融部門で大きかった。Jのように、必ずその子孫をチェックアウトしてください。

  5. JavaScriptは機能的ではありませんが、クロージャーを多用していることから明らかなように、プログラミングの高次スタイルに対してはかなりフレンドリーです。その人気を考えると、それは単に基準を満たすかもしれません。カリー化やコンビネーターの実装など、JavaScriptで行われた興味深いことをいくつか確認してください。

脚注として、彼の目標についてより多くの視点を提供するために、彼が彼の基準を満たすように設計した2つの言語をチェックアウトできます。彼らはまったく知られていないので、これは純粋に知識のためです:

http://en.wikipedia.org/wiki/FP_(programming_language

http://en.wikipedia.org/wiki/FL_(programming_language


1
現在、彼は関数型プログラミングではなくポイントフリープログラミングのようなものを意味しているように見えます。これに関する議論へのポインタはありますか?面白そう。
スレシュヴェンカト

Backusのプログラミングモデルは「関数レベルのプログラミング」と呼ばれ、en.wikipedia.org / wiki / Function- level_programmingに記事があります。本当に良いリンクは知りません(もしあれば見つけたいです!)が、グーグルの「関数レベルのプログラミング」は、ビデオを含む興味深い見た目のリンクを見つけます。
ロニー

1
@SureshVenkat:FPおよびFLの言語は、Backusが関数レベルのプログラミングのアイデアをサポートするために作成したものです。こちらもご覧ください「暗黙のプログラミング」、より具体的には、APLとFP / FLを組み合わせて実際の使用で最も不可解で表現力豊かな汎用言語を作成するJ言語を。また、関数型言語で暗黙のプログラミングを使用することに関するSOの投稿を思い出します。
CAマッキャン

ちなみに、この投稿の年表はかなり外れているようです。関数型プログラミング(LispとMLの両方の伝統における)は、教会のラムダ計算とチューリングの両方より前の組み合わせ論理の形での機能レベルプログラミング自体を含む、ほとんどまたはすべての既存のプログラミングパラダイムがそうであるように、Backusのチューリング賞の講義よりもずっと前のことです計算理論に取り組む!(ああ、と私は思いずっとむしろJavaScriptのような残虐行為よりも実用的な現実世界のためにHaskellのに使用します。)
CAマッキャン

@camccannポストに年表を設定したことはありません。また、Lispは広すぎてどんな主張もサポートできません。たとえば、すべてが末尾再帰ではないため、すべてのLispが機能するわけではありません。組み合わせロジックへの言及は好きですが、Backusのポイントは、パラダイムをサポートするコンピューターをプログラムできる言語を持っていることだと思います。したがって、組み合わせロジックは彼の議論に光を当てますが、最終的には彼の主張には影響しません。
ロニー

2

Lindaとタプルスペースのプログラミングはその法案に合うと思う。並行性を伴う連想/パターンマッチングメモリ操作は、(概念的に)フォンノイマンボトルネックが解消されることを意味します。

その方向に進むと、純粋なアクターモデル言語も命令の順序付けではなくコミュニケーションをモデル化します。そして、それらは形式主義であり、実際のプログラミング言語ではありませんが、Pi計算、CSP、ペトリネットのような計算を関連する方法でモデル化します。

リンクについてはウィキペディアを参照してください(私は新しいユーザーであり、スパムから保護されています)が、Lindaの名前に関するいくつかの風変わりなユーモアについては、http://c2.com/cgi/wiki?LindaEtymologyを参照してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.