¿Cuál es la relación entre Dynamic Language Runtime y C # 4.0?

11

Digamos que quería crear un compilador / intérprete de lenguaje dinámico, tal vez un intérprete de Scheme, en la plataforma .NET tal como existe hoy. ¿Sería mejor usar Dynamic Language Runtime (DLR) o C # 4.0 para implementar las características dinámicas de mi lenguaje? ¿O necesito ambos?

Sé que se ha realizado otro trabajo en esta área, en particular con IronScheme y IronPython . Ambos idiomas usan el DLR; Creo que IronPython usa la versión más actual del DLR (que tiene aproximadamente un año), mientras que IronScheme usa una bifurcación temprana y muy modificada de una versión temprana del DLR. Pero C # 4.0 no estaba disponible cuando se crearon estos compiladores.

He visto el trabajo de Rob Conery con Massive, usando las características dinámicas de C # 4.0; Es bastante impresionante. ¿Pero C # resistiría el esfuerzo a gran escala de un compilador / intérprete de lenguaje dinámico? ¿Hay características en el DLR que faltan en C #, o el DLR esencialmente se incluyó en C # 4.0? ¿Me faltarían algunas características importantes del DLR si solo usara C # 4.0 exclusivamente?

Robert Harvey
fuente
Creo que las características dinámicas de .Net 4.0 también se basan en el DLR.
Dave Nay
@Dave: estaría satisfecho con un enlace actual y autorizado a un artículo que describe en detalle la relación entre el tiempo de ejecución de .NET 4.0 y el DLR. Esto me daría una buena idea si el sistema de tipo dinámico en C # 4.0 es lo suficientemente robusto y si hay algunas características críticas en el DLR que se omitieron del tiempo de ejecución de .NET 4.0. Encontré algunos artículos, pero todos fueron escritos en el día en que el DLR estaba tomando forma, y ​​muchos de ellos son especulativos.
Robert Harvey

Respuestas:

3

Este es el artículo que recuerdo haber leído. msdn.microsoft.com/en-us/magazine/gg598922.aspx

Más tarde, el DLR también se incluyó en .NET Framework 4 para admitir características dinámicas en C # y Visual Basic. Si solo necesita la palabra clave dinámica en C # 4, simplemente puede usar .NET Framework y, en la mayoría de los casos, manejará todas las interacciones con el DLR por sí solo. Pero si desea implementar o portar un nuevo lenguaje dinámico a .NET, puede beneficiarse de las clases auxiliares adicionales en el proyecto de código abierto, que tiene más características y servicios para los implementadores de lenguaje.

Dave Nay
fuente
3

De: jimmysch

Robert

Los hechos: IronRuby y IronPython usan el DLR, de hecho, la mayoría de las características del DLR se derivan de la implementación anterior de IronPython. No estoy familiarizado con la versión del DLR IronScheme. Una parte del DLR (Microsoft.Scripting.Core.dll) se envió en .NET 4.0 en System.Core.dll, y esa parte es lo que C # 4.0 usa para su compatibilidad con palabras clave "dinámicas", por lo que ese ensamblado no es presente en las compilaciones .NET 4.0 del DLR.

El resto de la base de código del DLR (Microsoft.Scripting.dll, Microsoft.Dynamic.dll son los más importantes) están disponibles para descargar desde este proyecto CodePlex o el proyecto IronLanguages ​​GitHub. Proporcionan las API para consumidores y productores de lenguajes de alojamiento, mientras que las API en .NET 4.0 son para hacer despachos dinámicos de métodos.

Para escribir un compilador de lenguaje dinámico para .NET 4.0, usaría C # como lenguaje de implementación y usaría el DLR como biblioteca para simplificar las tareas comunes del compilador. Para un lenguaje de ejemplo simple en el DLR, mire Sympl.

~ Jimmy

http://dlr.codeplex.com/discussions/268746#post656778

Robert Harvey
fuente