Crear un shell interactivo para aplicaciones .NET e incrustar lenguajes de script como python / iron python

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

Pregunta

Estaba aprendiendo Python usando el tutorial que viene con la instalación estándar de Python. Uno de los beneficios que el autor declara sobre python es "tal vez haya escrito un programa que podría usar un lenguaje de extensión y no desea diseñar e implementar un lenguaje completamente nuevo para su aplicación". - Mi pregunta es cómo haría para diseñar un programa (usando c #) que se pueda extender usando Python de forma interactiva (para que esto sea posible, me imagino que necesitaría crear algún tipo de '' shell '' o '' modo interactivo " para el programa .net)?

¿Hay algún indicador sobre cómo diseñar programas .NET que tengan un shell interactivo? Entonces me gustaría usar el script de Python en el shell para " extender " o interactuar con el programa.

EDITAR: Esta pregunta se debe en parte a la demostración dada por Miguel de Icaza durante PDC 2008, donde mostró el símbolo del sistema interactivo csharp, C # 4.0, creo que también tiene este compilador como servicio. característica. Lo miré y pensé lo genial que sería diseñar un programa de Windows o web en .NET que tuviera un shell interactivo ... y un lenguaje de script como Python podría usarse para ampliar las características proporcionadas por el programa.

Además, comencé a pensar en este tipo de funcionalidad después de leer uno de los ensayos de Steve Yegge donde habla sobre sistemas que viven para siempre.

¿Fue útil?

Solución

Esto suena como un gran uso de IronPython .

Es bastante fácil configurar un host de scripting simple desde C # para permitir llamadas a los scripts de IronPython, así como permitir que IronPython llame a su código C #. Hay ejemplos y ejemplos en el sitio de CodePlex que muestran cómo hacer esto mismo.

Otro buen sitio para ejemplos y muestras es ironpython.info

Y aquí hay una página dedicada a un ejemplo que responde a su pregunta, aunque de forma genérica centrada en DLR, esto le permitiría alojar IronPython, IronRuby o cualquier idioma DLR que desee admitir.

He usado estos ejemplos en el pasado para crear un entorno IronPython dentro de una instalación privada de ScrewTurn Wiki - me permitió crear plantillas Wiki muy expresivas y demostró ser muy útil en general.

Otros consejos

Estaba buscando una solución para el mismo problema, y ??encontré IronTextBox: http: // www.codeproject.com/KB/edit/irontextbox2.aspx

Necesita un poco de ajuste para las versiones actuales, pero parece ser todo lo que necesitaba. Primero lo compilé, y luego agregué variables a las que quería acceder desde el shell al alcance.

Python como lenguaje de extensión se llama " Incrustar Python " ;.

puede llamar a un módulo de python desde c ++ llamando fundamentalmente al intérprete de python y hacer que ejecute la fuente de python. Esto se llama incrustación .

Funciona desde C y C ++, y probablemente funcionará igual de bien desde C #.

Y no, no necesita ningún tipo de "shell". Si bien Python puede ser interactivo, eso no es un requisito en absoluto.

Aquí hay un enlace a una publicación de blog sobre cómo agregar IronRuby a la secuencia de comandos de una aplicación C #.

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

Los principios también funcionarían bien para usar IronPython.

Si su objetivo es evitar aprender un nuevo idioma, puede usar CSScript.Net y scripts incrustados escritos en C # o VB en su aplicación. Con CSScript obtienes acceso completo al CLR. Se admiten tres modelos diferentes de ejecución de scripts para que pueda ejecutar scripts que se refieran a objetos en el dominio de su aplicación actual, ejecutar mediante comunicación remota o ejecutar como un shell.

Actualmente estoy usando CCScript como " pegamento " código para configurar objetos de aplicación algo similar a usar Boo.

Este enlace lo lleva a un artículo de proyecto de código que proporciona Una buena visión general.

No sé a qué te refieres con

  

" extender " o interactuar con el programa

así que no puedo responder tu pregunta. ¿Puedes dar un ejemplo?

Hay un shell de C # interactivo de código abierto en mono: http: //www.mono-project. com / CsharpRepl

Cuando le guste python, .Net y la extensión de idioma, probablemente le gustará Boo sobre Iron python. Boo también viene con un shell interactivo de código abierto.

No estoy de acuerdo con

  

" no desea diseñar y   implementar un lenguaje completamente nuevo para   su aplicación "

No es tan difícil como solía ser crear un DSL simple. No le llevará días implementarlo, solo horas. Puede ser una opción interesante.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top