Here’s a compilation of links so far and some tips from the thread
Just for the record, I love Lua and have already embedded it in game engines about 5 times at work.
Also for the record I’ll go with V8 on this one, mostly because I like it’s C++ style.
Mozilla’s SpiderMonkey is fairly easy and well-documented. It’s a C API, but it’s straightforward to wrap it in C++. It can be compiled to be thread-safe, which is useful for games since you’d likely want to have your main logic in one thread and user interface logic in a second thread.
Google’s V8 might be a good choice, since you’re using C++, but I have no experience with it yet. According to the documentation (thanks to Daniel James), V8 is not thread-safe, although this may change in the future.
There’s also WebKit’s SquirrelFish, but I couldn’t find a standalone version of that when I was looking earlier.
I’ve tried both SpiderMonkey and V8. With SpiderMonkey, I couldn’t get anything to work. I couldn’t even get the examples on mozilla.org to compile.
Is Java Script really the right language for your game?
Many of games out there are using the Lua programming language for scripting. It’s easy to integrate, it’s very small, it compiles on almost every platform and it’s easy to learn.
This somewhat off topic, but thinking outside the box can be important to get things right .
I believe that v8 only works on x86, x64 and arm processors at the moment. Which might be a disadvantage.
With regards to thread safety, from include/v8.h:
* Multiple threads in V8 are allowed, but only one thread at a time * is allowed to use V8. The definition of 'using V8' includes * accessing handles or holding onto object pointers obtained from V8 * handles. It is up to the user of V8 to ensure (perhaps with * locking) that this constraint is not violated.
You can read more in the source file (it looks like doxygen documentation, but they don’t seem to have put it up anywhere).
Update: That comment has been removed, probably some time ago. It looks like v8 now has an
Isolate object which represents an instance of the engine. A single
Isolate instance can only be used in a single thread at a time, but other
Isolate instances can be used in other threads at the same time.
The benchmark that came out when V8 first hit the scene that showed V8 being 1000% (or whatever) faster than other engines was heavily weighted towards favoring engines that were good at recursion. If your code uses a lot of recursion, then V8 might give you a significant advantage, speed-wise. For “real world” (currently, at least) web stuff, SquirrelFish Extreme seems to be the hands down winner at the moment (see my blog post on the topic for the results of my own, informal testing).
As others have pointed out, ease of integration and quality of documentation might prevail over pure speed. It don’t mean jack if you don’t ship!
Seller from the webpage:
… ChaiScript, on the other hand, was designed from the ground up
with integration with C++ in mind.
ChaiScript has no meta-compiler, no library dependencies, no build
system requirements and no legacy baggage of any kind. At can work
seamlessly with any C++ functions you expose to it. It does not have
to be told explicitly about any type, it is function centric.
With ChaiScript you can literally begin scripting your application by
adding three lines of code to your program and not modifying your
build steps at all.
I’d wait for TraceMonkey, the next evolution of SpiderMonkey to come out. Faster and better designed. ( Uses code donated from Adobe Flash ).
Tracemonkey prides itself in making repetitious actions much faster by aggressively optimizing the structure at runtime based on actual usage, which aught to be handy for game-augmentation.
You may also want to look at V8 from Google. It’s pretty new, though.