Wie vergleicht sich „sprachorientierte Programmierung“ mit OOP/Funktional in der realen Welt?

StackOverflow https://stackoverflow.com/questions/1703869

  •  19-09-2019
  •  | 
  •  

Frage

Ich habe kürzlich angefangen, eine F# -verwandte Literatur zu lesen, die von "Real World Functional Programing" und "Expert F#", zB, sprach. Am Anfang ist es einfach, weil ich einen Hintergrund in Haskell habe und C#kenne. Aber wenn es darum geht "Sprachorientierte Programmierung"Ich verstehe es einfach nicht. - Ich habe einige Erklärungen gelesen und es ist wie ein akademisches Papier, das mit jedem Satz abstrakter und seltsamer wird.

Hat jemand ein einfaches Beispiel für solche Dinge und wie es sich mit vorhandenen Paradigmen vergleicht? Es ist nicht nur akademische Fantasie, nicht wahr? ;))

Danke, Wishi

War es hilfreich?

Lösung

F# hat ein paar Mechanismen für das Programmieren in einem Stil, den man als "sprachorientiert" bezeichnen könnte.

Zunächst können die Syntax-Netzwerke (Funktionsaufrufe benötigen keine Klammern, können eigene Infix-Operatoren definieren, ...), damit viele benutzerdefinierte Bibliotheken das Aussehen eingebetteter DSLs haben.

Zweitens können Sie mit dem F# "Zitat" -Mechanismus den Code zitieren und dann mit einer alternativen Semantik-/Bewertungsmotor ausführen.

Drittens bieten F# "Berechnungsausdrücke" (auch bekannt als Workflows, Monads, ...) eine Möglichkeit, eine Art alternative Semantik für bestimmte Codeblöcke bereitzustellen.

All diese Art fallen in die EDSL -Kategorie.

Andere Tipps

Sprachorientiertes Programm (LOP) kann verwendet werden, um die folgenden zu beschreiben.

Erstellen einer externen Sprache (DSL)

Dies ist möglicherweise die häufigste Verwendung von LOP und ist dort, wo Sie über eine bestimmte Domäne verfügen - z. Erstellen Sie lieber eine separate Programmiersprache für genau diese Domäne. So können Sie Ihr Problem in einer separaten externen Sprache codieren.

Erstellen einer internen Sprache

Manchmal möchten Sie, dass Ihr Programmcode weniger wie "Code" aussieht und enger auf die Problemdomäne abbildet. Das heißt, den Code "Lesen Sie natürlicher". Eine fließende Schnittstelle ist ein Beispiel dafür: Fließende Schnittstelle. Außerdem hat F# aktive Muster, die dies recht gut unterstützen.

Ich schrieb Ein Blog -Beitrag Auf LOP vor einiger Zeit liefert das einige Codebeispiele.

In der objektorientierten Programmierung versuchen Sie, ein Problem mit Objekten zu modellieren. Sie können diese Objekte dann miteinander verbinden, um Funktionen auszuführen ... und am Ende das ursprüngliche Problem zu lösen.

In der sprachorientierten Programmierung entwerfen Sie eine neue domänenspezifische Sprache, die am besten geeignet ist, um Ihr Problem effizient zu lösen, anstatt eine vorhandene objektorientierte oder funktionale Programmiersprache zu verwenden.

Der Begriff Sprachorientierte Programmierung kann insofern überladen sein, da sie möglicherweise unterschiedliche Bedeutungen für verschiedene Personen hat.

Aber in Bezug auf die Art und Weise, wie ich es verwendet habe, bedeutet dies, dass Sie eine DSL erstellen (http://en.wikipedia.org/wiki/domain_specific_loguage) Bevor Sie Ihr Problem lösen.

Sobald Ihre DSL erstellt wurde, schreiben Sie Ihr Programm in Bezug auf die DSL.

Die Idee ist, dass Ihre DSL eher dazu geeignet ist, das Problem auszudrücken als eine allgemeine Sprache.

Einige Beispiele wären die Datei -Syntax oder Ruby on Rails ActiveCord -Klasse.

Ich habe nicht direkt Gebrauchte sprachorientierte Programmierung in realen Situationen (Erstellen einer tatsächlichen Sprache), ist jedoch nützlich, um darüber nachzudenken und hilft, bessere domänengesteuerte Objekte zu entwerfen.

In einem Sinn, irgendein Die reale Entwicklung in Lisp oder Schema kann als "sprachorientiert" angesehen werden, da Sie die "Sprache" Ihrer Anwendung und sein abstrakter Baum beim Code entwickeln. Gurke ist ein weiteres Beispiel in der realen Welt, von dem ich gehört habe.

Bitte beachten Sie, dass dieser Ansatz (und einen domänengesteuerten Ansatz) in der realen Entwicklung einige Probleme haben. Ein Hauptproblem, mit dem ich zuvor behandelt habe, ist eine Nichtübereinstimmung zwischen der Logik, die in der Domäne sinnvoll ist, und der Logik, die in der Software sinnvoll ist. Domain (Business) -Logik kann extrem verwickelt und sinnlos sein - und bewirkt, dass Domänenmodelle zusammenbrechen.

Ein einfaches Beispiel für eine domänenspezifische Sprache, die erwähnt wird hier, ist sql. Auch: Unix Shell -Skripte.

Wenn Sie viele grundlegende OPs durchführen und sich mit der zugrunde liegenden Sprache viel überschneiden, ist es wahrscheinlich übergreichend.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top