Criando um shell interativo para .NET aplicativos e incorporar linguagens de script como python python / ferro nele

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

Pergunta

eu estava aprendendo python usando o tutorial que vem com a instalação padrão do Python. Um dos benefícios que o autor afirma sobre Python é "talvez você tenha escrito um programa que poderia usar uma linguagem de extensão, e que você não quer para conceber e implementar uma nova linguagem para a sua aplicação" - A minha pergunta é como é que i ir sobre a criação de um programa (usando c #) que pode ser estendido usando Python interativamente (para que isso seja possível, eu iria imaginar que eu seria necessário criar uma espécie de "shell" ou no modo "interativo" para o programa .net )?

Existem quaisquer indicações sobre como projetar programas .NET que têm um shell interativo. Em seguida, gostaria de script python uso no shell "estender" ou interagir com o programa.

EDIT: Esta questão, em parte, decorre do give demonstração por Miguel de Icaza durante a PDC 2008, onde ele mostrou o comando csharp interativo alerta, C # 4.0 i pensar também tem esse "compilador como um serviço de" recurso . Olhei para aquilo e pensei o quão legal seria para projetar uma janela ou programa de web em .NET que tiveram um shell interativo .. e uma linguagem de script como Python pode ser usado para estender os recursos fornecidos pelo programa.

Além disso, eu comecei a pensar sobre esse tipo de funcionalidade depois de ler um dos ensaios de Steve Yegge onde ele fala sobre sistemas que vivem para sempre.

Foi útil?

Solução

Isso soa como um grande uso de IronPython .

É bastante fácil de configurar um host de script simples de C # para permitir chamadas em scripts IronPython, bem como permitindo IronPython para pôr em seu código C #. Há amostras e exemplos no site do CodePlex que mostram como fazer isso mesmo.

Outro bom site para exemplos e amostras é ironpython.info

aqui é um página dedicada a um exemplo respondendo à sua própria pergunta, embora de uma forma DLR-centric genérica -. isso lhe permitiria anfitrião IronPython, IronRuby, ou o que quer línguas DLR você quiser suporte

Eu usei estes exemplos no passado para criar um ambiente IronPython dentro de uma instalação privada de ScrewTurn Wiki - que me permitiu criar muito expressivo modelos de Wiki e provou ser muito útil em geral

.

Outras dicas

Eu estava procurando uma solução para o mesmo problema, e encontrou IronTextBox: http: // www.codeproject.com/KB/edit/irontextbox2.aspx

Ele precisa de um pouco de ajuste para as versões atuais, mas parece ser tudo o que eu precisava. Primeiro fez compilar e variáveis, em seguida, acrescentou que queria acesso a partir de shell para o escopo.

Python como uma linguagem de extensão é chamado de "Embedding Python".

Você pode chamar um módulo python de c ++ por bascially chamar o interpretador Python e tê-lo executar a fonte python. Isso é chamado incorporação .

Ele funciona a partir de C e C ++, e provavelmente vai funcionar tão bem a partir de C #.

E não, você não precisa de qualquer tipo de "shell". Enquanto Python pode ser interativo, isso não é uma exigência em tudo.

Aqui está um link para um post sobre a adição de IronRuby para o script de um aplicativo C #.

http: // blogue .jimmy.schementi.com / 2008/11 / adicionando-scripting-a-c-silverlight-app.html

Os princípios também iria funcionar bem para usar IronPython.

Se o seu objetivo é evitar aprender um novo idioma, você pode usar CSScript.Net e scripts incorporados escrito em C # ou VB em sua aplicação. Com CSScript você tenha acesso completo para o CLR. Três modelos diferentes de execução de scripts são suportados de modo que você pode executar o script que se refere a objetos em seu domínio de aplicativo atual, executar usando comunicação remota, ou executar como um shell.

Atualmente estou usando ccScript como código "cola" para configurar a aplicação objetos um pouco semelhante ao usando Boo.

Este tarefas ligação -lo a um artigo do projeto de código que fornece uma visão boa.

Eu não sei o que você quer dizer com

"estender" ou interagir com o programa

por isso não posso responder à sua pergunta. Pode dar um exemplo?

Há um interativo C # shell open source em mono: http: //www.mono-project. com / CsharpRepl

Quando você como python, .Net e extensão da linguagem, você provavelmente vai gostar Boo sobre python Ferro. Boo vem com um shell interativo de código aberto também.

Não concordo com

"você não quer para projetar e implementar uma nova linguagem para sua aplicação "

Não é tão difícil como costumava ser para criar uma simples DSL. Ele não vai te levar dias para implementar, apenas algumas horas. Pode ser uma opção interessante.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top