.net языки сценариев
Что люди используют для написания сценариев в .net-приложениях. Новый вопрос после MS капель IronPython
IP был моим любимым; затем Lua
Что я подразумеваю под сценарии. Я имею в виду, что у меня есть большой инструмент управления системой, который позволяет пользователям подключать биты умности, включая сборки и скрипты. Какой язык я должен использовать для скриптов. Поэтому мне нужен встроенный интерпретатор, возможно, тот, который хорошо интегрирован с .net
Объявление MS здесь
http://www.theregister.co.uk/2010/10/22/microsoft_kills_dynamic_languages_projects/
F # - несколько человек сказали F #. Является ли F # пригодным для использования в качестве встроенного языка сценариев?
EDIT: Мой новый лучший друг для этого - javascript; существует несколько реализаций качества для .net
Ответы
Ответ 1
Powershell - это оболочка сценариев .net net native, которую можно импортировать в ваше приложение. Со временем я стал использовать его для выполнения всего, от модульного тестирования до обеспечения расширяемости. Кроме того, он поставляется в каждой версии Windows после 7, так что вам не нужно беспокоиться об его установке, и прилагаются усилия для разработки моно-версии.
Ответ 2
Мы используем С# большую часть времени для создания сценариев. Компиляция и интеграция "на лету" возможны внутри собственных приложений. Даже если замена чистого сценария возможна в хорошем смысле, посмотрите http://www.csscript.net/
Через некоторое время я столкнулся с IronPython. Если бы мне пришлось переделать скрипты в моем приложении, я бы выбрал его, поскольку он демонстрирует большую гибкость во время выполнения. Нет необходимости в утомительной обработке AppDomain среди других аспектов.
Ответ 3
IronRuby
Ответ 4
F #, Lua.
Но мы часто используем С# через Mono: Как разместить компилятор Monos CSharp как службу в .NET - для оценки кода выполнения /REPL
или через внедрение в наших приложениях или через С# Script Engine
Ответ 5
Сценарии IDE (думаю, VBA):
Инструменты Visual Studios для приложений (VSTA), которые поддерживают VB и С#. Это текущее поддерживаемое решение для Microsoft и предназначено для замены VSA и VBA. Некоторое время они пренебрегали им, но взяли его обратно. VSTA похож на VBA и предоставляет среду IDE. Используемый конец необходимо будет установить VSTA на своей бесплатной машине.
http://www.microsoft.com/en-us/download/details.aspx?id=38806
Прямой текст:
PowerShell
http://blogs.msdn.com/b/kebab/archive/2014/04/28/executing-powershell-scripts-from-c.aspx
Roslyn (это заменяет CodeDom, но все еще находится в состоянии предварительного просмотра)
https://roslyn.codeplex.com/
http://msdn.microsoft.com/en-us/vstudio/roslyn.aspx
CodeDom (немного тяжелее, чем вы могли бы захотеть)
http://msdn.microsoft.com/en-us/library/y2k85ax6.aspx
http://www.codeproject.com/Articles/12852/Compile-and-Run-VB-NET-Code-using-the-CodeDom
http://www.codeproject.com/Articles/3289/Dynamic-Code-Generation-and-Code-Compilation
DynamicMethod (мне это нравится, потому что я могу определить код как функцию с конкретными параметрами и возвращает. Он сужает скрипты именно так, как вы хотите)
http://msdn.microsoft.com/en-us/library/system.reflection.emit.dynamicmethod.aspx
Ответ 6
F #
Windows Scripting с VB Script
Ответ 7
IronPython, Мигель де Иказа с моно славой, стал лидером проекта. http://tirania.org/blog/archive/2010/Oct-22.html
Ответ 8
Мы приняли решение почти 2 года назад, а финалистами были Python и Lua. В то время IronPython получил кивок, потому что он поддерживался MS. VBA перестали получать лицензию новым клиентам еще в 2007 году, VSTA выглядит намного дешевле, но стоит 50 долларов США/мест (с ежегодным обязательством в высоком От -5 до 6-разрядного диапазона), он все еще находится за пределами того, что примет босс.
Похоже, нам нужно переоценить наше решение для языка сценариев. Текущее приложение, в котором мы это используем, - это лицензия на средние 5 цифр и автоматизирует несколько других наших программных продуктов (которые продаются в среднем от 3 до 4 цифр).
Вероятно, книги, наиболее применимые для сценариев внутри приложений, - это книги, написанные для игровых разработчиков, обычно с такими названиями, как "AI для игр". Многие другие компании, которые зарабатывают деньги на продаже программного обеспечения, приняли решение выбрать lua или python по некоторым порядочным причинам, и может быть полезно прочитать некоторые детали, объясняющие, почему они пошли по этим маршрутам.
Ответ 9
Отвечая в 2018 году:
Возможно, вы захотите взглянуть на MS ClearScript https://github.com/Microsoft/ClearScript
Это JavaScript (V8-движок), который вы можете встроить в приложение .NET
Ответ 10
Если вам нужен пользовательский DSL, вы можете написать свой собственный, используя DLR. http://en.wikipedia.org/wiki/Dynamic_Language_Runtime
Самый генератор poular parser, который я знаю, является antlr, который может генерировать синтаксические анализаторы .NET http://www.antlr.org/
Для простых сценариев проверки и конфигурации вы можете использовать язык выражения Spring.NET: http://www.springframework.net/doc-latest/reference/html/expressions.html
Ответ 11
Для тех, кто ищет поддержку .Net Standard/Core, V8.Net теперь поддерживает ее. Вы также можете использовать его в веб-приложениях ASP.NET, если вы когда-либо хотели создавать сценарии на серверной части. Сейчас я использую его в проекте VPL (FlowScript) для добавления серверных сценариев, которые также предоставляют избранные типы .Net в движке V8.
![nuget]()
Ответ 12
Частично вопрос в том, что вы хотите, чтобы язык был похож. Может быть, вы хотите полную мощность и гибкость С#. Или, может быть, вы хотите, чтобы это было немного проще, чтобы его могли использовать люди, которые могут не быть настоящими программистами.
Я только что опубликовал свою библиотеку Silk на GitHub для .NET. Он использует второй подход и использует язык без чрезмерной пунктуации и не учитывает регистр. Это также очень плохо с типами данных.
Это очень просто в использовании. Просто зарегистрируйте функции, которые ваш код делает доступными для скрипта, скомпилируйте исходный код в байт-код и запустите его. Когда вызывается одна из ваших функций, возникает событие, и ваш код может реализовать эту функцию.