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

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

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

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

  • Заметно лучшая производительность, чем у движка Microsoft JScript (ActiveScript)
    • Лучшая производительность во время выполнения и / или
    • Сохранение предварительно проанализированных или скомпилированных скриптов (не повторяйте при каждом запуске)
    • Более низкое или равное потребление памяти
  • Полная совместимость с ECMA-262 ECMAScript
    • немного портирования можно терпеть
  • Внедрение пользовательских объектов в пространство имен скрипта
    • Объекты.NET (не сложное требование)
    • COM-объекты или COM-объекты, завернутые в.NET
  • Создание COM-объектов из скрипта
    • а-ля "новый ActiveXObject(progid)"
    • Низкий приоритет с учетом предыдущего
  • Включить файлы
    • Предварительная загрузка "вспомогательных сценариев" в контекст выполнения сценария
    • Функция или оператор "include" (легко создать, учитывая вышеизложенное)
  • Поддержка кода в глобальном масштабе
    • Выполнение кода глобальной областью действия
    • Сохранение значений, инициализированных в глобальном масштабе
    • Извлечение значений из глобальной области видимости
    • Инъекция и замена ценностей в глобальном масштабе
  • Вызов скриптовых функций
    • с параметрами
    • и с доступом к ранее инициализированной глобальной области видимости
  • Отладка на уровне исходного кода
  • Коммерческая или открытая поддержка
  • Не устаревшие API

7 ответов

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

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

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

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

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

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

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

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

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

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

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

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

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

С их сайта codeplex:

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