Template Macros are a new Racket library that dramatically simplifies the
generation of meta-program code.
Template macros infiltrate the spaces underserved by Racket’s existing
pattern-based and procedural macros, such as the insides of literal data,
or in the various quoted forms;
|
#<syntax:eval:73:16 (0 1 2 3 4 5 6 7 8 9)> |
and when one template macro is used by another, the results are spliced in
place automatically.
Template macros eliminate common technical barriers to advanced Racket
meta-programming techniques by preempting the default macro expander. The
current API offers a lot more than I could jam into a release announcement,
and it’s still evolving!
In the coming weeks and months, I’ll try to post some topic-focused tutorials
that highlight the wealth of functionality template macros provide to the
practicing language-oriented Racket programmer.
But the next time you trip on a missing syntax-local-introduce,
or find yourself facing a wall of format-ids,
|
> id5 |
'((vector 1 0 0 0 0) |
(vector 0 1 0 0 0) |
(vector 0 0 1 0 0) |
(vector 0 0 0 1 0) |
(vector 0 0 0 0 1)) | |
or struggle to interleave a medley of
functions with “syntax” in their names,
|
> (hyphen-define* (foo bar baz) (v) (* 2 v)) |
> (foo-bar-baz 50) |
100 |
give template macros a try and let me know how it goes!