2012-11-05 18 views
19

Haben Racket-Makros erweiterte Funktionen als die in Scheme oder Common Lisp? Ich vermute das, insbesondere in Bezug auf Module, Namespaces und Scoping, etc., aber ich würde mich über einen einfachen Überblick darüber freuen, was Racket-Makros tun können, wenn überhaupt, was andere Laps nicht können.Racket vs Scheme-Makros

Zusätzlich stellt Scheme/CL dem Entwickler die Leserschicht zur Verfügung, und damit ist es nicht möglich, in diesen Lasern völlig neue Sprachen zu erstellen (nicht nur s-Ausdrucksmakros), wie Scribble, so wie Sie Kann im Racket?

Mit anderen Worten, ist Racket einfach eine Philosophie/Konvention rund um "sprachorientierte Programmierung" mit geeigneten syntaktischen Wrapper zu diesem Zweck, oder erweitert es Scheme grundlegend, Dinge technisch unmöglich in dieser Sprache zu tun?

Vielen Dank.

Antwort

14

Zwei wichtige Merkmale, die "sprachorientierte Programmierung" work in Racket sind machen:

  • das Modulsystem ermöglicht die Angabe einer Basissprache
  • Kontext -empfindliche Makros

Die erste Kugel ist im Grunde, was tut. Wenn das Modulsystem für die Einrichtung des Lesers und die in einem bestimmten Modul verfügbaren Bindungen zuständig ist, können verschiedene Sprachen einfach verwendet werden. Ohne dies wäre es mühsamer, mit Sprachen wie Scribble oder at-exp zu arbeiten.

Der zweite ist, dass Racket überschreibbar kontextsensitive Makros wie #%app, #%module-begin, und so weiter, zur Verfügung stellt ermöglichen die Anpassung von, sagen wir, jede Funktionsanwendung innerhalb eines Moduls oder des gesamten Moduls. Dies ermöglicht beispielsweise das Hinzufügen eines Typprüfpasses über das gesamte Modul.

Dies ist keine erschöpfende Liste von Funktionen, die beim Erstellen von Sprachen in Racket helfen. Wenn Sie mehr darüber lesen möchten, ist das "Languages as Libraries" Papier lesenswert.

5

Siehe auch Matthew's reply für die gleiche Frage, nachdem @Scott es auf der Liste veröffentlicht hat, mit einem neueren Übersichtspapier.