Можно ли использовать JScript.NET для написания сценария приложения .NET?

Поскольку MS , похоже, убила управляемый JavaScript в последняя версия DLR как для серверной (ASP.NET Futures), так и для клиентской (Silverlight), может ли кто-нибудь успешно использовать не устаревшие API-интерфейсы для создания сценариев своих объектов приложения с помощью JScript.NET и / или может объяснить, как сделать так? Решение Mono / JScript также может быть приемлемым, если оно стабильно и соответствует нижеприведенным требованиям.

Мы заинтересованы в обновлении хоста сценариев, который использует движок Microsoft JScript и API ActiveScript, до чего-то более производительного и более простого. У нас есть более 16 000 сценариев на стороне сервера, имеющих более 42 МБ исходного кода, поэтому о переписывании на другой язык сценариев не может быть и речи.

Наши особые требования:

  • Noteably better performance than the Microsoft JScript (ActiveScript) engine
    • Better runtime performance and/or
    • Сохранение предварительно проанализированных или скомпилированных скриптов (не выполняйте повторный анализ при каждом запуске)
    • Более низкое или равное потребление памяти
  • 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-объекты или COM-объекты, завернутые в .NET
  • Instantiation of COM objects from Script
    • à la "new ActiveXObject(progid)"
    • Низкий приоритет с учетом предыдущего
  • Include files
    • Pre-loading of "helper scripts" into a script execution context
    • Функция или оператор "include" (легко создать, учитывая вышеизложенное)
  • Support for code at global-scope
    • Execution of code the global scope
    • Сохранение значений, инициализированных в глобальной области
    • Извлечение значений из глобальной области видимости
    • Внедрение и замена значений в глобальном масштабе
  • Calling of script-defined functions
    • with parameters
    • и с доступом к ранее инициализированной глобальной области видимости
  • Отладка на уровне исходного кода
  • Коммерческая поддержка или поддержка с открытым исходным кодом
  • Не устаревшие API

person James Hugard    schedule 01.06.2009    source источник
comment
Будет ли Microsoft по-прежнему поддерживать управляемый JScript в Silverlight?   -  person Nosredna    schedule 02.06.2009
comment
Нет, тоже ушел из Silverlight. См. Этот ответ: stackoverflow.com/questions/775339/   -  person James Hugard    schedule 02.06.2009
comment
Учитывая добавление поддержки ActiveXObject в движок Google V8, проделав некоторую работу в прошлом, привязывая C ++ к COM через информацию TypeLib. Отправлю ответ, если это окажется жизнеспособным.   -  person James Hugard    schedule 17.06.2009


Ответы (7)


Я ответил на аналогичный вопрос здесь . Взгляните на IronJS, реализацию JavaScript на F #, работающую в DLR.

person Community    schedule 08.04.2010

Рано или поздно я полагаю, что кто-то напишет DLR Javascript. Я знаю, что сейчас это не очень удобно для вас, но, возможно, вы могли бы начать проект. Я подозреваю, что использование JScript.NET позволит лучше проанализировать затраты и выгоды.

person Julian Birch    schedule 02.06.2009

Если вам подходит отказ от .NET и Microsoft, попробуйте Rhino от Mozilla. Это реализация JavaScript с открытым исходным кодом, полностью написанная на Java. Многие современные js-библиотеки на стороне сервера нацелены на эту платформу.

person thatismatt    schedule 16.06.2009
comment
@thatismatt - Вы использовали Rhino с мостом между Java и COM? Вы можете прокомментировать производительность, простоту интеграции с кодом C ++ и т. Д.? - person James Hugard; 17.06.2009
comment
Боюсь, что нет, извините, я не особо помог, но дайте мне знать, как у вас дела! - person thatismatt; 17.06.2009

Я использовал CSScript.net, так как он позволяет запускать C # в качестве платформы для написания сценариев. С сайта:

CS-Script сочетает в себе мощь и богатство C # и FCL с гибкостью системы сценариев. CS-Script может быть полезен системным и сетевым администраторам, разработчикам и тестировщикам. Для всех, кому нужна автоматизация для решения множества задач программирования.

CS Script удовлетворяет всем изложенным вами условиям. Я использовал его в продакшене как замену Boo, он очень хорошо зарекомендовал себя. Вы можете увидеть это в действии здесь.

person David Robbins    schedule 23.12.2009

Использование взаимодействия Com означает, что вы ограничены решением MS, которое Java и Opensource хотят как можно меньше делать с ним.

Я не вижу никакого решения, которое поддерживает все ваши требования, либо вы отказываетесь от всего COM / .NET, и переходите на Java (Rhino) / Linux / Open source, либо вы сомневаетесь в использовании Javascript в качестве языка вашего сервера даже в мире Linux, который мы используем PHP / Python / Ruby на сервере, если мы не можем запустить Java. Вы не увидите большого прироста производительности с помощью сценария Java, поскольку язык является основным препятствием.

Я бы не стал рассчитывать на то, что люди напишут новый DLR, поскольку серверный Java-скрипт быстро умирает.

Учитывая, что вам нужна производительность, как насчет F #, Microsoft будет поддерживать механизм Jscript не менее 5 лет, давая вам время для создания новых вещей на F #, пока вы медленно переносите код.

person ben    schedule 01.12.2009
comment
Проблема кроссплатформенности заключается в том, что нам нужен доступ к более чем 80 вызовам Win32 RPC плюс полдюжины объектов DCOM, таких как WSUS и WMI. Мне нравится F #, и я использую его для создания прототипов, внутренних утилит и управления каталогом (дома, в интернет-магазине моей жены), но, как уже говорилось, у нас есть более 16000 скриптов, написанных на JS на стороне сервера, и мы не можем позволить себе такие затраты. преобразования на другой язык. Тем не менее, мы рассмотрели jcifs.samba.org, который может оказаться весьма интересным в сочетании с Rhino. - person James Hugard; 01.12.2009
comment
Это случай камня и твердого места ... Первый вопрос - знать, что Javascript на стороне сервера умирает / мертв. Во что вы пишете новый код? По крайней мере, если вы напишете новый код на f #, вы получите плавную миграцию, которая может длиться 5-10 лет. Через 5 лет вы можете обнаружить, что 50% вашего кода - это F #, и тогда он будет быстрым и хорошо работать на 16 ядрах, которые у вас есть. Взаимодействие Java (например, Rhino) с win32 / Dcom / WMI будет проблематичным, но может дать вам решение, если вы решите эти проблемы. - person ben; 04.01.2010

Вы видели ROScript? http://www.remobjects.com/script.aspx

Поддерживает синтаксис PascalScript и ECMAScript (Javascript).

person George Birbilis    schedule 22.07.2013

Jurrassic -Двигатель жив и здоров.

Со своего сайта codeplex:

  • Поддерживает все функции ECMAScript 3 и ECMAScript 5, включая строгий режим ES5
  • Хорошо протестирован - прошел более пяти тысяч юнит-тестов (с более чем тридцати тысячами утверждений)
  • Простой, но мощный API
  • Компилирует JavaScript в байт-код .NET (CIL); не переводчик
  • Развернут как единая сборка .NET (без собственного кода)
  • Базовая поддержка для интегрированной отладки в Visual Studio
  • Использует легкую генерацию кода, поэтому сгенерированный код полностью собирает мусор
  • Протестировано на .NET 3.5, .NET 4 и Silverlight
person Sebastian    schedule 08.12.2013