I'm going to start writing a 3D game in unmanaged C++ using the DirectX SDK. It's going to involve a lot of physics and math, though I can't predictably say how complex it's going to be (I don't know if I'll be parallelizing it, for example). I was thinking, due to F#'s incredibly awesome units of measure feature, and the fact that it's functional and therefore parallelizes nicely, that I could write an F# library for doing the math-intensive computations of the game. But:
- I'm inexperienced in C++, nevermind interfacing it with managed code. I don't know how backbreaking this would be.
- I don't know how big a slowdown jumping in and out of a managed DLL would be for every math-intensive computation (at least one physics equation would have to be run per game iteration).
- I'm not sure if the gain of units of measure and easy parallelization is worth it. I mean, if it's just math, it's gotta be easy to thread in C++ anyhow (there's not really any side effects, and if I recall there's a
pure
keyword in C++ maybe that disallows side effects or something?) -- and I suppose I could do without units of measure if I'm really careful (I know I'll only be using metric units).
So is it worth it? Is mixing managed and unmanaged code a common-ish practice? What about for games? Would it be a bottleneck? Would it make my draw code horrifying and convoluted? If you opened a VC++ project and saw this happening--what would your face look like (:)
:(
D:
, etc)