Share via


Visão geral de Runtime de linguagem dinâmica

O dynamic language runtime (DLR) é um ambiente de runtime adiciona um conjunto de serviços para as linguagens dinâmicas para o common language runtime (CLR). O DLR torna mais fácil desenvolver linguagens dinâmicas para executar na.NET Framework e adicionar recursos dinâmicos para estaticamente linguagens com tipos.

Linguagens dinâmicas podem identificar o tipo de um objeto em tempo de execução, enquanto no digitado estaticamente linguagens como, por exemplo, C# e Visual Basic (quando você usa Option Explicit On) você deve especificar os tipos de objeto em tempo de design. Exemplos das linguagens dinâmicas são Lisp, Smalltalk, JavaScript, PHP, Ruby, Python, ColdFusion, Lua, Cobra e Groovy.

Maioria das linguagens dinâmicas fornecem as seguintes vantagens para os desenvolvedores:

  • A capacidade de usar um loop de feedback rápido (REPL ou leitura-avaliar-print loop). Isso permite que você insira várias instruções e executá-los para ver os resultados de imediatamente.

  • Suporte para o desenvolvimento de cima para baixo e de desenvolvimento mais tradicional de baixo para cima. Por exemplo, quando você usa uma abordagem de cima para baixo, você pode chamar funções que ainda não foram implementadas e adicionar implementações subjacentes quando precisar deles.

  • Refatoração de forma mais fácil e modificações, de código, porque você não tem que alterar as declarações de tipo estático por todo o código.

Linguagens dinâmicas tornam excelentes linguagens de script. Os clientes podem facilmente estender a aplicativos criados usando linguagens dinâmicas com funcionalidade e novos comandos. Linguagens dinâmicas são também usadas para criar sites e aproveita, mantendo os server farms, vários utilitários de desenvolver e executar transformações de dados de teste.

A finalidade do DLR é permitir que um sistema das linguagens dinâmicas para executar na.NET Framework e dar a eles.NET interoperabilidade. O DLR apresenta objetos dinâmicos C# e de Visual Basic em 2010 de Visual Studio para oferecer suporte a comportamento dinâmico nesses idiomas e ativar sua interoperação com linguagens dinâmicas.

O DLR também ajuda você a criar bibliotecas de suportam a operações dinâmicas. Por exemplo, se você tiver uma biblioteca que usa objetos XML ou o JavaScript Object Notation (JSON), os objetos podem aparecer como objetos dinâmicos para idiomas que usam o DLR. Isso permite que os usuários da biblioteca escrever código sintaticamente mais simples e mais natural para operar com objetos e acessar membros de objeto.

Por exemplo, você pode usar o seguinte código para incrementar um contador de XML no C#.

Scriptobj.SetProperty("Count", ((int)GetProperty("Count")) + 1);

Usando o DLR, você poderia usar em vez disso, o código a seguir para a mesma operação.

scriptobj.Count += 1;

Como o CLR, o DLR faz parte do.NET Framework e é fornecida com o.NET Framework e Visual Studio de pacotes de instalação. A versão de código-fonte aberto do DLR também está disponível para download de CodePlex site da Web.

Observação

A versão de código-fonte aberto do DLR tem todos os recursos do DLR que está incluído no Visual Studio e o.NET Framework.Ele também fornece suporte adicional para implementadores de linguagem.Para obter mais informações, consulte a documentação sobre o CodePlex site da Web.

Exemplos de idiomas desenvolvidos usando o DLR incluem o seguinte:

  • IronPython. Disponível como software de código aberto a partir de CodePlex site da Web.

  • IronRuby. Disponível como software de código aberto a partir de RubyForge site da Web.

Principais vantagens do DLR

O DLR fornece as seguintes vantagens.

Simplifica a portagem de linguagens dinâmicas para o.NET Framework

O DLR permite que os implementadores de linguagem evitar a criação de analisadores léxicos, analisadores, analisadores de semânticas, geradores de código e outras ferramentas que tradicionalmente tinham para criar a mesmos. Para usar o DLR, precisa de um idioma produzir árvores de expressão, que representam o nível de linguagem código em uma estrutura em forma de árvore, rotinas de auxiliar do runtime, e dinâmico opcional objetos que implementam o IDynamicMetaObjectProvider interface. O DLR e o.NET Framework automatizar muitas tarefas de geração de código e de análise de código. Isso permite que os implementadores de linguagem concentrar os recursos de idioma exclusivo.

