I've checked in the first part of the extension code for Parrot. It lives in extend.c, is (not yet) documeted in docs/extend.pod with inline docs in the code.
Current scheme: Extenders include parrot/extend.h *only*. Extenders use the routines in extend.c *only* and, if I've done my work right, things should Just Work Right. Datatypes are opaque to extenders, but the native types to the code in extend.c. I'm tempted to do some sort of Funky Linker tricks, so the extension code links against libparrotextend.so only, which only exports its documented interface, and that lib links against libparrot in all its glory. (And yes, I really am on a "Comaptibility at almost all costs" kick for this stuff) The interface isn't done, by any means, but it's enough to at least get Arthur started for Ponie, I hope. Dan