How are hygienic macro systems implemented?
system | syntax-rules | syntax-case | er | sc | how | where |
---|---|---|---|---|---|---|
Chez | Y | Y | syntax-case | |||
Chibi | Y | Y | Y | ER over SC | lib/init7.scm | |
Chicken | Y | N | Y | ER | synrules.scm expand.scm | |
Gauche | Y | N ! | Y | syntax-rules written in C | src/macro.c | |
Guile | Y | Y | N | syntax-case | module/ice-9/safe-r5rs.scm module/ice-9/psyntax.scm | |
Kawa | Y | Y | syntax-rules written in Java | kawa/lang/Syntax{Pattern,Rule,Rules}.java kawa/standard/syntax_case.java kawa/lang/SyntaxForms.java | ||
LIPS | Y | N | N | N | syntax-rules written in Javascript | lips.js |
Loko | Y | Y | syntax-case | psyntax | ||
MIT | Y | N | Y | Y | ER | src/runtime/syntax-rules.scm |
Peroxide | Y | N ! | Y | Y | ER over SC | src/primitives/syntactic_closure.rs src/scheme-lib/init.scm |
Sagittarius | Y | Y | Y | syntax-case; ER separate | boot/lib/macro.scm | |
STklos | Y | N | N | N | define-macro (no lexical scope) | lib/mbe.stk |
Unsyntax | Y | Y | syntax-case | src/unsyntax/expander/syntax-case.scm src/unsyntax/syntax.scm | ||
Ypsilon | Y | Y | N | N | syntax-rules in Scheme; portable syntax-case | heap/boot/macro/expand.scm , stdlib/core/syntax-case.scm |
!
= at least seems to be planned