On Friday, 23 May 2025 at 12:06:00 UTC, realhet wrote:
- export: It was possible to export data (20MByte) from the compiler in seconds, using pragma(msg, ...) Just don't touch the large data with CTFE.

pragma(msg) is meant to print informative human-readable strings for debugging purposes. It's not designed for large data or consistent results. A pull request to the compiler improving the formatting of a pragma(msg) might break your setup.

Please carefully consider whether a convoluted build system is worth it. I've done some cute GLSL+D metaprogramming as well in the past with the goal to automatically bind uniforms and vertex attributes between the two languages seamlessly, but I'm not using it anymore because the impedance mismatch is too high.

I'm talking: Different alignments (std140 and std430), booleans are 4 bytes, normalized and packed integers need special types on the D side, vec3 and float[3] both exist in OpenGL, there's 36 sampler types, OpenGL's reflection API has holes (you can't query the pixelformat from `layout(binding=2, rg32f)`), column/row major matrix layout etc.

This results in a complex system that's more annoying to deal with than the original problem of just maintaining a .d file and shader file in parallel, which is what I'm doing now for the time being.



... but if that didn't scare you off, you can use `__ctfeWrite` 😉

```D
string f(string s) { __ctfeWrite(s); return s; };
enum x = f("Hello world\n"); // prints "Hello World\n" to stderr
```

I recommend keeping it simple, cover common cases and don't try to make it perfect, because it won't be. But if you do somehow make it perfect, post your results, I'd love to see it!

Reply via email to