Unterschiede zwischen Programmiermodell und Programmierparadigma?

8
  1. Welche Beziehung und welchen Unterschied besteht zwischen einem Programmiermodell und einem Programmierparadigma? (insbesondere wenn es um das Programmiermodell und das Programmierparadigma für eine Programmiersprache geht.)

  2. Wikipedia versucht meine Frage in 1 zu beantworten:

    Programmierparadigmen können auch mit Programmiermodellen verglichen werden , die Abstraktionen von Computersystemen sind. Beispielsweise ist das "von Neumann-Modell" ein Programmiermodell, das in herkömmlichen sequentiellen Computern verwendet wird. Für paralleles Rechnen gibt es viele mögliche Modelle, die typischerweise unterschiedliche Arten der Verbindung von Prozessoren widerspiegeln. Die häufigsten basieren auf gemeinsam genutztem Speicher, verteiltem Speicher mit Nachrichtenübermittlung oder einer Mischung aus beiden.

    Aber ich verstehe es nicht:

    • Ist es falsch, dass das Zitat in Wikipedia sagt "das von Neumann-Modell ist ein Programmiermodell", weil ich verstehe, dass das Von Neumann-Modell ein Architekturmodell von https://en.wikipedia.org/wiki/Von_Neumann_architecture ist ?

    • Spiegeln die parallelen Programmiermodelle "typischerweise unterschiedliche Arten der Verbindung von Prozessoren wider"? Oder spiegeln parallele Architekturmodelle stattdessen "unterschiedliche Arten der Verbindung von Prozessoren wider"?

  3. Können Sie zur Beantwortung der Frage in 1 klarstellen, was ein Programmiermodell ist?

    Ist es richtig, dass ein Programmiermodell von einer Programmiersprache oder API-Bibliothek bereitgestellt / implementiert wird und eine solche Implementierung nicht eindeutig ist?

    Aus Raubers Buch " Parallele Programmierung " ist "Programmiermodell" eine Abstraktion über "Rechenmodell (dh Rechenmodell)", die wiederum über "Architekturmodell" steht. Ich denke, dass ein Programmiermodell nicht nur beim parallelen Rechnen verwendet wird, sondern für eine Programmiersprache oder API-Bibliothek.

Tim
quelle

Antworten:

5

Ein Programmiermodell wird durch die Systemarchitektur impliziert. Wenn Ihre Systemarchitektur eine Registermaschine ist, besteht Ihr Programmiermodell aus Maschinencodeoperationen für Register. Wenn Ihre Architektur eine Stapelmaschine ist, besteht Ihr Programmiermodell aus Stapeloperationen. Eine Von Neumann-Architektur und eine Harvard-Architektur werden andere Programmiermodelle haben. Selbstmodifizierender Code ist in einer Von Neumann-Architektur möglich, jedoch nicht in einer Harvard-Architektur.

Ein Programmierparadigma ist auf höherer Ebene: Es ist die Art und Weise, wie ein Problem modelliert wird (imperativ oder deklarativ, objektorientiert, funktional, logisch, ...). Eine einzige Paradigmensprache unterstützt eine davon. Multiparadigmensprachen sind eher eine Art Schweizer Taschenmesser, die Elemente aus mehr Paradigmen herausnehmen.

Jede Architektur (und das entsprechende Modell) verfügt über einen eigenen Satz von Maschinencode-Anweisungen. Diese Maschinencodesprache selbst folgt dem imperativen Paradigma (tun Sie dies, tun Sie dies, lesen Sie Register A, addieren Sie den Wert zu Register B, ... oder setzen Sie einen Wert auf den Stapel, setzen Sie einen anderen Wert auf den Stapel, addiere die beiden Werte oben ..., etc ...)

(Zumindest habe ich nie einen nicht zwingenden Hardwareprozessor gesehen)

Eine Hochsprache (unabhängig von ihrem Paradigma) wird für diesen Maschinencode kompiliert oder interpretiert.

Über Parallelität: Wenn wir miteinander verbundene Prozessoren betrachten, wird klar sein, dass die Art und Weise, wie sie miteinander verbunden sind, Teil des Programmiermodells sein wird. Ein alter INMOS-Transputer ist mit vier anderen Transputtern verbunden. Der Maschinencode enthält Anweisungen zur Kommunikation mit den naburing Transputern.

Aber auch bei neueren Systemen muss der Weg zur gegenseitigen Ausgrenzung auf niedriger Ebene geklärt werden. Auf einem Einprozessorsystem müssen wir die Interrupts beim Verlassen oder Betreten des kritischen Abschnitts ein- und ausschalten. Auf einem Multiprozessorsystem benötigen wir eine monoatomare 'Test and Set'-Anweisung. Dies ist Teil des Programmiermodells.

Parallele Rechenparadigmen sind Modelle auf hoher Ebene zur Verwendung von Parallelität. Denken Sie an Sprachen mit Thread-Objekten oder verwenden Sie Semaphoren und Monitore als Sprachelemente.

Wenn wir auf verschiedenen Betriebssystemen programmieren, werden verschiedene APIs verwendet. (oder auch wenn wir auf demselben System programmieren, aber eine andere Bibliothek verwenden - eine Grafikbibliothek pe). Dies wird unser Programmiermodell ändern. Der Low-Level-Code ist anders, aber wenn es eine gute Abstraktion gibt (Art von Code einmal, irgendwo kompilieren), ist dies in der High-Level-Sprache unsichtbar. Wenn nicht, müssen Sie kleine Änderungen an Ihrem Code vornehmen. Da Sie jedoch dieselbe Hochsprache verwenden, wird sich das Paradigma nicht ändern.

