Создание интерактивной оболочки для .NET apps и внедрение в нее скриптовых языков, таких как python / iron python

StackOverflow https://stackoverflow.com/questions/808692

Вопрос

Я изучал 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 не так сложно, как раньше.На реализацию этого у вас уйдут не дни, а всего лишь часы.Это может быть интересным вариантом.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top