I have built up a good toolchain for C programming including static analysis 
and runtime testing tools, but I find the C preprocessor is really lacking for 
metaprogramming facilities.

Here is an implementation of "Lisp" macros for C: 
https://github.com/eudoxia0/cmacro

It doesn't seem to be actively maintained and a bit buggy (weird formatting 
errors), and, well, it's Common Lisp :\

I made a start on converting the above into Racket:

https://github.com/spearman/rcmacro

At this point it is little more than a main module with command-line options 
and stubs for the rest of the implementation.

Two sticking points so far are error handling and finding a replacement for the 
"packrat parser" (esrap) that cmacro relies on, as highlighted here: 
https://github.com/eudoxia0/cmacro/blob/master/src/parser.lisp#L290

If there is something available for Racket along the same lines as esrap, which 
uses TDPL grammar, I may be able to move forward with adapting this code, 
otherwise it might be a lost cause and better off just coming up with something 
from scratch (and I might learn something in the process). However it seems 
like a large task and I would be essentially starting from first principles.

Before I make a choice on whether to proceed, I wanted check first if there are 
already any Racket-based (or Scheme-based!) implementations of macros for C.
There is this Racket implementation for C++:

https://github.com/elfprince13/RacketMacros4Cxx

but it requires a custom llvm/clang build, and the "demos" don't look very much 
like what I had in mind.

Mostly what I am looking for is a Scheme-like "macro-by-example" syntax to 
provide some level of syntactic information (and hopefully hygiene) above what 
the C preprocessor gives, but not necessarily full-blown "cooperating" (MTWT) 
Racket macros.

Comments/suggestions are appreciated.

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to