EL Dendo
quelle
4

Es gibt keine genaue Antwort auf Ihre Frage. Die Begriffe "Programmiermodell" und "Programmierparadigma" sind keine exakten Fachbegriffe mit festen Definitionen. Abhängig von einem Kontext definieren einige Autoren möglicherweise "Programmiermodell" auf eine bestimmte Art und Weise, aber dies wird normalerweise nur einige Aspekte dessen abdecken, was die Leute unter "Programmiermodell" verstehen.

Als gute Faustregel sollten Sie vor jedem davonlaufen, der das Wort "Paradigma" verwendet. (Ich war ein Doktorand, als das Wort stark überstrapaziert wurde.)

Trotzdem ist es immer noch sehr nützlich zu verwenden , diese Sätze, auch wenn sie nicht sehr genau ist. Sie sind hilfreich bei der Erklärung und Organisation verschiedener Aspekte der Berechnung. Beachten Sie jedoch, dass es keine akzeptierten mathematischen Definitionen gibt, die die Verwendung vollständig abdecken. Wenn Sie also sehr genaue Fragen stellen, erhalten Sie keine sehr genauen Antworten, sondern Meinungen und hilfreiche Erklärungen.

Sie haben insbesondere gefragt: "Welche Beziehung und welchen Unterschied besteht zwischen einem Programmiermodell und einem Programmierparadigma?" Nun, das hängt davon ab, wen Sie fragen und in welchem ​​Jahrzehnt Sie leben. Hier ist, was mein Wörterbuch sagt:

Paradigma - eine Weltanschauung, die den Theorien und Methoden eines bestimmten wissenschaftlichen Themas zugrunde liegt

Modell - eine vereinfachte, insbesondere mathematische Beschreibung eines Systems oder Prozesses zur Unterstützung von Berechnungen und Vorhersagen

Ein Paradigma ist also ein umfassenderes Konzept als ein Modell. Auf jeden Fall rate ich Ihnen, Ihre Frage nicht als eine Frage der Wissenschaft zu betrachten, weil dies nicht der Fall ist.

Andrej Bauer
quelle
1

Programming models Überbrücken Sie die Lücke zwischen der zugrunde liegenden hardware architectureund der unterstützenden Softwareschicht, die Anwendungen zur Verfügung stehen.

Programming models unterscheiden sich von programming languages und application programming interfaces ( APIs). Insbesondere ist ein Programmiermodell eine Abstraktion des zugrunde liegenden Computersystems, die den Ausdruck von algorithms und data structures ermöglicht.

Im Vergleich dazu bieten Sprachen und APIs Implementierungen dieser Abstraktionen und ermöglichen die praktische Umsetzung der Algorithmen und Datenstrukturen - ein Programmiermodell existiert unabhängig von der Wahl der Programmiersprache und der unterstützenden APIs.

Programmiermodelle konzentrieren sich in der Regel darauf, die Produktivität, Leistung und Portabilität der Entwickler auf andere Systemdesigns zu steigern. Die sich schnell ändernde Art der Prozessorarchitekturen und die Komplexität beim Entwurf einer Exascale-Plattform stellen diese Ziele vor erhebliche Herausforderungen. Mehrere andere Faktoren werden wahrscheinlich das Design zukünftiger Programmiermodelle beeinflussen.

Quelle https://asc.llnl.gov/content/assets/docs/exascale-pmWG.pdf , "Advanced Simulation and Computing" (Atomwaffen)

Mehr auf Twitter: #ProgrammingModel

Programmierparadigmen

Imperative Programming mit einer expliziten Folge von Befehlen, die den Status aktualisieren.

Declarative Programming indem Sie das gewünschte Ergebnis angeben, nicht wie Sie es erhalten.

Structured Programming mit sauberen, goto-freien, verschachtelten Kontrollstrukturen.

Procedural Imperative programming mit Prozeduraufrufen.

Functional (Applicative) Programming mit Funktionsaufrufen, die jeden globalen Zustand vermeiden.

Event-Driven Programming mit Emittern und Listenern von asynchronen Aktionen.

Flow-Driven Programming Prozesse, die über vordefinierte Kanäle miteinander kommunizieren.

Logic (Rule-based) Programmingdurch Angabe einer Reihe von Fakten und Regeln. Ein Motor leitet die Antworten auf Fragen ab.

Quelle https://cs.lmu.edu/~ray/notes/paradigms/

Das Durchdenken dieser Definitionen hilft, Antworten auf die Frage zu geben.

Ein Weg zur Vernunft wäre zu sagen, dass programming models näher am Design eines Systems / einer Anwendung liegen und aus einem oder mehreren programming paradigms bestehen können, die einer Programmiersprache nahe kommen.

Dies zeigt sich sehr deutlich in datenwissenschaftlichen Anwendungen, in denen eine Reihe von Technologien verwendet werden, von denen jede ihre eigenen programming paradigmhat. Insgesamt sollte das System jedoch vom Architekten kohärent gehalten werden programming model.

Weitere Informationen zu dieser Argumentation: https://twitter.com/semanticbeeng/status/1103027054302425089?s=20

SemanticBeeng
quelle