Существуют ли какие-либо реализации .NET CLR / DLR в ECMAScript?

Кто-нибудь знает оreal (я ... без всякой поддержки) реализации ECMAScript для.NET CLR/DLR? В идеале что-то вродеwhat Rhino is for Java, Твердый порт Rhino, работающий на .NET Framework / Mono Framework, был бы идеальным.

Я видел только несколько упомянутых проектов, но никогда не видел ни одного из обнаруженных или в действительности чего-либо, на чем мне когда-либо удавалось запустить сценарий. Вот что я уже знаю:

MSScriptControl ActiveX Control: AFAIK, this was Microsoft's last real ECMAScript-compliant implementaiton (runs JScript 5.7). I've integrated with MSScriptControl but don't consider COM interop to be an answer to this question. x64 is a killer for this option.

JScript.NET: I don't count JScript.NET as it could never successfully parse any of my real scripts. It seems to have trouble with closures.

Managed JScript: Sounds like what I want but it appears to be dead in the water. It was a major example implementation for the DLR but then got entangled with SilverLight and seems to have faded as a priority since 2007. Creditable sources on the status of this would be helpful.

MyJScript: Built as a tutorial implementation for the DLR. Anyone know how complete of an implementation this is?

Jint: JavaScript interpreter for .NET. Doesn't as of yet support Currying or try-catch-finally.

RemObjects Script for .NET: An interesting contender still in the works. I'm confused by their marketing as to what it will actually be, but it sounds like it might eventually be a fit. If anyone knows more about it that would be helpful as well.

V8 for .NET: This would be great if someone ported V8 to .NET. As far as I know there isn't a large effort around this either. The link is to an idea for calling into it from a managed C++ wrapper.

Для фона я хочу иметь возможность выполнять JavaScript изнутри .NET; то есть загрузить набор сценариев в контекст и вызвать в этом контексте и получить результаты выполнения. В настоящее время я прыгаю через обручи, чтобы использовать MSScriptControl через громоздкие COM-взаимодействия. Несоответствие COM делает его действительно сложным для развертывания и обеспечения согласованного выполнения.

Мне бы хотелось иметь возможность выполнять достаточно сложные тестовые сценарии JavaScript из .NET. Это не для создания пользовательских макросов или простых крошечных скриптов; Мне нужна настоящая JavaScript-среда, такая как Rhino. Если бы реализация работала поверх CLR (а не COM), это действительно помогло бы решить некоторые из текущих проблем.

 Stobor02 июл. 2009 г., 09:16
Можете ли вы запустить Rhino через IKVM? Ikvm.net
 Jared Updike03 июл. 2009 г., 02:29
Или носорог над VMKit (llvm.org).
 Ionuț G. Stan02 июл. 2009 г., 11:35
JavaScript через Mozilla Rhino, через IKVM.NET через .NET. Что за бутерброд
 Sébastien Ros - MSFT26 окт. 2009 г., 14:56
Jint теперь обрабатывает карри и исключения
 ChaosPandion25 авг. 2010 г., 04:50
Моя бутлегерная реализация в разработке ...

Ответы на вопрос(9)

Решение Вопроса

EcmaScript.NET внутри моего YUICompressor.NET порт (проект).

Если ты схватил исходный код отсюда, Я включил мой измененный код в проект, на который вы можете ссылаться. Это единственный источник кода, который я нашел в .NET, который может обрабатывать javascript на стороне сервера.

К сожалению, я не могу вспомнить, как я наконец нашел это. Должен признать, это был сложный процесс. Я думаю, что где-то нашел ссылки на страницы разработчиков Mozilla о Rhino (код Java), которые привели меня к тому, что я понял, что такое C # .NET.

Мне пришлось немного изменить его, чтобы синхронизировать с некоторыми изменениями, которые ребята из YUI Compressor внесли в свою ветвь кода. Таким образом, измененная ветвь, которая у меня есть, может быть не самой лучшей ... но она ближе всего к исходной ветке Jav

Оригинальный код C # для EcmaScript.NET не затрагивался с 2007 года ... по крайней мере, для страницы загрузок.

Может это поможет ??

НТН.

 mckamey03 июл. 2009 г., 02:46
Отлично, я ценю детали. Если он может обрабатывать скрипты для YUI Compressor, звучит так, как будто этого должно быть достаточно и для моих вещей. Если вы не хотите поддерживать это в качестве своей основной цели, может быть проще получить помощь других в качестве своего собственного проекта. Я был бы более чем рад внести любые исправления / улучшения, которые я сделал. Благодарность
 Pure.Krome03 июл. 2009 г., 03:03
