Programmering

Udforskning af dynamisk sprogkørsel i .Net

Statisk typede sprog er de sprog, hvor du bliver nødt til at angive typen af ​​et objekt på det tidspunkt, hvor du definerer det. Eksempler på statisk typede sprog inkluderer C #, VB og C ++. Tværtimod bestemmes typen af ​​et objekt i dynamisk typede sprog ved kørselstid - kun på det tidspunkt, hvor typen tildeles en værdi. Python, Ruby og JavaScript er eksempler på dynamisk typede sprog.

DLR (Dynamic Language Runtime) kører oven på CLR (Common Language Runtime) og tilføjer dynamik til det administrerede miljø i .Net - du kan bruge den til at implementere dynamiske funktioner i din applikation. I det væsentlige muliggør DLR interoperabilitet mellem statisk typede og dynamisk typede sprog inden for CLR-konteksten. Du kan bruge DLR til at dele biblioteker og objekter med dynamiske sprog. I denne artikel vil jeg præsentere en oversigt over miljøet Dynamic Language Runtime i Microsoft .Net.

Du kan få en open source-version af DLR fra Codeplex.

Hvad er DLR?

DLR er et resultat af Microsofts indsats for at få tjenester kørt oven på CLR og give interoperabilitet blandt statisk og dynamisk typede sprog. Understøttelse af Dynamic Language Runtime-miljøet fremmes af System.Dynamic namespace. MSDN siger: "Dynamic language runtime (DLR) er et runtime-miljø, der tilføjer et sæt tjenester til dynamiske sprog til den fælles sprog runtime (CLR). DLR gør det lettere at udvikle dynamiske sprog til at køre på. Net Framework og at tilføje dynamiske funktioner til statisk typede sprog. "

Hvordan er det nyttigt?

De tjenester, der leveres af DLR, inkluderer support til et system af dynamisk type, en standardhostingsmodel samt generering og forsendelse af dynamisk kode. Ved et hurtigt overblik inkluderer fordelene ved DLR:

  1. Understøtter dynamiske funktioner på statisk typede sprog. Med DLR på plads kan du oprette dynamisk indtastede objekter og bruge dem sammen med dine statisk typede objekter i din applikation.
  2. Muliggør problemfri portering af dynamiske sprog til .Net Framework. DLR giver dig mulighed for nemt at portere dynamiske sprog til .Net Framework. For at udnytte DLR-funktionerne er alt, hvad dit dynamiske sprog skal have, evnen til at producere ekspressionstræer og runtime-hjælperrutiner.
  3. Gør det lettere at dele biblioteker og objekter. DLR giver dig mulighed for at oprette objekter og biblioteker på et sprog, der skal tilgås fra et andet sprog.
  4. Giver support til dynamisk metode afsendelse og påkaldelse. DLR yder support til dynamisk metodeopkald og forsendelse ved hjælp af avanceret polymorf caching.

Delsystemet Dynamic Language Runtime

DLR-undersystemet består grundlæggende af de tre lag. Disse inkluderer følgende:

  1. Ekspressionstræer - DLR bruger ekspressionstræer til at repræsentere sprogsemantik.
  2. Opkaldswebcache - metodeopkald ved hjælp af dynamiske objekter gemmes i hukommelsen, så DLR kan bruge cachehistorikken til efterfølgende opkald til den samme metode for hurtigere afsendelse.
  3. Dynamisk objektinteroperabilitet - DLR muliggør interoperabilitet mellem statisk og dynamisk typede sprog. DLR inkluderer en samling af typer - klasser og grænseflader i System.Dynamic namespace. Du kan udnytte grænsefladen IDynamicMetaObjectProvider og klasserne DynamicMetaObject, DynamicObject og ExpandoObject for at skabe dynamiske rammer.

Sprogbindere

Sprogbinderne i DLR hjælper det med at tale med andre sprog. Så for hvert dynamisk sprog vil du typisk have et bindemiddel, der kan interagere med det. Som et eksempel er følgende de almindeligt anvendte bindemidler i DLR.

  • .Net Binder - dette bruges til at tale med .Net-objekter
  • JavaScript-bindemiddel - dette bruges til at tale med objekter oprettet i JavaScript-objekter
  • IronRuby Binder - gør det muligt for DLR at tale med IronRuby-objekter
  • IronPython Binder - hjælper DLR med at tale med IronPython-objekter
  • COM Binder - dette hjælper DLR med at tale med COM-objekter

Det "dynamiske" nøgleord

Du kan drage fordel af det dynamiske nøgleord for at få adgang til et dynamisk objekt. Det dynamiske nøgleord blev først introduceret i .Net Framework 4. Det gør det muligt for din applikation at samarbejde med dynamiske typer. Så du kan bruge det dynamiske nøgleord til at få adgang til et COM-objekt eller et objekt oprettet på dynamiske sprog som Python, Ruby eller JavaScript.

Her er et kodestykke, der illustrerer, hvordan det dynamiske søgeord kan bruges.

ved hjælp af System.Dynamic;

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

Vi har ikke længere brug for refleksion for at få adgang til COM-objekter - din kode er meget ren uden reflektionskoden, som du ellers ville have været nødt til at skrive uden det dynamiske nøgleord.

Foreslåede målinger

//msdn.microsoft.com/da-dk/bibliotek/dd233052(v=vs.110).aspx