プログラミングモデルとプログラミングパラダイムの違い?


8
  1. プログラミングモデルとプログラミングパラダイムの関係と違いは何ですか?(特に、プログラミングモデルとプログラミング言語のプログラミングパラダイムについて話すとき。)

  2. ウィキペディア は1で私の質問に答えようとします:

    プログラミングパラダイムは、コンピューターシステムを抽象化したプログラミングモデルと比較することもできます。たとえば、「フォンノイマンモデル」は、従来のシーケンシャルコンピュータで使用されているプログラミングモデルです。並列計算の場合、通常、プロセッサを相互接続するさまざまな方法を反映した多くの可能なモデルがあります。最も一般的なものは、共有メモリ、メッセージパッシング付きの分散メモリ、またはこの2つのハイブリッドに基づいています。

    しかし、私はそれを理解していません:

    • フォンノイマンモデルはhttps://en.wikipedia.org/wiki/Von_Neumann_architectureの建築モデルであることを理解しているため、ウィキペディアの引用に「「フォンノイマンモデル」はプログラミングモデルである」と記載されているのは間違い ですか。

    • 並列プログラミングモデルは「通常、プロセッサを相互接続するさまざまな方法を反映していますか」?それとも、代わりに「プロセッサを相互接続するさまざまな方法を反映した」並列アーキテクチャモデルですか?

  3. 1の質問に答えるために、プログラミングモデルとは何かを明確にできますか?

    プログラミング言語またはAPIライブラリによって提供/実装されたプログラミングモデルであり、そのような実装は一意ではないのは正しいですか。

    Rauberの並列プログラミングの本、「プログラミング・モデル」、「アーキテクチャ・モデル」以上の順番である「計算モデル(すなわち計算モデル)」上記の抽象化です。プログラミングモデルは、並列コンピューティングで使用されるだけでなく、プログラミング言語またはAPIライブラリでも使用されていると思います。

回答:


5

プログラミングモデルは、システムアーキテクチャによって暗示されます。システムアーキテクチャがレジスタマシンの場合、プログラミングモデルはレジスタに対するマシンコード操作で構成されます。アーキテクチャがスタックマシンの場合、プログラミングモデルはスタックオペレーションで構成されます。フォンノイマンアーキテクチャとハーバードアーキテクチャには、他のプログラミングモデルがあります。フォンノイマンアーキテクチャでは自己修正コードを使用できますが、ハーバードアーキテクチャでは使用できません。

プログラミングパラダイムはより高レベルです。これは、問題をモデル化する方法です(命令型または宣言型、オブジェクト指向、関数型、ロジックなど)。単一のパラダイム言語がこれらの1つをサポートします。マルチパラダイム言語は、より多くのパラダイムから要素を取り出す一種のスイスのアーミーナイフです。

すべてのアーキテクチャ(および対応するモデル)には、独自の一連のマシンコード命令があります。このマシンコード言語自体は命令パラダイムに従います(これを行う、それを行う、レジスターAを読み取る、レジスターBに値を追加する、またはスタックの上部に値を置く、スタックの上部に別の値を置く、上に2つの値を追加...など)

(少なくとも、命令型でないハードウェアプロセッサを見たことはありません)

高水準言語(あらゆるパラダイムの)がこのマシンコードにコンパイルまたは解釈されます。

並列処理について:相互接続されたプロセッサを考慮すると、それらが相互接続する方法がプログラミングモデルの一部になることは明らかです。古いINMOSトランスピュータpeは、他の4つのトランスピュータと接続します。マシンコードには、naburingトランスピュータと通信するための指示があります。

しかし、最近のシステムでは、相互排除を提供する方法を低レベルで解決する必要があります。1プロセッサシステムでは、クリティカルセクションを出入りするときに割り込みをオンまたはオフにする必要があります。マルチプロセッサシステムでは、単原子の「テストおよび設定」命令が必要です。これはプログラミングモデルの一部です。

並列計算パラダイムは、並列処理を使用するための高レベルモデルです。オブジェクトをスレッド化した言語を考えたり、セマフォやモニターを言語要素として使用したりします。

