2009-07-26 17 views
12

Con el .NET 4.0 beta ahora disponible, y por lo tanto la disponibilidad más amplia de .NET Dynamic Language Runtime, creo que este tipo de temas se volverán "más candentes".PowerShell Runspace vs DLR

Estoy confundido acerca de las diferencias conceptuales entre el DLR y PowerShell. Me parece que si quiero proporcionar capacidades de scripting en mi aplicación .NET, puedo usar el DLR (y así habilitar el scripting en IronPython o IronRuby, o cualquier otro idioma de Iron * disponible para el DLR), o alojar un PowerShell Runspace.

¿Cuáles son los pros y los contras de cada método? ¿Por qué podría elegir uno sobre el otro? Como un lenguaje dinámico en sí mismo, y un lenguaje .NET de primera clase, ¿por qué PowerShell tampoco se dirige al DLR?

Respuesta

12

En .NET 4.0, el DLR consiste en lo que puede considerar "DLR v1.0". Esto incluye el mecanismo de almacenamiento en caché del sitio de llamada, las características de interoperación de lenguaje cruzado y las mejoras en los árboles de expresión LINQ existentes. Estas son todas las características que son muy útiles para implementar un lenguaje pero no para alojar un idioma.

Y esa es la pieza que falta en DLR 1.0: una historia de alojamiento compartido para todos los idiomas. Pero tenemos un comienzo en la forma de las API de alojamiento que enviamos en proyectos CodePlex w/DLR e IronPython y también w/IronRuby en github. Lamentablemente, no creímos que pudiéramos impulsar estas API a la calidad del envío en el marco de tiempo de .NET 4.0, por lo que no las incluimos. En particular, queremos obtener más comentarios de otros idiomas como Powershell e incluso VB y C# para asegurarnos de tener las API adecuadas.

Por lo tanto, cada idioma más o menos tiene su propia historia de hosting a excepción de IronPython y IronRuby en este momento. Pero nos encantaría ver que todo esto se unifique en el futuro para que los usuarios puedan elegir qué idioma usar. Pero en este momento simplemente no hay algo en la caja para que Powershell apunte.

4

Estoy de acuerdo, el DLR ha generado y seguirá generando mucha discusión. PowerShell no está dirigido para el DLR. No obstante, no sé por qué.

Alojamiento PowerShell en una aplicación .NET habilita la canalización de objetos de PowerShell en la solución de scripting, que creo que es una ventaja clave.

Hay ejemplos de calling PowerShell from IronPython.

También puede embed IronPython in PowerShell.

IronPython y IronRuby no tienen la misma integración en Windows que PowerShell. Sería genial si PowerShell fuera DLR habilitado de fábrica.

+0

Realmente no entiendo por qué querrías hacer cualquiera de esas cosas (llamar a PowerShell desde IronPython o incrustar IronPython en PowerShell). Vi una demo de IronRuby llamando a PowerShell, y aunque fue bastante genial, no pude ver mucho uso de ella. – alastairs

+0

Una razón por la que llamaría IronPython de PowerShell es usar rutinas complejas ya escritas en Python. De la misma manera lo haría usando .NET 4.0. Llamar a PoSh desde Py cuando quiero aprovechar funciones o puntos de integración del sistema que no puedo obtener fácilmente desde IP. –

1

Doug's answer coincide con algunos puntos clave, pero creo que la razón principal para utilizar PowerShell como motor de scripts en una aplicación .NET es el hecho de que PowerShell se está convirtiendo en la superficie de administración principal de las aplicaciones de Microsoft y disfrutará de una mayor familiaridad administradores de sistemas que mantienen su aplicación.

IronPython y IronRuby (así como cualquier otro lenguaje destinado al DLR) probablemente seguirán siendo más familiares para la audiencia de desarrolladores.

+0

Entonces, PowerShell sería la opción adecuada para una aplicación que tenga la funcionalidad de tipo SysAdmin, mientras que los lenguajes DLR serían mejores para ayudar a los usuarios avanzados en las aplicaciones para el usuario final. – alastairs

+0

Creo que PowerShell es más apropiado para una aplicación empresarial mantenida por administradores de sistemas o "usuarios avanzados". Las aplicaciones donde los desarrolladores harán más de las secuencias de comandos podrían ir de cualquier manera. –

+0

Eso no parece una buena razón para mí. VB y F # se dirigen a audiencias muy diferentes, pero usan el mismo tiempo de ejecución. Es de esperar que MS siga este ejemplo y no segmente artificialmente sus tecnologías. La respuesta de Dino nos da esperanzas :) –

0

Mi opinión sobre esto es que Microsoft debería haber desarrollado sus interfaces de gestión de Backoffice basadas en DLR, de modo que los lenguajes de primera calidad y ya probados como Python y Ruby en .NET (o cualquier otro lenguaje construido en DLR) pudieran ser apalancado, a diferencia de lo que creo que hicieron al reinventar la rueda con Powershell. Además de su uso para administrar aplicaciones de infraestructura, p.Intercambio, no tengo un incentivo para aprender Powershell cuando ya hay excelentes idiomas disponibles. Mi .02 centavos.

+2

Monad se anunció en 2003 y alcanzó v1.0 en 2006. El DLR se anunció en 2007 y alcanzó v1.0 en 2010. Contrariamente a la creencia popular, los equipos de IIS/Exchange/etc no tienen una máquina del tiempo. –

Cuestiones relacionadas