Qual é a relação entre o Dynamic Language Runtime e o C # 4.0?

11

Digamos que eu quisesse criar um compilador / intérprete de linguagem dinâmica, talvez um intérprete de esquema, na plataforma .NET como ela existe hoje. Seria melhor usar o DLR ( Dynamic Language Runtime ) ou usar o C # 4.0 para implementar os recursos dinâmicos do meu idioma? Ou preciso dos dois?

Eu sei que houve outros trabalhos nessa área, em particular com o IronScheme e o IronPython . Ambos os idiomas usam o DLR; Acredito que o IronPython usa a versão mais atual do DLR (que tem cerca de um ano), enquanto o IronScheme usa um fork pesado e modificado de uma versão anterior do DLR. Mas o C # 4.0 não estava disponível quando esses compiladores foram criados.

Vi o trabalho de Rob Conery com o Massive, usando os recursos dinâmicos do C # 4.0; é bastante impressionante. Mas o C # suportaria o esforço em grande escala de um compilador / intérprete de linguagem dinâmica? Existem recursos no DLR que estão faltando no C # ou o DLR foi essencialmente compactado no C # 4.0? Faltaria algum recurso importante do DLR se eu apenas usasse o C # 4.0 exclusivamente?

Robert Harvey
fonte
Acredito que os recursos dinâmicos do .NET 4.0 também sejam baseados no DLR.
Dave Nay
@ Dave: Eu ficaria satisfeito com um link atual e com autoridade para um artigo que descreve detalhadamente o relacionamento entre o tempo de execução do .NET 4.0 e o DLR. Isso me daria uma boa idéia se o sistema de tipo dinâmico no C # 4.0 fosse robusto o suficiente e se há algum recurso crítico no DLR que foi omitido no tempo de execução do .NET 4.0. Encontrei alguns artigos, mas todos foram escritos no dia em que o DLR estava tomando forma, e muitos deles são especulativos.
Robert Harvey

Respostas:

3

Este é o artigo que eu lembro de ler. msdn.microsoft.com/en-us/magazine/gg598922.aspx

Posteriormente, o DLR também foi incluído no .NET Framework 4 para oferecer suporte a recursos dinâmicos em C # e Visual Basic. Se você precisar apenas da palavra-chave dinâmica em C # 4, poderá simplesmente usar o .NET Framework e, na maioria dos casos, ele lidará com todas as interações com o DLR por conta própria. Mas se você deseja implementar ou portar uma nova linguagem dinâmica para o .NET, pode se beneficiar das classes auxiliares adicionais no projeto de código aberto, que possui mais recursos e serviços para implementadores de linguagem.

Dave Nay
fonte
3

De: jimmysch

Robert,

Os fatos: o IronRuby e o IronPython usam o DLR; na verdade, a maioria dos recursos do DLR é derivada da implementação anterior do IronPython. Não estou familiarizado com o uso da versão do DLR IronScheme. Uma parte do DLR (Microsoft.Scripting.Core.dll) foi enviada no .NET 4.0 no System.Core.dll e essa parte é o que o C # 4.0 usa para oferecer suporte a palavras-chave "dinâmicas", e é por isso que esse assembly não é presente nas compilações do .NET 4.0 do DLR.

O restante da base de código do DLR (Microsoft.Scripting.dll, Microsoft.Dynamic.dll são os mais importantes) está disponível para download neste projeto CodePlex ou no projeto IronLanguages ​​GitHub. Eles fornecem as APIs para consumidores e produtores de linguagens de hospedagem, enquanto as APIs do .NET 4.0 são realmente para envio dinâmico de métodos.

Para escrever um compilador de linguagem dinâmica para o .NET 4.0, eu usaria C # como a linguagem de implementação e o DLR como uma biblioteca para simplificar tarefas comuns do compilador. Para um exemplo simples de linguagem no DLR, consulte Sympl.

~ Jimmy

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

Robert Harvey
fonte