Currently I'm involved in a project to create a DSL (domain specific language) for one of our internal processes that could be updated in realtime. Our original idea was to use Boo for that, as it is a well-supported .NET language, but because it has to be compiled into an assembly that made updating code in realtime difficult. This is because creating assemblies will leak memory unless you create them in a separate appdomain, but hosting them in another appdomain can lead to a whole other set of complications regarding integration.
- Referencing enums using the full classname is unreliable, I instead just expose each enum value as a parameter to the engine using a loop.
- You can't create an Array easily, because Jint doesn't interpret the square brackets in the "new" call.
- For some reason, calling .Run(script) vs CallFunction(script) results in different error handling. When using .Run, you can get a somewhat useful stack trace, while CallFunction results in nothing at all when your code fails. Haven't had a chance to see why, but you can easily call a function using .Run by just putting a function call as your entire script.
It's also not particularly well-documented, but the authors do seem to respond to comments in a timely manner. The performance is surprisingly good for an interpreter, in my opinion, so I'll be using it for sure. If you have a DSL to implement that doesn't require updating the code without restarting then I'd probably stick to something like Boo, since compiled .NET code is much nicer to work with.