Tiempo de ejecución de lenguaje dinámico - Dynamic Language Runtime

Tiempo de ejecución de lenguaje dinámico (DLR)
Autor (es) original (es) Equipo de Microsoft Dynamic Language Runtime
Desarrollador (es) Fundación .NET
Versión inicial 16 de abril de 2010 ; Hace 11 años ( 16 de abril de 2010 )
Lanzamiento estable
1.3.0 / 16 de noviembre de 2020 ; hace 11 meses ( 2020-11-16 )
Repositorio github .com / IronLanguages / dlr
Escrito en C#
Sistema operativo Windows , macOS , Linux ( Debian , Ubuntu )
Plataforma Infraestructura de lenguaje común
Escribe Plataforma del sistema
Licencia Licencia Apache 2.0
Sitio web docs .microsoft .com / en-us / dotnet / framework / reflect-and-codedom / dynamic-language-runtime-overview

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:

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.

Microsoft envió .NET DLR 0.9 beta en noviembre de 2008 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 . Con el lanzamiento de .NET 4 , también en abril de 2010, DLR se incorporó al propio .NET Framework.

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. 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 .

En 2007, Microsoft planeó utilizar el DLR para el próximo Visual Basic 2010 (VB 10.0) y Managed JScript ( ECMAScript 3.0). Sin embargo, a partir de agosto de 2009, Microsoft no tiene más planes de implementar Managed JScript en el DLR. Al igual que C # , Visual Basic puede acceder a objetos desde lenguajes dinámicos creados en DLR como IronPython y IronRuby .

PowerShell 3.0, lanzado en Windows 8 , se actualizó para usar DLR.

IronScheme , una implementación de Scheme , planeaba basarse en el DLR. Esta idea se abandonó porque la rama DLR utilizada por el proyecto se desincronizó con la troncal 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.

Arquitectura

Dynamic Language Runtime se basa en la idea de que es posible implementar especificidades de 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. Esta arquitectura está respaldada por la idea de que la cantidad de construcciones de lenguaje elemental que tendrían que implementarse en la pila genérica debería ser inherentemente limitada. 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 DynamicSiteobjetos 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 los 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. DynamicSitelos 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 DynamicSiteobjetos. DLR enruta todas las invocaciones de métodos a través de los DynamicSiteobjetos, que luego realiza una búsqueda rápida y enlaza el método con la implementación real.

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 al agregar 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.

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

enlaces externos