Since MS appears to have killed Managed JavaScript in the latest DLR for both server-side (ASP.NET Futures) and client-side (Silverlight), has anyone successfully used non-obsolete APIs to allow scripting of their application objects with JScript.NET and/or can explain how to do so? A Mono/JScript solution might also be acceptable, if it is stable and meets the requriements below.
We are interested in upgrading off of a script host which uses the Microsoft JScript engine and ActiveScript APIs to something with more performance and easier extensibility. We have over 16,000 server-side scripts weighing in at over 42MB of source, so rewriting into another scripting language is out of the question.
Our specific requirements are:
- Noteably better performance than the Microsoft JScript (ActiveScript) engine
- Better runtime performance and/or
- Retention of pre-parsed or compiled scripts (don't reparse on every run)
- Lower or equal memory consumption
- Full ECMA-262 ECMAScript compatibility
- a little porting can be tolerated
- Injection of custom objects into the script namespace
- .NET objects (not a hard requirement)
- COM objects or COM objects wrapped in .NET
- Instantiation of COM objects from Script
- à la "new ActiveXObject(progid)"
- Low priority given the preceeding
- Include files
- Pre-loading of "helper scripts" into a script execution context
- An "include" function or statement (easy to create, given the above)
- Support for code at global-scope
- Execution of code the global scope
- Retention of values initialized at global scope
- Extraction of values from the global scope
- Injection and replacement of values at the global scope
- Calling of script-defined functions
- with parameters
- and with access to the previously initialized global scope
- Source-level debugging
- Commercial or Open Source Support
- Non-obsolete APIs
I have used CSScript.net as it will allow you to run C# as a scripting platform. From the site:
CS Script satisfies all the conditions that you laid out. I have used it in production as a substitute for Boo it has performed really well. You can see it in action here.
The Jurrassic-Engine is alive and kicking.
From their codeplex site:
Sooner or later, I imagine someone will write a DLR Javascript. I know that's not very convenient for you right now, but maybe you could start the project. I suspect it would have a better cost/benefit analysis to using JScript.NET.
The use of Com interop means you are limited to an MS solution Java and Opensource want as little as possible to do with it.
I dont see any solution that supports all your requirements either you ditch all the COM/.NET stuff and go Java (Rhino) /Linux/Open source or you question the use of Javascript as your server language even in the Linux world we use PHP/Python/Ruby more on the server if we cant run Java. Your not going to see big performance gains with Java script as the language is the main barrier.
I wouldnt count on people writing a new DLR as server Java script is dying fast.
Considering you want performance ,what about F# , Microsoft will keep the Jscript engine supported for at least 5 years giving you time to create new stuff in F# while you slowly migrate the code.
If moving away from .NET and Microsoft is ok for you then you should try Mozilla's Rhino. It is an open-source implementation of JavaScript written entirely in Java. Alot of modern server side js libraries target this platform.
I answered a similar question here. Have a look at IronJS, an implementation of JavaScript in F# running on the DLR.