Я, конечно, не хочу вступать во владение модифицированной версией, поэтому я рад, что она была перенесена в codeplex, в отдельный проект ... при условии, что у меня есть кодовая база ... э ... приемлемо :) (я также предпочитаю кодекс по сравнению с гугл-кодом: P)
 mckamey06 июл. 2009 г., 17:40
Похоже, что в EcmaScript.NET в Google Code (code.google.com/p/ecmascript-net/) были исправлены некоторые ошибки, перенесенные в июне 2008 года. Возможно, стоит посмотреть, будут ли ваши изменения приняты владельцем.
 mckamey07 июл. 2009 г., 17:42
Не умер, но активно не поддерживается. Владелец говорит, что он открыт для исправлений, возможно, потребуется помощь в портировании исправлений ошибок Rhino. Было бы замечательно, если бы он открыл его шире, и ваши исправления могли сделать это в его репозитории, чтобы был единый источник. Тогда ваши репозитории могут быть сосредоточены на YUI Compressor, а другие (я бы хотел) могли бы поддержать ECMAScript.NET.
 Pure.Krome07 июл. 2009 г., 02:20
Это тоже мертвый проект? Кроме того, вчера я выпустил новую версию YUICompressor.NET:)

http: //jint.codeplex.co) который является интерпретатором ECMAScript с открытым исходным кодом.

Обновит

Недавно переписанная версия доступна на Github наhttps: //github.com/sebastienros/jin

 Donny V.29 мая 2013 г., 02:10
Это работает на Mono?
 Chris Pietschmann13 июл. 2010 г., 03:08
Еще не пробовал, но джинт выглядит действительно многообещающе!
 Behnam Esmaili06 окт. 2014 г., 15:59
Спасибо за предложение @ Sebastien.i хочу создать модуль сценариев, например Orchard.Scripting.Dlr для Javascript, это библиотека, которую я должен использовать, или есть что-то, что называется более дружественным к DLR?
 Sébastien Ros - MSFT06 окт. 2014 г., 21:44
Это библиотека для использования, исправьте, но она устарела в пользу новой на github: Github.com / sebastienros / JINT

Jurassic (За последний год совершил коммит.) JINT (в настоящее время принимает запросы на включение.)

Другие проекты, в основном мертвые:

