Saturday, June 26, 2010

Proposal for Macros

Great to be talking to myself again. A small proposal to get my metaprogramming/template thingy working.

I am not going C-style templates, neither am I going the Haskell way, rather, I guess I am going enhanced LaTeX, i.e., I am going to work on the syntactic level with a C-preprocessor like syntax.

I.e., the only thing I am adding is a #define primitive, but with a twist. A define macro defines one in a series of rewrite rules, define macros pattern match on the output of the tokenizer. Also, a #definition macro expands a defining construct in scope to its series of tokens. And I guess #if, a rule is defined, #ifndef, if no rule is defined, #else, yeah, what else, #undef, remove all rules, are also trivial extensions.

Example:

#define add_guard('[', v, '->')  '[' v ': if' v '> 10'


#define fac('1') '1'
#define fac(n)   '(' n '* (fac (' n '- 1)))' 

Not too sure, it might be too verbose in its usage, but it is simple, and Turing complete anyway.

Yeah, sure of it. Convenient well-know syntax, easy semantics, and just as type-safe as the Haskell proposal since the result is type-checked anyway. (Ok, the last is almost true ;) )

The sun shines, the sky is blue, I didn't sleep, again?

No comments:

Post a Comment