異なるオペレーティングシステムでプログラミングする場合、異なるAPIが使用されます。(または、同じシステムでプログラミングしているが、他のライブラリ-グラフィックライブラリpeを使用している場合でも)これにより、プログラミングモデルが変更されます。低レベルのコードは異なりますが、適切な抽象化(コードの種類が1度で、どこでもコンパイルできる)がある場合、これは高水準言語では見えません。そうでない場合は、コードに小さな変更を加える必要があります。ただし、同じ高級言語を使用するため、パラダイムに変化はありません。


4

あなたの質問に対する正確な答えはありません。「プログラミングモデル」および「プログラミングパラダイム」という用語は、固定された定義を持つ厳密な技術用語ではありません。コンテキストによっては、「プログラミングモデル」を特定の方法で定義する著者もいますが、通常は、「プログラミングモデル」で理解することの一部の側面のみをカバーすることになります。

経験則として、「パラダイム」という言葉を使う人から逃げる必要があります。(私は大学院生で、言葉がひどく使われすぎていた。)

それにもかかわらず、これらのフレーズはあまり正確ではありませんが、これらのフレーズを使用すると非常に便利です。これらは、計算のさまざまな側面の説明と整理に役立ちます。ただし、使用法を完全にカバーする受け入れられた数学的な定義はないことに注意してください。したがって、非常に正確な質問をすると、非常に正確な答えは得られず、むしろ意見や役立つ説明が得られます。

特に、「プログラミングモデルとプログラミングパラダイムの関係と違いは何ですか?」まあ、それはあなたが尋ねる人とあなたが何十年住んでいるかに依存します。これが私の辞書が言うことです:

パラダイム –特定の科学的主題の理論と方法論の基礎となる世界観

モデル –計算と予測を支援する、システムまたはプロセスの簡略化された説明、特に数学的な説明

したがって、パラダイムはモデルよりも広い概念です。いずれにせよ、あなたの質問は科学ではないので、科学の 1つとして考えないことをお勧めします。


1

Programming modelhardware architectureアプリケーションで使用可能なソフトウェアの基礎となるサポート層の間のギャップを埋める。

Programming modelsはprogramming languagesおよびapplication programming interfaces(APIs)とは異なります。具体的には、プログラミングモデルは、algorithmdata structureの両方の表現を可能にする、基礎となるコンピューターシステムの抽象化です。

対照的に、言語とAPIはこれらの抽象化の実装を提供し、アルゴリズムとデータ構造を実行できるようにします。プログラミングモデルは、プログラミング言語とサポートするAPIの両方の選択とは無関係に存在します。

プログラミングモデルは通常、開発者の生産性、パフォーマンス、および他のシステム設計への移植性の向上に重点を置いています。急速に変化するプロセッサアーキテクチャの性質と、エクサスケールプラットフォームの設計の複雑さは、これらの目標に大きな課題をもたらします。他のいくつかの要因が、将来のプログラミングモデルの設計に影響を与える可能性があります。

出典https://asc.llnl.gov/content/assets/docs/exascale-pmWG.pdf、「Advanced Simulation and Computing」(核兵器)

Twitterの詳細: #ProgrammingModel

プログラミングパラダイム

Imperative Programming 状態を更新する明示的な一連のコマンドを使用します。

Declarative Programming 取得方法ではなく、必要な結果を指定する。

Structured Programming クリーンでgotoフリーのネストされた制御構造。

Procedural Imperative programming プロシージャコール。

Functional (Applicative) Programming グローバル状態を回避する関数呼び出し。

Event-Driven Programming 非同期アクションのエミッターとリスナーがあります。

Flow-Driven Programming 事前定義されたチャネルを介して互いに通信するプロセス。

Logic (Rule-based) Programmingファクトとルールのセットを指定する。エンジンが質問への回答を推測します。

ソースhttps://cs.lmu.edu/~ray/notes/paradigms/

これらの定義をじっくりと考えることで、質問に対する答えを得ることができます。

理由の1つは、programming modelsはシステム/アプリケーションの設計にprogramming paradigm近く、プログラミング言語に近い1つ以上のsで構成できるということです。

これは、それぞれが独自の多数のテクノロジーを使用しているデータサイエンスアプリケーションで非常にはっきりと見ることができますprogramming paradigmが、全体として、アーキテクトは一貫性を保つ必要がありprogramming modelます。

この推論方法の詳細:https : //twitter.com/semanticbeeng/status/1103027054302425089?s=20

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