Sure, but the templates thing was just one example. Point was more just that I generally find the C++ community can be a bit exclusionary at times. That's again not a dig at anyone, just my personal experiences and only online. In person everyone's lovely. But even Bjarne Stroustrup seemed to think it was a bit of a problem last I saw him. At least he showed a lot of concern for getting new people involved with an ever more complex language like C++ and making the environment nice for them to come into.
Swift is great. Presently my favourite language too. And yeah, F# is basically the .NET OCaml
Truth be told I don't like OCaml all that much. It's got a design that makes some things just super simple to do, but it also feels like it makes other things really hard to do. Last time I used it I made a compiler with it (compiled to LLVM so Chris Lattner really has been a hero for me, both Swift and LLVM
) it was pretty good for that cause it was fairly easy to do things in a pretty functional manner and really utilise pattern matching heavily. The project I am working on now with OCaml is something completely different though; Distributed systems code. So far I miss C which isn't a great sign, haha. But the university would like it done in OCaml because the goal is to do formal verification on implementations of advanced distributed systems algorithms and we have a lot of tooling in OCaml - whole thing partially funded by Amazon. So yeah that's the fun I get up to haha; But no Swift is great and while I haven't experimented much with it yet the new structured concurrency model looks pretty solid. Hopefully it lives up to the name and does for concurrency what structured programming did to programming in general.
I'd argue that in a great deal of cases you can even do all this in a portable way, making the amount of developers who "need" to worry about this an even smaller subset of the already small subset who do write code to such a performance standard that 10% slower == not working at all.
Though I mean I guess it depends what we mean when we say caring about the hardware it runs on. I've never written code for HFT or anything similar to that - but I have code where I consider the platform it's likely to run on. It *will* run on any chip but it's tuned for some assumptions - Well, I say "any chip" - come to think of it; If you send data over a socket on a big endian chip and read it on a little endian chip do you need to swap the ordering yourself or does the socket layer enforce the ordering? Cause if you need to worry about that, then some of my stuff only works when machines have the same endianness, haha. But ARM and x86 are both little endian anyway. Think the only code I've ever written that's x86 specific is the OS I made for my bachelor project, and the final part of the compiler I made - And the final part wasn't really necessary. We already had LLVM-IR so we could just pass that to LLVM and we'd be done. We only made a backend as a learning exercise.
Some Metal code I've written will work optimally if you can assume a minimum threadGroupSize being supported by the GPU hardware. Similarly you may utilise AVX and have no NEON/SVE alternative because you mainly target x86 chips with the relevant extensions - but whatever the case; For the consumer devices Apple is making, the most important factor is "will it run" so I don't see any of these considerations to be a hurdle for developer adoption of the Apple Silicon platform