IronJS: Размещенная в DLR реализация JS;IronJS Google Group. (Последний коммит был в 2013 году, последний обновление блога в 2012. Управляемый JScript: Умер на корню.MyJScript: упоминается в оригинальном сообщении, для тех, кто хочет получить больше информации, есть статья: Создай свой собственный язык поверх DLR. MonoJS: В Mono была реализация JScript.Net, но они перестали беспокоиться.

Сумасшедший метод:

Носорог над ИКВМ (Упоминается в комментариях, но здесь есть ссылка на дополнительную информацию о том, как это сделать.)
 mckamey05 мар. 2010 г., 12:48
+ 1 для IronJS. Я определенно буду следить за этим. Похоже, это очень рано, хотя. Есть признаки того, насколько хорошо это работает?
 Diogo Gomes10 мая 2011 г., 17:44
Домен мертв, но проект все еще продолжается Ironjs.wordpress.com

JINT может быть медленным, но его легко отлаживать и взаимодействовать с вашими собственными классами .NET. (Трудно установить[ComVisile] атрибуты каждый раз для jscript.dll и т. д.

Что касается потоков, JINT и юрского периода, как я и ожидал. Чтобы работать с движком JScript или Google V8, необходимо обратить внимание на проблему с UI-потоками.

Однако JINT устарел в каком-то смысле, потому что у меня проблемы с компиляцией JQuery 1.5 или более поздней версии.

Я надеюсь, что Jurassic может убрать свой предел, чтобы придерживаться своего собственного класса, создавая'AllowBob'sCLRClass=true'.

Я должен переписать весь класс. Это трудно..

 ultra mother hacker22 нояб. 2012 г., 06:44
Rhino 1.7R также имеет хорошую производительность. Я также играю с ним, пока Oracle не выпустит Nashorn с новой Java 8.
 mckamey15 нояб. 2012 г., 21:44
Ага. В конечном итоге, я просто использовал Rhino в Java в долгосрочной перспективе.
 durron59715 нояб. 2012 г., 20:50
Этой теме три года, информация в ней, вероятно, устарела!

http: //jurassic.codeplex.com Я не знаю, насколько он хорош в целом (производительность, удобство использования и т. Д.), Но по крайней мере он анализирует довольно сложные сценарии (другие реализации этого не делают) и поддерживает спецификацию ECMAScript 5. Я просто добавляю ссылку сюда для справки.

 Donny V.29 мая 2013 г., 02:06
Работает ли с Моно?
 Surya Pratap07 нояб. 2012 г., 09:27
Jurassic - один из более дружественных фреймворков, и производительность тоже хорошая
 aikeru15 февр. 2012 г., 07:03
Я добавил поддержку ActiveXObject в Jurassic в форме этого проекта: Jurascript.codeplex.com так что вы можете использовать большинство старых сценариев WSH / JScript. Очевидно, что они должны быть тщательно протестированы, прежде чем предположить, что это будет работать без проблем. :)

ClearScript.

Это не реализация; это оболочка взаимодействия, поддерживающая V8, JScript и VBScript, с действительно хорошим API для вызова их из кода .NET.

Пример кода со страницы CodePlex:

using System;
using Microsoft.ClearScript;
using Microsoft.ClearScript.V8;

// create a script engine
using (var engine = new V8ScriptEngine())
{
    // expose a host type
    engine.AddHostType("Console", typeof(Console));
    engine.Execute("Console.WriteLine('{0} is an interesting number.', Math.PI)");

    // expose a host object
    engine.AddHostObject("random", new Random());
    engine.Execute("Console.WriteLine(random.NextDouble())");

    // expose entire assemblies
    engine.AddHostObject("lib", new HostTypeCollection("mscorlib", "System.Core"));
    engine.Execute("Console.WriteLine(lib.System.DateTime.Now)");

    // create a host object from script
    engine.Execute(@"
        birthday = new lib.System.DateTime(2007, 5, 22);
        Console.WriteLine(birthday.ToLongDateString());
    ");

    // use a generic class from script
    engine.Execute(@"
        Dictionary = lib.System.Collections.Generic.Dictionary;
        dict = new Dictionary(lib.System.String, lib.System.Int32);
        dict.Add('foo', 123);
    ");

    // call a host method with an output parameter
    engine.AddHostObject("host", new HostFunctions());
    engine.Execute(@"
        intVar = host.newVar(lib.System.Int32);
        found = dict.TryGetValue('foo', intVar.out);
        Console.WriteLine('{0} {1}', found, intVar);
    ");

    // create and populate a host array
    engine.Execute(@"
        numbers = host.newArr(lib.System.Int32, 20);
        for (var i = 0; i < numbers.Length; i++) { numbers[i] = i; }
        Console.WriteLine(lib.System.String.Join(', ', numbers));
    ");

    // create a script delegate
    engine.Execute(@"
        Filter = lib.System.Func(lib.System.Int32, lib.System.Boolean);
        oddFilter = new Filter(function(value) {
            return (value & 1) ? true : false;
        });
    ");

    // use LINQ from script
    engine.Execute(@"
        oddNumbers = numbers.Where(oddFilter);
        Console.WriteLine(lib.System.String.Join(', ', oddNumbers));
    ");

    // call a script function
    engine.Execute("function print(x) { Console.WriteLine(x); }");
    engine.Script.print(DateTime.Now.DayOfWeek);

    // examine a script object
    engine.Execute("person = { name: 'Fred', age: 5 }");
    Console.WriteLine(engine.Script.person.name);
}
V8.NET


https: //v8dotnet.codeplex.com/documentatio

Plus был построен с самого начала, имея в виду моно порт. Это дает вам полный контроль над мощностью двигателя V8 из управляемого кода.

 Sancarn05 сент. 2018 г., 18:22
Обновленная ссылка: Github.com / rjamesnw / v8dotnet

и он будет работать с произвольным кодом JavaScript; Вам просто нужно отключить «быстрый режим» путем компиляции сjsc /fast- bar.js

Я не проверял это; Я только заметил это, читаяэта почт и подумал, что это будет еще одно разумное решение. MSDN имеет документы по этой опции а также Каковы ограничения, если вы не используете его.

http: //javascriptdotnet.codeplex.com) на Codeplex. Они обернули V8 с управляемым C ++, а затем вы можете использовать эту библиотеку с приложением .NET, и она работает как шарм. Открытый источник предлагает некоторые довольно хорошие функции, если вы спросите меня.

Приветствие.

 mckamey26 авг. 2010 г., 00:47
Знаете ли вы (или кто-либо еще), какие предостережения существуют в этой реализации? Это чисто управляемый? Или это требует определенной архитектуры процессора? Мне любопытно, будет ли он работать на Mono или какой-нибудь альтернативной CLR.
 Deacon Frost26 авг. 2010 г., 17:18
Садитесь, вы не сможете запустить его на Mono, так как Managed C ++ не работает в Linux, поэтому он не будет работать в Mono. Javascript .NET работает на платформе x86, так как v8 на x86, и, к сожалению, вы не сможете использовать Javascript .NET в многопоточном приложении, так как v8 плохо поддерживает эту функцию. Это обо всем, что я знаю о проекте. Я использовал его для личного применения и до сих пор хорошо работает.

Ваш ответ на вопрос