Создание интерактивной оболочки для приложений .NET и встраивание в нее языков сценариев, таких как python / iron python - PullRequest
13 голосов
/ 30 апреля 2009

Я изучал Python с помощью учебника, который поставляется со стандартной установкой Python. Одним из преимуществ, которые автор заявляет о python, является «возможно, вы написали программу, которая могла бы использовать язык расширения, и вы не хотите разрабатывать и реализовывать совершенно новый язык для своего приложения» - мой вопрос, как бы я собираюсь разработать программу (с использованием c #), которая может быть расширена с помощью Python в интерактивном режиме (чтобы это было возможно, я бы подумал, что мне потребуется создать своего рода «оболочку» или «интерактивный» режим для программы .net )?

Существуют ли указания на то, как создавать программы .NET с интерактивной оболочкой. Затем я хотел бы использовать сценарий python в оболочке для «расширения» или взаимодействия с программой.

РЕДАКТИРОВАТЬ: Этот вопрос частично связан с демонстрацией, предоставленной Мигелем де Иказа во время PDC 2008, где он показал интерактивную командную строку csharp, C # 4.0, я думаю, также имеет эту функцию «компилятор как сервис». Я посмотрел на это и подумал, насколько круто было бы проектировать Windows или веб-программу в .NET с интерактивной оболочкой ... и язык сценариев, такой как python, можно использовать для расширения возможностей, предоставляемых программой.

Кроме того, я начал думать об этом виде функций после прочтения одного из эссе Стива Йегге, где он рассказывает о системах, которые живут вечно.

Ответы [ 6 ]

12 голосов
/ 30 апреля 2009

Это звучит как хорошее использование IronPython .

Довольно просто настроить простой хост сценариев из C #, чтобы разрешать вызовы в сценарии IronPython, а также разрешать IronPython вызывать ваш код C #. На сайте CodePlex есть примеры и примеры, показывающие, как это сделать.

Еще один хороший сайт с примерами и примерами - ironpython.info

И вот страница , посвященная примеру, отвечающему на ваш вопрос, хотя и общим DLR-ориентированным способом - это позволит вам разместить IronPython, IronRuby или любые другие языки DLR, которые вы хотите поддержка.

Я использовал эти примеры в прошлом для создания среды IronPython внутри частной установки ScrewTurn Wiki - это позволило мне создавать очень выразительные вики-шаблоны и в целом оказалось очень полезным.

3 голосов
/ 01 мая 2009

Я искал решение для той же проблемы и нашел IronTextBox: http://www.codeproject.com/KB/edit/irontextbox2.aspx

Требуется небольшая настройка для текущих версий, но, похоже, все, что мне нужно. Сначала сделал его компиляцией, а затем добавил переменные, к которым я хотел получить доступ из оболочки в область.

1 голос
/ 27 июня 2009

Если ваша цель - избежать изучения нового языка, вы можете использовать CSScript.Net и встроенные сценарии, написанные на C # или VB, в ваше приложение. С CSScript вы получаете полный доступ к CLR. Поддерживаются три разные модели выполнения сценариев, так что вы можете выполнять сценарий, который ссылается на объекты в вашем текущем домене приложения, выполнять с использованием удаленного взаимодействия или выполнять как оболочку.

В настоящее время я использую CCScript в качестве «связующего» кода для настройки объектов приложения, чем-то похожего на использование Boo.

Эта ссылка направляет вас к статье проекта кода, которая предоставляет хороший обзор.

1 голос
/ 01 мая 2009

Вот ссылка на пост в блоге о добавлении IronRuby для написания скриптов в приложении C #.

http://blog.jimmy.schementi.com/2008/11/adding-scripting-to-c-silverlight-app.html

Принципы также хорошо подойдут для использования IronPython.

1 голос
/ 01 мая 2009

Python в качестве языка расширения называется «Embedded Python».

Вы можете вызвать модуль python из c ++, просто вызвав интерпретатор python и заставить его выполнить исходный код python. Это называется embedding .

Он работает с C и C ++ и, вероятно, будет работать так же хорошо с C #.

И нет, вам не нужна какая-либо "оболочка". Хотя Python может быть интерактивным, это совсем не обязательно.

0 голосов
/ 30 апреля 2009

Я не знаю, что вы имеете в виду под

«расширить» или взаимодействовать с программой

поэтому я не могу ответить на ваш вопрос. Можете привести пример?

В моно есть интерактивная оболочка C # с открытым исходным кодом: http://www.mono -project.com / CsharpRepl

Если вам нравятся python, .Net и расширение языка, вам, вероятно, понравится Boo поверх Iron python. Boo поставляется с интерактивной оболочкой с открытым исходным кодом.

Я не согласен с

"Вы не хотите создавать и реализовать совершенно новый язык для Ваше приложение "

Это не так сложно, как раньше, для создания простого DSL. Это займет не несколько дней, а несколько часов. Это может быть интересный вариант.

...