Habilita recursos dinâmicos em linguagens de tipo

Existentes.NET Framework como, por exemplo, C# e Visual Basic pode criar objetos dinâmicos e usá-los juntamente com objetos digitados estaticamente. Por exemplo, C# e Visual Basic podem usar objetos dinâmicos para HTML, DOM Document Object Model (), e.NET reflexão.

Fornece os benefícios do futuro do DLR e.NET Framework

Idiomas implementados usando o DLR podem se beneficiar do DLR futura e.Aprimoramentos do NET Framework. Por exemplo, se o.NET Framework lança uma nova versão que tenha uma melhor coletor de lixo ou o tempo de carregamento de assembly mais rápido, idiomas implementados usando o DLR imediatamente obtém o mesmo benefício. Se o DLR adiciona otimizações como, por exemplo, compilação melhor, o desempenho também melhora para todos os idiomas implementados usando o DLR.

Permite o compartilhamento de bibliotecas e objetos

Os objetos e as bibliotecas implementadas em um idioma podem ser usadas por outras linguagens. O DLR também permite a interoperação entre linguagens estaticamente digitadas e dinâmicas. Por exemplo, C# pode declarar um objeto dinâmico que usa uma biblioteca que está escrita em uma linguagem dinâmica. Ao mesmo tempo, as linguagens dinâmicas podem usar bibliotecas da.NET Framework.

Fornece a invocação e despacho Fast dinâmico

O DLR fornece a rápida execução das operações dinâmicas, oferecendo suporte avançado de cache polimórfico. O DLR cria regras para as operações que usam objetos para as implementações de tempo de execução necessários de ligação e armazena em cache essas regras para evitar o esgotamento dos recursos computações de ligação durante execuções sucessivas do mesmo código nos mesmos tipos de objetos.

Arquitetura DLR

A ilustração a seguir mostra a arquitetura do runtime de linguagem dinâmica.

Arquitetura do DLR

Visão geral da arquitetura Dynamic Language Runtime

O DLR agrega um conjunto de serviços para o CLR para melhor suporte a linguagens dinâmicas. Esses serviços incluem o seguinte:

  • Árvores de expressão. O DLR usa árvores de expressão para representar a semântica de linguagem. Para essa finalidade, o DLR tem estendidos árvores de expressão do LINQ para incluir o fluxo de controle, a atribuição e a outros nós da linguagem de modelagem. Para obter mais informações, consulte Árvores de expressão (C# e Visual Basic).

  • Chame o cache do site. A o site de chamada dinâmico é um lugar no código onde você executar uma operação, como a + b ou a.b() em objetos dinâmicos. O DLR armazena em cache as características de a e b (geralmente, os tipos desses objetos) e informações sobre a operação. Se tal operação tiver sido executada anteriormente, o DLR recupera todas as informações necessárias do cache para despacho rápido.

  • Interoperabilidade de objeto dinâmico. O DLR fornece um conjunto de interfaces e classes que representam objetos dinâmicos e operações e podem ser usadas pelos implementadores de linguagem e autores de bibliotecas dinâmicas. Essas classes e interfaces incluem IDynamicMetaObjectProvider, DynamicMetaObject, DynamicObject, e ExpandoObject.

O DLR usa fichários em sites de chamada para se comunicar não apenas com o.NET Framework, mas com outros serviços e infra-estruturas, incluindo o Silverlight e com. Fichários encapsulam os semântica da linguagem e especificam como realizar operações em um site de chamada usando árvores de expressão. Isso permite dinâmico e digitado estaticamente idiomas que usam o DLR para compartilhar bibliotecas e obter acesso a todas as tecnologias que o DLR suporta.

A Documentação DLR

Para obter mais informações sobre como usar a versão de código-fonte aberto do DLR para adicionar o comportamento dinâmico para um idioma ou sobre como habilitar o uso de uma linguagem dinâmica com o.NET Framework, consulte a documentação sobre o CodePlex site da Web.

Consulte também

Referência

ExpandoObject

DynamicObject

Conceitos

Common Language Runtime (CLR)

Árvores de expressão (C# e Visual Basic)

Outros recursos

Demonstra Passo a passo: Criando e usando objetos dinâmicos (C# e Visual Basic)