Programmering

Utforske Dynamic Language Runtime i .Net

Statisk typede språk er de språkene du trenger å spesifisere typen objekt på det tidspunktet du definerer det. Eksempler på statisk typede språk inkluderer C #, VB og C ++. Tvert imot, i dynamisk typede språk bestemmes typen av et objekt ved kjøretid - bare på det tidspunktet da en verdi tildeles typen. Python, Ruby og JavaScript er eksempler på dynamisk skrevne språk.

DLR (Dynamic Language Runtime) kjører på toppen av CLR (Common Language Runtime) og gir dynamikk til det administrerte miljøet til .Net - du kan bruke den til å implementere dynamiske funksjoner i applikasjonen din. I hovedsak muliggjør DLR interoperabilitet mellom statisk typede og dynamisk typede språk innenfor konteksten til CLR. Du kan bruke DLR til å dele biblioteker og objekter med dynamiske språk. I denne artikkelen vil jeg presentere en oversikt over Dynamic Language Runtime-miljøet i Microsoft .Net.

Du kan få en åpen kildekodeversjon av DLR fra Codeplex.

Hva er DLR?

DLR er et resultat av Microsofts innsats for å få tjenester til å kjøre på toppen av CLR og gi interoperabilitet mellom statisk og dynamisk typte språk. Støtte for Dynamic Language Runtime-miljøet tilrettelegges av System.Dynamic namespace. MSDN sier: "Dynamic language runtime (DLR) er et kjøretidsmiljø som legger til et sett med tjenester for dynamiske språk til den vanlige språketid (CLR). DLR gjør det lettere å utvikle dynamiske språk som skal kjøres på. Net Framework og for å legge til dynamiske funksjoner til statisk skrevne språk. "

Hvordan er det nyttig?

Tjenestene som tilbys av DLR inkluderer støtte for et system av dynamisk type, en standard hosting-modell samt generering og forsendelse av dynamisk kode. Med et raskt blikk inkluderer fordelene DLR inkluderer:

  1. Støtter dynamiske funksjoner på statisk skrevne språk. Med DLR på plass kan du opprette dynamisk typede objekter og bruke dem sammen med de statisk typede objektene i applikasjonen.
  2. Muliggjør sømløs portering av dynamiske språk til .Net Framework. DLR lar deg enkelt portere dynamiske språk til .Net Framework. For å utnytte DLR-funksjonene, er alt det dynamiske språket ditt trenger å gjøre, muligheten til å produsere uttrykkstrær og kjøretidshjelperrutiner.
  3. Tilrettelegger for deling av biblioteker og objekter. DLR lar deg lage objekter og biblioteker på ett språk som du kan få tilgang til fra et annet språk.
  4. Gir støtte for utsendelse og påkallelse av dynamiske metoder. DLR gir støtte for dynamisk metodeinnkalling og forsendelse ved hjelp av avansert polymorf caching.

Dynamic Language Runtime Subsystem

DLR-delsystemet består i utgangspunktet av de tre lagene. Disse inkluderer følgende:

  1. Uttrykkstrær - DLR bruker uttrykkstrær for å representere språksemantikk.
  2. Cache-anropssted - metodeanrop ved hjelp av dynamiske objekter lagres i minnet, slik at DLR kan bruke hurtigbufferhistorikken for påfølgende samtaler til samme metode for raskere sending.
  3. Dynamisk objektets interoperabilitet - DLR muliggjør interoperabilitet mellom statisk og dynamisk typede språk. DLR inkluderer en samling av typer - klasser og grensesnitt i System.Dynamic namespace. Du kan bruke IDynamicMetaObjectProvider-grensesnittet og DynamicMetaObject, DynamicObject og ExpandoObject-klassene for å lage dynamiske rammer.

Språkbindere

Språkpermene i DLR hjelper det til å snakke med andre språk. Så for hvert dynamiske språk vil du vanligvis ha et bindemiddel som kan samhandle med det. Som et eksempel er følgende de vanlig brukte bindemidlene i DLR.

  • .Net Binder - dette brukes til å snakke med .Net-objekter
  • JavaScript Binder - dette brukes til å snakke med objekter opprettet i JavaScript-objekter
  • IronRuby Binder - gjør det mulig for DLR å snakke med IronRuby-objekter
  • IronPython Binder - hjelper DLR til å snakke med IronPython-objekter
  • COM Binder - dette hjelper DLR til å snakke med COM-objekter

Det "dynamiske" nøkkelordet

Du kan dra nytte av det dynamiske søkeordet for å få tilgang til et dynamisk objekt. Det dynamiske nøkkelordet ble først introdusert i .Net Framework 4. Det gjør at applikasjonen din kan samarbeide med dynamiske typer. Så du kan bruke det dynamiske nøkkelordet for å få tilgang til et COM-objekt eller et objekt opprettet på dynamiske språk som Python, Ruby eller JavaScript.

Her er et kodebit som illustrerer hvordan det dynamiske søkeordet kan brukes.

ved hjelp av System.Dynamic;

dynamisk excelObj = System.Runtime.InteropServices.Marshal.GetActiveObject ("Excel.Application");

Vi trenger ikke lenger bruke refleksjon for å få tilgang til COM-objekter - koden din er mye ren uten refleksjonskoden som du ellers ville ha hatt til å skrive sans det dynamiske nøkkelordet.

Foreslåtte målinger

//msdn.microsoft.com/en-us/library/dd233052(v=vs.110).aspx