Well we're going to have to eventually move forward. We can't stay stuck on C++ forever and ever.
We won't. The successor to C++ is called C++0x and the standard is currently in development with the C++ standards committee. It'll probably be a few years until it'll show up in real life, given that compiler vendors also have to update their compilers, unless they're working in parallel with the committee refining the draft standard. Until then libraries like Boost give C++ plenty of staying power. Infact: Ogre uses parts of Boost as well, though it offers a compiler switch to drop back to its own constructs if you don't want to download and install Boost to compile Ogre.
You're right about Monster being a new language, and definitely right about the documentation. The language is at a more stable point than the web pages betray though, and it's already used in several places in OpenMW to great effect. I decided to temporarily pause the general development of the language when all the key features were in place (OO/polymorphism, packages, virtual threads, states) and instead concentrate on OpenMW and let the language development be guided by that for a while.
Also, classes have existed since Monster's inception, but some aspects of polymorphism are new. Enums are new, mostly because I didn't even know if I wanted them at all (Lua doesn't have enums, for example.) I'm not saying this to score "easy points" on you or anything (I know you haven't looked at the details yet), just thought I'd clear it up.
That's part of the problem: you're iteratively adding to the language. I don't mean to step on anyone's toes with this, but I'll warn you now: that will eventually lead to a language design problem you missed. PHP and its many quirks and idiosyncrasies are often cited as the canonical example for why iterative language design doesn't work. If you think you can keep it under control and manage to keep things working, and working
well (especially an efficient script compiler or runtime), more power to you though.
I did consider Lua when I first started, and found it underpowered for what I had in mind with OpenMW. Not that it's not a great language, it is, especially for small stand-alone scripts. But it's just not designed for the kind of object oriented system building that I want to do. Squirrel or GameMonkey (other game languages) are much closer to this than Lua (and Javascript), but they still lack several essential features besides being somewhat clunky.
Imho what you really need is a well established, well known, easily accessible language that is centered around mutating (nodes in) your scene tree. Because that's what your entire game world is: a tree of nodes. Hence why I cited the example of jQuery which does this really, really well with the html DOM tree by making effective use of javascript's closures and first class functions.
The D compiler is way past the alpha stages, DMD 1.0 was released over two years ago and I've been using the language closer to six years myself.
My source was outdated: D is indeed stable now.
I absolutely agree with you about outside contributions though, that's the biggest drawback of not using C++. Probably the biggest problem is that it scares some people away from even looking. My experience so far however is that people who actually want to contribute just do it anyway. Either with C++ code (which is fine) or by modifying the D code (the languages are pretty similar.)
From D's FAQ itself I gather that it is
not compatible with C++ proper. C++ can be
massaged to work with it: D only works with functions or classes in the root namespace (aka 'no namespace at all'). It can only work with single inheritance due to the layout of the virtual function table. It can't access classes by value (which is how you are supposed to work with C++ if you use RAII). And there are oversimplified, optimistic assumptions about the non-standard C++ name mangling. That all leaves you with one reliable option: make simplified gateway interfaces in a format compatible with flat C to bridge C++ with D. In the process you lose all OO-aspects and everything goes down to flat functions and structs.
That is a major,
major detracting point when you consider all the pre-made facilities in Ogre for timers, event callbacks, resource management systems, etc. You simply can't leverage those effectively anymore, unless you perform everything through pre-built flat functions and only share 'handles' to those objects with D. Infact: that's probably what you should end up doing. I suggest you take a look at how Quake 3 handled its VM trap calls, which is a similar system and from personal experience works quite well. (It's GPL, incase you didn't know.)
Imho if you want an 'easy' language that can bind to C++ and retain more of the OO goodness, you should use C#. A glue layer made from managed C++ can interface to native C++ libraries like Ogre. Actually such a library already exists: OgreDotNet. Anything D does, C# probably can do as well. Performance wise it also isn't that bad considering MSIL bytecode is compiled down to native code by the runtime before it is executed.
Personally, I would've used C# for my own Ogre related project if I hadn't decided to invest time in learning about the C++ STL classes and common C++ design patterns (such as the factory pattern on which Ogre relies, which helps ensuring proper resource de-allocation, meaning you don't need a garbage collector). I'm much too happy working directly with C++ and Ogre's facilities to start contributing actual 'massaged' C++ code or D code. If you need some insights into architecture I can always give a few pointers though.
Well, best of luck to you, I guess.