XS has a reputation of being ugly and cumbersome, but in my experience, it doesn't have to be. Let's take for example this snippet from my Thread::Csp::Promise class: MODULE = Thread::Csp PACKAGE = Thread::Csp::Promise PREFIX = promise_ SV* promise_get(Promise* promise)...