ventajas tutorial sirve que programacion para lenguaje historia desventajas descargar caracteristicas antecedentes c# .net scripting ironpython ironruby

tutorial - para que sirve c#



Extensión de la aplicación C#.NET: ¿crear un lenguaje de scripting personalizado o no? (8)

Necesito construir una interfaz de scripting para mi programa C # que hace pruebas de nivel del sistema del firmware incorporado.

Mi aplicación contiene bibliotecas para interactuar completamente con los dispositivos. Existen bibliotecas separadas para iniciar acciones, obtener resultados y realizar un seguimiento de éxito / falla. Mi aplicación también tiene una GUI para administrar múltiples dispositivos y asignar muchos scripts para ejecutar.

Para los evaluadores (no programadores, pero técnicos), necesito proporcionar una interfaz de scripting que les permita crear diferentes escenarios para probarlos y ejecutarlos. Simplemente llamarán a mis API y luego devolverán un resultado a mi programa (aprobado / reprobado y mensaje).

Un ejemplo muy básico de lo que quiero:

TURN_POWER_ON TUNE_FREQUENCY frequency WAIT 5 IF GET_FREQUENCY == frequency REPORT_PASS "Successfully tuned to " + frequency ELSE REPORT_FAIL "Failed to tune to " + frequency ENDIF TURN_POWER_OFF

Donde las funciones de informe, potencia y frecuencia son proporcionadas por mis bibliotecas C #.

¿Sería bueno algo como IronRuby o IronPython para esto, o debería simplemente construir mi propio lenguaje básico?

¿El código de Ruby / Python se vuelve complicado al tratar de incluir un grupo de ensamblados compilados de .NET? Quiero que sea fácil de aprender y codificar para no programadores y programadores por igual.

EDITAR:

Gracias por todas las buenas respuestas. Elegí IronPython como la respuesta, ya que tenía más soporte, pero pasaré un poco de tiempo con cada uno de IronPython, Boo e IronRuby para ver en qué los probadores preferirían escribir los scripts.


Estoy de acuerdo con Marc G, aunque vale la pena mencionar que el concepto general es un Langugage específico del dominio. Si bien IronRuby / IronPython no son estrictamente específicos de un dominio, tienen todas las funciones y te permitirán continuar con tu implementación.

Visual Studio tiene las herramientas DSL, y está el material ''M'' Grammar que puedes ver.

Pero sí, IronPython.


He escuchado cosas muy buenas sobre IronPython para exactamente este tipo de escenario. Ciertamente me arriesgaría a pasar unas horas con una prueba de concepto rápida, para ver cómo funciona.

Michael Foord será muy optimista sobre el éxito de IronPython en casos similares (más específicamente para él, para usuarios expertos en hojas de cálculo), y en sus portadas de libros (IIRC) algunos consejos sobre cómo alojarlo desde .NET.


Puede valer la pena considerar PowerShell para este tipo de tarea. Puede invocar .Net como cualquiera de los lenguajes de DLR, y tiene un tipo de lenguaje más natural para las tareas en su concepto de cmdlet (command-let). Debe escribir los cmdlets en un lenguaje compilado en v1, en v2 que se está iniciando con Win7 y trabajando para versiones anteriores en los próximos meses (v2 para Vista / Win2k8 ahora está en RC), puede compilarlos en PowerShell directamente.


Desde la DSL que estás buscando, te recomendaría usar CUCUMBER con IronRuby.

Con Cucumber, los probadores escriben pruebas que se ven así:

Scenario: See all vendors Given I am logged in as a user in the administrator role And There are 3 vendors When I go to the manage vendors page Then I should see the first 3 vendor names

Es muy fácil hacer que este idioma se ajuste a sus necesidades. Simplemente busque en Google "Cucumber and IronRuby" y encontrará varias guías y publicaciones en blogs para que pueda comenzar.


Es posible que desee ver Boo , otro lenguaje administrado que se ejecuta en el CLR, y que es especialmente adecuado para construir DSL y hacer que sus aplicaciones sean programables.

La canalización de compilación es directamente extensible desde el lenguaje en sí.

Leer el Manifiesto de Boo es un buen punto de partida si desea obtener más información al respecto.

[ Editar ] Olvidé mencionar que Ayende Rahien está escribiendo un libro completo sobre el tema: Creación de lenguajes específicos de dominio en Boo


Estamos utilizando Iron Python incorporado para la fórmula de fijación de precios en uno de nuestros proyectos. Así es como una muestra real de cómo se ve.

E_DOCUMENT_CHECK = DCPAV * ADS_NUM E_SPECIFIC_TAX = STV E_RESOURCE_DEV = RDV E_LP_ISSUANCE = LPIV E_ANNUAL_FEES = APFCV * SA * SIDES_NUM E_SERVICE_FEES= MAX( MINSFV, E_DOCUMENT_CHECK+E_SPECIFIC_TAX+E_RESOURCE_DEV+E_LP_ISSUANCE+E_ANNUAL_FEES) TOTAL= E_DOCUMENT_CHECK+E_SPECIFIC_TAX+E_RESOURCE_DEV+E_LP_ISSUANCE+E_ANNUAL_FEES+E_SERVICE_FEES

Es realmente sencillo de implementar. La función Max (), por ejemplo, es solo uno de los métodos personalizados de C # que importamos al motor IronPython y parece natural de usar en una configuración de configuración.



IronRuby es el más poderoso para crear lenguajes específicos de dominio, porque su sintaxis es mucho más flexible y tolerante que la de Python (tus usuarios van a atornillar el espacio en blanco y se molestarán por los métodos obligatorios () para llamar).

Podrías escribir tu script de muestra en IronRuby y se vería así:

TURN_POWER_ON TUNE_FREQUENCY frequency WAIT 5 if GET_FREQUENCY == frequency REPORT_PASS "Successfully tuned to " + frequency else REPORT_FAIL "Failed to tune to " + frequency end TURN_POWER_OFF

Aquí hay una muestra de un DSL que nuestros probadores utilizan actualmente para escribir pruebas automatizadas contra nuestra interfaz de usuario

window = find_window_on_desktop "OurApplication" logon_button = window.find "Logon" logon_button.click list = window.find "ItemList" list.should have(0).rows add_button = window.find "Add new item" add_button.click list.should have(1).rows

Sin embargo, tal como están las cosas ahora, IronPython es mucho más maduro y tiene un rendimiento mucho mejor que IronRuby, por lo que es posible que prefiera usarlo.

Recomiendo ir con IronPython o IronRuby a crear tu propio idioma personalizado ... Ahorrarás una cantidad inimaginable de esfuerzo (y errores)