Hello! I think we all agree that mark procedures suck in many ways, so that’s not the problem.
When I ported the old Guile to BDW-GC, I kept them mostly so existing code that uses SMOB can still work as expected. Of course, 90% of the time you could just remove them and things would work, but if you wanted to support both 1.8 and 2.0, you didn’t *have* to change the code. The GnuTLS Guile bindings support both 1.8 and 2.0; mark procedures are used unconditionally, and there haven’t been any issues with that on 2.0. AIUI LilyPond has more stringent expectations, and that strategy didn’t work out there because the new GC behavior is observable. I agree with you that we must keep recommending against using them, and that remaining uses should probably be questioned; I think we can’t “just” remove them though. What we need above all is to address LilyPond’s use case. I proposed a solution at <http://debbugs.gnu.org/cgi/bugreport.cgi?bug=19883#23> but never understood whether/why it was considered unfit. Ludo’.