El Language Runtime dinámico ( DLR ) de Microsoft se ejecuta por encima del Common Language Runtime (CLR) y proporciona lenguaje de programación de servicios para lenguajes dinámicos . Estos servicios incluyen:
- Un sistema de tipo dinámico , para ser compartido por todos los idiomas que utilizan los servicios DLR.
- Despacho de método dinámico
- Generación de código dinámico
- API de hospedaje
Autor (es) original (es) | Equipo de Microsoft Dynamic Language Runtime |
---|---|
Desarrollador (es) | Fundación .NET |
Versión inicial | 16 de abril de 2010 |
Lanzamiento estable | 1.3.0 / 16 de noviembre de 2020 [1] |
Repositorio | github |
Escrito en | C# |
Sistema operativo | Windows , macOS , Linux ( Debian , Ubuntu ) |
Plataforma | Infraestructura de lenguaje común |
Tipo | Plataforma del sistema |
Licencia | Licencia Apache 2.0 |
Sitio web | docs |
El DLR se utiliza para implementar lenguajes dinámicos en .NET Framework , incluidos los proyectos IronPython e IronRuby .
Debido a que las implementaciones de lenguaje dinámico comparten un sistema subyacente común, debería ser más fácil para ellas interactuar entre sí. Por ejemplo, debería ser posible utilizar bibliotecas de cualquier lenguaje dinámico en cualquier otro lenguaje dinámico. Además, la API de alojamiento permite la interoperabilidad con lenguajes CLI de tipado estático como C # y Visual Basic .NET .
Historia
El proyecto Dynamic Language Runtime de Microsoft fue anunciado por Microsoft en MIX 2007. [2] [3]
Microsoft envió .NET DLR 0.9 beta en noviembre de 2008, [4] y la versión 0.9 final en diciembre de 2008. La versión 1.0 se envió en abril de 2010. En julio de 2010, Microsoft cambió la licencia de DLR de Microsoft Public License a Apache License 2.0 . [5] Con el lanzamiento de .NET 4 , también en abril de 2010, DLR se incorporó al propio .NET Framework. [6]
El proyecto DLR de código abierto alojado en GitHub tiene algunas características adicionales para los implementadores del lenguaje. Después del lanzamiento de julio de 2010, hubo poca actividad en el proyecto durante algunos años. Esto fue interpretado por un desarrollador de Microsoft que trabajó en IronRuby como una falta de compromiso de Microsoft con los lenguajes dinámicos en .NET Framework. [7] [8] Sin embargo, ha habido una actividad regular desde 2016/17, lo que ha llevado a una serie de mejoras y actualizaciones.
Idiomas admitidos
Los servicios DLR se utilizan actualmente en la versión de desarrollo de IronRuby , una implementación .NET del lenguaje Ruby , y para IronPython . [2]
En 2007, Microsoft planeó utilizar el DLR para el próximo Visual Basic 2010 (VB 10.0) y Managed JScript ( ECMAScript 3.0). [9] [10] [11] [12] Sin embargo, a partir de agosto de 2009, Microsoft no tiene más planes de implementar Managed JScript en el DLR. [13] Al igual que C # , Visual Basic puede acceder a objetos desde lenguajes dinámicos creados en DLR como IronPython e IronRuby . [14] [15]
PowerShell 3.0, lanzado en Windows 8 , se actualizó para usar DLR. [dieciséis]
IronScheme , una implementación de Scheme , [17] estaba planeando construir sobre el DLR. Esta idea se abandonó porque la rama DLR utilizada por el proyecto se desincronizó con el tronco y también porque (según el coordinador del proyecto) la versión actual del DLR en ese momento no podía soportar la mayoría de los requisitos de Scheme. [18]
Arquitectura
Dynamic Language Runtime se basa en la idea de que es posible implementar especificidades del lenguaje sobre un árbol de sintaxis abstracta genérico independiente del lenguaje , cuyos nodos corresponden a una funcionalidad específica que es común a muchos lenguajes dinámicos. [19] Esta arquitectura está respaldada por la idea de que el número de construcciones de lenguaje elemental que tendrían que implementarse en la pila genérica debería ser inherentemente limitado. [20] El DLR genera dinámicamente código correspondiente a la funcionalidad expresada por estos nodos. El compilador de cualquier lenguaje dinámico implementado sobre DLR tiene que generar árboles abstractos DLR y entregarlos a las bibliotecas DLR.
El DLR proporciona DynamicSite
objetos actualizados dinámicamente que almacenan en caché la tarea de vincular métodos a objetos. Dado que el tipo de un objeto, así como los miembros que contiene, en lenguajes dinámicos pueden cambiar durante la vida de un programa, una invocación de método debe verificar la lista de métodos para ver si la invocación es válida. DynamicSite
los objetos representan y almacenan en caché el estado del objeto y sus métodos; cualquier actualización del objeto también se refleja en los DynamicSite
objetos. DLR enruta todas las invocaciones de métodos a través de los DynamicSite
objetos, que luego realiza una búsqueda rápida y enlaza el método con la implementación real. [21]
A diferencia de otros esfuerzos como la máquina virtual Parrot (sin dependencias) o la máquina Da Vinci (construida sobre la JVM de Java mediante la adición de nuevos códigos de bytes en el conjunto de instrucciones de la JVM ), el DLR se construye sobre el Common Language Runtime existente , el . NET Framework máquina virtual. [22]
Ver también
- Da Vinci Machine : un proyecto que comenzó en Sun Microsystems y que brindó soporte para lenguajes dinámicos a la plataforma Java en el nivel de la máquina virtual Java (JVM).
- Máquina virtual Parrot
Referencias
- ^ "Lanzamientos" . IronLanguages / dlr. GitHub . Consultado el 30 de noviembre de 2020 .
- ^ a b Hugunin, Jim. "Un tiempo de ejecución de lenguaje dinámico (DLR)" . Consultado el 21 de junio de 2007 .
A corto plazo, nuestro enfoque está en utilizar una pequeña cantidad de lenguajes para impulsar la primera ola de desarrollo de DLR, donde podemos trabajar de cerca y cara a cara con los desarrolladores para solucionar los peores problemas en el diseño de DLR. Después de esta fase inicial, queremos llegar a la comunidad lingüística más amplia.
- ^ Viehland, Dino (15 de enero de 2008). "Hoja de ruta para IronPython 2.0" . Archivado desde el original el 6 de septiembre de 2008 . Consultado el 9 de febrero de 2008 .
Realmente no tenemos un documento como este, pero el objetivo general es enviar IronPython 2.0 para fin de año. Para el DLR en sí, el plan es enviar una v1.0 aproximadamente al mismo tiempo que IronPython 2.0.
- ^ http://www.codeplex.com/dlr
- ^ http://dlr.codeplex.com/license
- ^ https://msdn.microsoft.com/en-us/library/dd233052.aspx
- ^ "Microsoft Tires of IronRuby; Jimmy Schementi salta barco" . rubyinside.com. 2010-08-07 . Consultado el 26 de febrero de 2012 .
Hace un año, el equipo se redujo a la mitad y nuestra agilidad se vio muy limitada. [..] En general, veo una seria falta de compromiso con IronRuby y los lenguajes dinámicos en .NET en general.
- ^ "Los lenguajes dinámicos de Microsoft están muriendo" . i-programmer.info. 2010-08-10 . Consultado el 26 de febrero de 2012 .
Sin el empujón final para que los lenguajes funcionen bajo Visual Studio e integrados con el diseñador, ambos lenguajes de Iron probablemente estén muertos, y Microsoft parece haber perdido la voluntad de hacerlos un éxito.
- ^ "Anunciado Managed JScript" . Consultado el 4 de mayo de 2007 .
- ^ "¿Qué diablos es" VBx "?" . 2007-05-01 . Consultado el 12 de agosto de 2009 .
Con el nuevo DLR, tenemos soporte para IronPython, IronRuby, Javascript y la nueva compilación dinámica de VBx
- ^ "Poniendo Mix, Silverlight, CoreCLR y DLR en contexto" . 2007-05-01 . Consultado el 12 de agosto de 2008 .
- ^ "Presentación de Visual Basic 10" . infoq.com. 2007-05-04 . Consultado el 12 de agosto de 2009 .
VB 10 aprovecha una función de Silverlight llamada Dynamic Language Runtime o DLR
- ^ Chiles, Bill (1 de junio de 2009). "¿Futuro de Managed JScript (IronJScript)?" . Consultado el 12 de agosto de 2009 .
El DLR JScript fue experimental para informar el diseño del DLR (árboles de expresión, interoperabilidad, sitios de llamadas, alojamiento, etc.). El JS que lanzamos con futuros asp y el SDK dinámico de Silverlight se volvieron muy antiguos e inservibles a medida que el DLR continuaba evolucionando para su lanzamiento en CLR 4.0. Desafortunadamente, no hay planes en este momento para desarrollar y lanzar un JScript compatible con DLR.
- ^ "Novedades de Visual Basic 2010" . Microsoft . 2009 . Consultado el 12 de agosto de 2009 .
Visual Basic se une a objetos de lenguajes dinámicos como IronPython y IronRuby
- ^ https://msdn.microsoft.com/en-us/library/ee461504.aspx#Y480
- ^ "Copia archivada" . Archivado desde el original el 28 de abril de 2012 . Consultado el 30 de marzo de 2012 .CS1 maint: copia archivada como título ( enlace )
- ^ http://www.codeplex.com/IronScheme
- ^ "¿Hay alguna muestra de Silverlight?" . 2009-05-11 . Consultado el 26 de julio de 2009 .
Desafortunadamente, mi rama DLR no está sincronizada con la de Silverlight. Solo lo pensé, quizás no necesito el DLR perse, lo investigaré. El problema es que el DLR tal como está, no es lo suficientemente bueno para soportar la mayoría de los requisitos del Esquema.
- ^ Hugunin, Jim (15 de mayo de 2007). "Árboles DLR (parte 1)" . Consultado el 23 de febrero de 2008 .
El truco de implementación clave en el DLR es usar este tipo de árboles para pasar el código como datos y mantener el código en una forma fácilmente analizable y mutable el mayor tiempo posible.
- ^ Nutter, Charles (28 de enero de 2008). "Lang.NET 2008: Pensamientos del día 1" . Consultado el 23 de febrero de 2008 .
La idea es que hay una curva asintótica que se aplana rápidamente en el número de nodos del árbol de expresión necesarios para implementar cada nuevo lenguaje. Aún está por verse si ese es el caso.
- ^ Bill Chiles (octubre de 2007). "CLR de adentro hacia afuera: IronPython y el Dynamic Language Runtime" . Revista MSDN . Consultado el 10 de agosto de 2007 .
- ^ Rose, John (2 de febrero de 2008). "¡Bravo por el tiempo de ejecución dinámico!" . Archivado desde el original el 6 de febrero de 2008 . Consultado el 23 de febrero de 2008 .
Es interesante observar las diferencias entre las extensiones CLR y JVM. Funcionan completamente por encima del nivel de CLR sin mejorarlo significativamente, mientras que desarrollamos la JVM y las bibliotecas al mismo tiempo.
- "MIX 07 - ¡Silverlight brilla más!" . Consultado el 30 de abril de 2007 .
- "Presentación en video de MIX 07 - DEV02 - ¡Solo pégalo! Ruby y el DLR en Silverlight" . Archivado desde el original el 8 de mayo de 2007 . Consultado el 4 de mayo de 2007 .
- "Dinámico de pensamiento de Jim Hugunin - un tiempo de ejecución de lenguaje dinámico (DLR)" . Consultado el 6 de febrero de 2008 .
- "Detalles del paquete fuente dlr-languages en squeeze - DLR en Debian" . Consultado el 6 de julio de 2010 .
- "Detalles del paquete fuente dlr-languages en lucid - DLR en Ubuntu" . Consultado el 6 de julio de 2010 .
- "El buey de Pratap Lakshman el sistema de tipo JScript administrado" . Archivado desde el original el 8 de diciembre de 2013 . Consultado el 28 de enero de 2008 .
enlaces externos
- Descripción general de Dynamic Language Runtime
- dlr en GitHub