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

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

Есть ли указатели на то, как создавать .NET-программы с интерактивной оболочкой. Затем я хотел бы использовать python script в оболочке для расширения или взаимодействия с программой.

EDIT: Этот вопрос частично проистекает из демонстрационной версии Miguel de Icaza во время PDC 2008, где он показал интерактивную командную строку csharp, С# 4.0, я думаю, также имеет эту функцию "компилятор как услуга", Я посмотрел на это и подумал, как круто было бы разрабатывать Windows или веб-программу в .NET с интерактивной оболочкой.. и язык сценариев, такой как python, можно было бы использовать для расширения функций, предоставляемых программой.

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

Ответы

Ответ 1

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

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

Другим хорошим сайтом для примеров и примеров является ironpython.info

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

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

Ответ 2

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

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

Ответ 3

Python как язык расширения называется "Embedding Python".

вы можете вызывать python-модуль из С++ путем базового вызова int intrereter python и выполнить его для источника python. Это называется embedding.

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

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

Ответ 5

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

В настоящее время я использую CCScript как "клей" для настройки приложений, несколько похожих на Boo.

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

Ответ 6

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

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

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

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

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

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

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

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