Создание интерактивной оболочки для .NET apps и внедрение в нее скриптовых языков, таких как python / iron python
-
03-07-2019 - |
Вопрос
Я изучал python с помощью руководства, которое поставляется со стандартной установкой python.Одно из преимуществ, которые автор заявляет о python, заключается в том, что "возможно, вы написали программу, которая могла бы использовать язык расширения, и вы не хотите разрабатывать и внедрять совершенно новый язык для своего приложения" - Мой вопрос заключается в том, как бы я приступил к разработке программы (используя c #), которая может быть расширена с помощью Python в интерактивном режиме (чтобы это было возможно, я бы предположил, что мне нужно будет создать какую-то "оболочку" или "интерактивный" режим для программы .net)?
Есть ли какие-либо указания по разработке.СЕТЕВЫЕ программы, имеющие интерактивную оболочку.Затем я хотел бы использовать скрипт python в командной оболочке для "расширения" или взаимодействия с программой.
Редактировать: Этот вопрос частично проистекает из демонстрации, предоставленной Мигелем де Икасой во время PDC 2008, где он показал интерактивную командную строку csharp, C # 4.0, я думаю, также имеет эту функцию "компилятор как сервис".Я посмотрел на это и подумал, как здорово было бы создать Windows или веб-программу на .NET, которая имела бы интерактивную оболочку..и язык сценариев, такой как python, может быть использован для расширения возможностей, предоставляемых программой.
Кроме того, я начал задумываться о такого рода функциональности после прочтения одного из эссе Стива Йегге, где он рассказывает о системах, которые живут вечно.
Решение
Это звучит как отличное использование Железный Питон.
Довольно легко настроить простой узел сценариев на C #, чтобы разрешить вызовы скриптов IronPython, а также разрешить IronPython вызывать ваш код на C #.На сайте CodePlex есть примеры, которые показывают, как сделать именно это.
Еще одним хорошим сайтом для примеров и сэмплов является ironpython.info
И вот страница посвящается примеру, отвечающему на ваш вопрос, хотя и в общем виде, ориентированном на DLR - это позволило бы вам разместить IronPython, IronRuby или любые другие языки DLR, которые вы хотите поддерживать.
В прошлом я использовал эти примеры для создания среды IronPython внутри частной установки ScrewTurn Вики - это позволило мне создавать очень выразительные вики-шаблоны и оказалось очень полезным в целом.
Другие советы
Я искал решение для той же проблемы и нашел IronTextBox: http://www.codeproject.com/KB/edit/irontextbox2.aspx
Он нуждается в небольшой настройке для текущих версий, но, кажется, это все, что мне было нужно.Сначала я скомпилировал его, а затем добавил переменные, к которым я хотел получить доступ из оболочки, в область видимости.
Python как язык расширения называется "Embedding Python".
вы можете вызвать модуль python из c ++, в основном вызвав интерфейс python и заставив его выполнить исходный код python.Это называется встраивание.
Он работает на C и C ++ и, вероятно, будет работать так же хорошо и на C #.
И нет, вам не нужна никакая "оболочка".Хотя Python может быть интерактивным, это вообще не является обязательным требованием.
Вот ссылка на запись в блоге о добавлении IronRuby в скрипт приложения на C #.
http://blog.jimmy.schementi.com/2008/11/adding-scripting-to-c-silverlight-app.html
Эти принципы также хорошо работали бы при использовании IronPython.
Если ваша цель состоит в том, чтобы избежать изучения нового языка, вы можете использовать CSScript.Net и встроенные скрипты, написанные на C # или VB, в ваше приложение.С CSScript вы получаете полный доступ к среде CLR.Поддерживаются три различные модели выполнения скрипта, так что вы можете выполнять скрипт, который ссылается на объекты в вашем текущем домене приложения, выполнять с помощью удаленного взаимодействия или выполнять как оболочку.
В настоящее время я использую CCScript в качестве "склеивающего" кода для настройки объектов приложения, что несколько похоже на использование Boo.
Это Ссылка отсылает вас к статье проекта code, которая содержит хороший обзор.
Я не понимаю, что ты имеешь в виду, говоря
"расширять" или взаимодействовать с программой
поэтому я не могу ответить на ваш вопрос.Можете ли вы привести пример?
В mono есть интерактивная оболочка C # с открытым исходным кодом: http://www.mono-project.com/CsharpRepl
Если вам нравятся python, .Net и языковые расширения, вам, вероятно, понравятся Бу над Железным питоном.Boo также поставляется с интерактивной оболочкой с открытым исходным кодом.
Я не согласен с
"вы не хотите разрабатывать и внедрять совершенно новый язык для вашего приложения"
Создать простой DSL не так сложно, как раньше.На реализацию этого у вас уйдут не дни, а всего лишь часы.Это может быть интересным вариантом.