Discourse told me 54 new posts! Wow. Well I guess that’s from chat style of conversation. Not criticizing, just surprised at big number. Feels like payback for “walls of text” write. So here’s another one.
C++ has the overriding issue of older code, C++11, C++14, C++17, and C++20. The better scripting language binding mechanisms, are requiring higher and higher versions, to achieve elegance and less maintenance work. For instance, sol2 3.0 uses C++17 features. There are 2 or 3 other possibly “good” C++ binding regimes available for Lua, I have not worked through their differences. But which version of C++, is clearly one of the tradeoffs. Meanwhile in Python land, pybind11 of course requires C++11. That’s pretty much bare minimum for “dragging people forwards”, going that route.
My research on EASTL vs. STL is that performance has to be checked. EASTL was for performance a long time ago. Various STL may be just fine now, particularly if dragging people forwards through C++## versions.
If dragging people through C+++## versions, then “niceness” arguments have to be checked too. You think EASTL is nice, what if we think STL in C++14 is nice? I don’t know or have an opinion on that at this time, but I do know, this is the question. Your EASTL may not be as future looking as you think.
The loops in your TetrahedralMesh code, look like the kinds of things I personally would want to do in something resembling ASM code. Because I actually think in ASM code, I have trouble committing to Python or Lua. I’m digging a bit through the Lua universe to understand how people try to use it for performance. It may not look like sanity from my ASM perspective. I don’t know if your container approach looks like sanity either. I understand “niceness” and “get it working” arguments, but it’s a C++ perspective and I don’t like C++. If I had a better language to offer you, I’d try to convince you to write stuff in that, and forget about this EASTL or STL container stuff.
I am going to look at what Jonathan Blow thinks of LLVM. I believe he is writing Jai on top of that. Using LLVM “as portable assembly” is something other people have done. However LLVM is a big heavy external dependency, a pile of code. Historically I did not want to get into it, because I cannot personally maintain LLVM or take it into the future. But if Blow actually ships Jai in the near future, then getting into LLVM makes more sense to me. I wouldn’t be “alone” in dealing with it for 3d graphics and game performance issues.
The Lua way of doing this is much more sane by comparison. You can wrap your head around the standard Lua implementation. It’s designed to be good at that. But if the standard Lua 5.4 doesn’t actually do what I want, well it’s a problem.
I suspect that LuaJIT probably does more like what I want, haven’t finished investigating. But it’s a development dead end. No leadership, headless. Clearly, they can’t stay abreast of official Lua, which harms the ecosystem.
PyPy does actually stay abreast of Python, it’s fine that way. But you have to deal with the GIL, which could be suicide for all this low level manipulation stuff. Having to even think about the GIL, definitely makes me itch. I really don’t want to itch.
I don’t think these people write their languages from a 3D programmer’s perspective. Someone who has to manipulate a lot of vector math in arrays.
I revisited Julia, but apparently their JIT is slow to get fired up. They don’t have any kind of Ahead Of Time compilation, and do not seem to be oriented towards applications development. Rather, scientific computation batch processing. Software amateurs fiddling around to get their numeric results. Nobody developing games touches it. Get the idea that devs might like their language to be more general purpose and not sitting in its niche, but they aren’t meaningfully executing on that. Wait more years, see if they moved forwards any, seems to me.
On the other hand, they had 2 C++ binding mechanisms available. I started to yawn. Might double check my work sometime.