Microsoft может (на самом деле, я думаю, это будет) в будущей версии IE10 Chakra (JScript engine) как автономный модуль, такой как Google V8 JavaScript Engine.
- Вопрос: будет ли доступным движок с С#, например, IronPython?
Microsoft может (на самом деле, я думаю, это будет) в будущей версии IE10 Chakra (JScript engine) как автономный модуль, такой как Google V8 JavaScript Engine.
С# и IronPython - это языки .NET. Они имеют одинаковое время выполнения, поэтому они могут легко взаимодействовать. Нечего предположить, что Chakra построен на .NET; скорее, учитывая, что он компилирует JavaScript для машинного кода ради производительности, я бы сказал, что он не будет интегрироваться таким же образом.
Они могут предоставить .NET API, который позволит передавать JS с языка .NET на механизм JavaScript, но это только догадывается с моей стороны.
Механизм Chakra для Javascript доступен для программ С# через интерфейс IActiveScript. Это не то же самое, что и модель IronPython - JS, вызванный таким образом через Chakra, не компилируется в MSIL, не является логикой .NET. Он не запускается на CLR/DLR. Он работает в своем собственном движке.
// Initialize Chakra (requires IE9 to be installed)
var guid = new System.Guid("{16d51579-a30b-4c8b-a276-0ff4dc41e755}");
Type t = Type.GetTypeFromCLSID(guid, true);
// you must have a p/invoke defn for IActiveScript
var engine = Activator.CreateInstance(t) as IActiveScript;
var site = new ScriptSite(); // this is a custom class
engine.SetScriptSite(site);
var parse32 = engine as IActiveScriptParse32;
parse32.InitNew();
// parse a script
engine.SetScriptState(ScriptState.Connected);
parse32.ParseScriptText(scriptText, null, null, null, IntPtr.Zero, 0, flags, out result, out exceptionInfo);
IntPtr comObject;
engine.GetScriptDispatch(null, out comObject);
// iDispatch is a COM IDispatch that you can use to invoke script functions.
var iDispatch = Marshal.GetObjectForIUnknown(comObject);
iDispatch.GetType().InvokeMember(methodName, BindingFlags.InvokeMethod, null, iDispatch, arguments);
Здесь выполняется тестовое приложение winforms, написанное на С#, которое запускает Chakra через этот интерфейс:
Вы можете скачать здесь. (найдите файл ScriptHost.zip)
Дополнительная информация:
Что такое ProgId или CLSID для Javascript-движка IE9 (под кодовым названием Chakra ")
Среда выполнения Chakra теперь доступна для прямого вызова с С# через pinvoke. Вам не нужно проходить активный script. Апи неплохо и очень быстро. Вот пример того, как это сделать в MSDN:
http://code.msdn.microsoft.com/windowsdesktop/JavaScript-Runtime-Hosting-d3a13880
JavaScript (как JScript) является одним из исходных языков, поддерживаемых .Net. Поддержка была создана до того, как была доступна динамика, поэтому в этом смысле она отличается от IronPython... Если вам нужен движок JavaScript в .NET, этого может быть достаточно для ваших нужд - http://msdn.microsoft.com/en-us/library/72bd815a(v=VS.100).aspx.
Ознакомьтесь с тем, что Microsoft только что выпустила по этой теме:
Внутри ответа блога вы можете найти последний комментарий от Microsoft. Ответ: Re: Windows scripting - хост Windows Scripting поддерживает JavaScript, но не основан на движке Chakra. На данный момент этот проект не намерен менять то же самое.