2012-11-05 9 views
19

Czy makra racketowe mają bardziej zaawansowane funkcje niż te znalezione na Scheme lub Common Lisp? Podejrzewam, że tak, szczególnie jeśli chodzi o moduły, przestrzenie nazw i zakresy, itp., Ale doceniłbym prosty przegląd makr Racketa, jeśli w ogóle, nie mogą tego zrobić inni seplenienie.Racket vs Scheme macros

Dodatkowo, Scheme/CL również ujawnia warstwę czytnika deweloperowi i używając tego, czy w tych sepsach nie jest możliwe tworzenie zupełnie nowych języków (nie tylko makr s-expr), takich jak Scribble, sposób w jaki może w rakiecie?

Innymi słowy, czy rakieta jest po prostu filozofią/konwencją związaną z "programowaniem zorientowanym na język" z wygodnymi opakowaniami syntaktycznymi w tym celu, czy też bardziej zasadniczo rozszerza Schemat, aby robić rzeczy technicznie niemożliwe w tym języku?

Wielkie dzięki.

Odpowiedz

14

dwie kluczowe cechy, które sprawiają, że "język programowania zorientowanych" praca w Racket to:

  • system Moduł pozwala specyfikację języka bazowego
  • kontekstowego - wrażliwe makra

Pierwszy pocisk to w zasadzie to, co robi #lang. Posiadanie systemu modułowego odpowiada za konfigurację czytnika, a powiązania dostępne w danym module pozwalają na łatwe korzystanie z różnych języków. Bez tego byłoby trudniej pracować z takimi językami jak Scribble lub at-exp.

Drugim jest to, że rakieta zapewnia na sterowanie ręczne makr kontekstowych, takich jak #%app, #%module-begin, i tak dalej, które umożliwiają dostosowywanie, powiedzmy, każdy aplikacji Funkcja w ramach modułu lub całego modułu. Pozwala to na dodanie, na przykład, przepustki do sprawdzania typu na całym module.

To nie jest wyczerpująca lista funkcji, które pomagają budować języki w grze rakietowej. Jeśli chcesz przeczytać więcej na ten temat, warto przeczytać artykuł "Languages as Libraries".

5

Zobacz także Matthew's reply dla tego samego pytania po @Scott opublikował go na liście, z bardziej aktualnym papieru przeglądu.