Создание интерактивной оболочки для приложений .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 может быть интерактивным, это не требование вообще.
Ответ 4
Вот ссылка на сообщение в блоге о добавлении IronRuby к script приложению С#.
http://blog.jimmy.schementi.com/2008/11/adding-scripting-to-c-silverlight-app.html
Принципы также будут хорошо работать для использования IronPython.
Ответ 5
Если ваша цель - не изучать новый язык, вы можете использовать CSScript.Net и встроенные скрипты, написанные на С# или VB, в ваше приложение, С помощью CSScript вы получаете полный доступ к CLR. Поддерживаются три различные модели выполнения script, так что вы можете выполнить script, который ссылается на объекты в вашем текущем домене приложения, выполнить с помощью удаленного доступа или выполнить как оболочку.
В настоящее время я использую CCScript как "клей" для настройки приложений, несколько похожих на Boo.
Эта ссылка задает вам задачу в статье проекта кода, которая дает хороший обзор.
Ответ 6
Я не знаю, что вы имеете в виду
"расширяться" или взаимодействовать с программой
поэтому я не могу ответить на ваш вопрос. Можете привести пример?
В интерактивном режиме есть интерактивная оболочка С# с открытым исходным кодом: http://www.mono-project.com/CsharpRepl
Если вам нравится расширение python,.Net и язык, вам, вероятно, понравится Boo поверх Iron python. Boo также имеет интерактивную оболочку с открытым исходным кодом.
Я не согласен с
"вы не хотите проектировать и реализовать совершенно новый язык для ваше приложение"
Это не так сложно, как раньше было создавать простой DSL. Всего вам потребуется несколько дней. Это может быть интересный вариант.