Makrounterstützung in F #
-
01-07-2019 - |
Frage
Nach Practical Common Lisp Lesen habe ich endlich verstanden, was die große Sache über Makros war, und ich habe für eine Sprache für die .NET-Plattform suchen, der dies unterstützt. Es gibt ein paar Lisp Dialekte für .NET, aber von dem, was ich in der Lage gewesen, alle sind zu sammeln entweder sehr Beta- oder aufgegeben. Vor kurzem mein Interesse wurde von Clojure ausgelöst, aber es ist für die Java-Plattform und während wahrscheinlich ikvm verwenden könnte es nicht einige integrierte fühlen. Vor allem, wenn Sie Sachen wie WPF zu tun.
Vor kurzem wurde ich hörte Flüstern über F #, habe ich versucht, in der Dokumentation zu sehen, ob ich etwas über Makro-Unterstützung finden konnten, haben sie aber nicht gefunden. So weiß jemand?
Danke:)
Lösung
Nun, F # basierend auf OCaml und OCaml hat ein eher umfangreiches Makrosystem . In Anbetracht der syntaktischen und semantischen Ähnlichkeiten von F # und OCaml Sie F # zu portieren über das Ocaml Makro System in der Lage sein kann.
Anders als Ocaml Makrosystem zu stehlen Ich bin nicht bewusst ein Dose Makro-Systems für F #.
Andere Tipps
Nemerle, unter http://nemerle.org/ , ist eine .NET-Sprache (auch Stütz mono) dass man unterstützt viele der funktionalen Programmierparadigma, während visuell Nähe von C # zu bleiben. Es verfügt über umfangreiche Makro-Unterstützung.
Nein. Kein Makros für F #.
Haben Sie sich unter Boo ? Während Boo-Makros nicht hat, es hat eine offene Compiler-Pipeline, die Makros für die syntaktische metaprogramming eine gute Alternative ist.
[EDIT] Wie in den Kommentaren erwähnt, Boo hat haben Makros jetzt.
aber gute Schrecken die Syntax in diesen ocaml Beispiele sieht dunkel
Es sind Sie in den gleichen grundlegenden syntaktischen Trade-off laufen Sie mit Lisp tun. Wenn Sie die Leistung von Lisp-like-Makros wollen, neigen Sie dazu, entweder mit Lisp-ähnlicher Syntax für die Sprache am Ende, oder auch Ihre Makro-Syntax sieht ganz anders aus Ihrer normalen Syntax ... nichts falsch mit entweder Ansatz, nur unterschiedlichen Entscheidungen
Ich dachte, ich mag darauf hinweisen, dass es jetzt ein ziemlich aktiv .NET / Mono-Port von Clojure . Clojure unterstützt LISP Stil Makros wie in der Frage festgestellt wird.
Wie andere gesagt haben, Makros werden in F # an dieser Stelle unterstützt (Ende 2010).
Vor kurzem wurde ich hörte Flüstern über F #, habe ich versucht, in der Dokumentation zu sehen, ob ich etwas über Makro-Unterstützung finden konnten, haben sie aber nicht gefunden. So weiß jemand?
F # unterstützt keine Makros und es ist unwahrscheinlich, dass es jemals wird.
Wie wäre es mit F # Zitate?
Das kann der umgekehrt sein als das, was Sie wollen, aber wissen Sie über RDNZL ? Es ist eine foerign Funktions-Schnittstelle (FFI), die Sie aufrufen .NET-Bibliotheken aus dem Lisp-Code ermöglicht.
Sie sind höchstwahrscheinlich viel weniger reif als jede Common Lisp oder Scheme-Implementierung, aber es gibt Lisp Dialekte für .NET: L # und DotLisp .
Es gibt zwei aktiv entwickelt Lisps für .net
Ironscheme - DLR basiertes Schema Implementierung
Xronos - DLR basierte Port von clojure
ich untersuchen derzeit Möglichkeiten der Meta-Programmierung in F #. Wenn wir Makros als Textvorlage definieren, die in den Code erweitert, dann gibt es zwei offensichtliche Ansätze:
-
T4-Vorlagen. Es ist die Umsetzung für F #: https://github.com/kerams/Templatus
-
Ich habe irgendwo Aufruf von F # von Strings in separate Baugruppe gesehen und dann der Baugruppe geladen werden.