I'm not convinced that "choosing one basically locks you out of the other ecosystem" in general.
- It does seem that you need to choose between big-bang or GUI/classes + message passing (or easy-gui), but that doesn't mean you can't also use functional structs. I'm doing this in a project now which uses easy-gui and observables for the GUI and functional (immutable) structs for the underlying data representation.
- image and pict are (in some ways) compatible. I can't remember how I found this out, and I couldn't find the doc section I'm thinking of quickly, but in the same project I use procedures from both in a series of
pict?
s. I have a feeling draw is compatible, too—again, it seems to be a matter of piecing together how and where via the docs. - RE: 3 macro systems, I'm pretty sure syntax-rules/syntax-case are (or could be) built on top of procedural macros, and that syntax-parse is (or could be) built on top of either. And, frankly, there's nothing incompatible about them: a macro written with syntax-rules should work fine with a macro written with syntax-parse. The choice is about convenience for the implementor, I think.
Summary: the pieces tend to fit together pretty well, being somewhat orthogonal.
What I do miss is seeing how some pieces fit together. As mentioned, drawing all the correct connections between the image libraries is difficult; one needs to read carefully to see where the connections exist, and study the "types" to see what can cross which boundaries. The GUI system is so large that I struggle with this there as well, in spite of the many diagrams and such. 3rd-party libraries do differing jobs of explaining how they fit into the existing ecosystem, but the hyperlinks on the "types" help. Fear of Macros is wonderful precisely because it extracts and explicates the connections.