Istraživanje dinamičkog izvođenja jezika u .Net-u

Statički tipizirani jezici su oni u kojima biste trebali navesti vrstu objekta u trenutku kada ga definirate. Primjeri statički upisanih jezika uključuju C #, VB i C ++. Suprotno tome, u dinamički tipkanim jezicima, tip objekta određuje se za vrijeme izvođenja - samo u vrijeme kada je vrsti dodijeljena vrijednost. Python, Ruby i JavaScript primjeri su dinamički upisanih jezika.

DLR (Dynamic Language Runtime) radi na vrhu CLR (Common Language Runtime) i dodaje dinamičnost upravljanom okruženju .Net - možete ga koristiti za implementaciju dinamičkih značajki u vašoj aplikaciji. U osnovi, DLR omogućuje interoperabilnost između statički i dinamički tipkanih jezika unutar konteksta CLR-a. DLR možete koristiti za dijeljenje knjižnica i objekata s dinamičkim jezicima. U ovom članku predstavit ću pregled okruženja dinamičkog izvođenja jezika u Microsoftu .Net.

Otvorenu verziju DLR-a možete dobiti od Codeplexa.

Što je DLR?

DLR je rezultat Microsoftovih napora da se usluge pokreću iznad CLR-a i pružaju interoperabilnost između statički i dinamički upisanih jezika. Podršku okruženju Dynamic Language Runtime olakšava imenski prostor System.Dynamic. MSDN navodi: "Dinamičko izvršavanje jezika (DLR) je runtime okruženje koje dodaje skup usluga za dinamičke jezike zajedničkom izvršavanju jezika (CLR). DLR olakšava razvoj dinamičkih jezika za pokretanje na .Net Framework i dodati dinamičke značajke statički upisanim jezicima. "

Kako je korisno?

Usluge koje pruža DLR uključuju podršku za sustav dinamičkog tipa, standardni model hostinga kao i dinamičko generiranje i slanje koda. Na brzinu, prednosti DLR-a uključuju:

  1. Pruža podršku za dinamičke značajke na statički otkucanim jezicima. S postavljenim DLR-om možete stvarati dinamički tipkane objekte i koristiti ih zajedno sa statički upisanim objektima u svojoj aplikaciji.
  2. Omogućuje neometano prijenos dinamičkih jezika na .Net Framework. DLR vam omogućuje jednostavno prenošenje dinamičkih jezika u .Net Framework. Da biste iskoristili DLR značajke, sve što vaš dinamični jezik treba imati je sposobnost stvaranja stabala izraza i runtime pomoćnih rutina.
  3. Olakšava dijeljenje knjižnica i predmeta. DLR vam omogućuje stvaranje objekata i knjižnica na jednom jeziku kojima se može pristupiti s drugog jezika.
  4. Pruža podršku za slanje i pozivanje dinamičke metode. DLR pruža podršku za pozivanje i slanje dinamičke metode pomoću naprednog polimorfnog predmemoriranja.

Podsustav dinamičkog izvođenja jezika

Podsustav DLR u osnovi se sastoji od tri sloja. To uključuje sljedeće:

  1. Stabla izraza - DLR koristi stabla izraza za predstavljanje semantike jezika.
  2. Predmemoriranje web mjesta poziva - pozivi metode koji koriste dinamičke objekte predmemoriraju se u memoriju tako da DLR može koristiti povijest predmemorije za sljedeće pozive istoj metodi radi bržeg slanja.
  3. Dinamička interoperabilnost objekta - DLR omogućuje interoperabilnost između statički i dinamički upisanih jezika. DLR uključuje zbirku tipova - klasa i sučelja u prostoru imena System.Dynamic. Možete koristiti sučelje IDynamicMetaObjectProvider i klase DynamicMetaObject, DynamicObject i ExpandoObject za stvaranje dinamičkih okvira.

Vezivi jezika

Vezivi jezika u DLR-u pomažu mu da razgovara s drugim jezicima. Dakle, za svaki dinamični jezik obično biste imali vezivo koje može komunicirati s njim. Kao primjer slijede često korištena veziva u DLR-u.

  • .Net Binder - koristi se za razgovor s .Net objektima
  • JavaScript Binder - koristi se za razgovor s objektima stvorenim u JavaScript objektima
  • IronRuby Binder - omogućuje DLR-u da razgovara s IronRuby objektima
  • IronPython Binder - pomaže DLR-u da razgovara s objektima IronPython
  • COM Binder - ovo pomaže DLR-u da razgovara s COM objektima

Ključna riječ "dinamična"

Dinamičnu ključnu riječ možete iskoristiti za pristup dinamičkom objektu. Dinamična ključna riječ prvi je put predstavljena u .Net Framework 4. Omogućuje vašoj aplikaciji interakciju s dinamičkim tipovima. Dakle, možete koristiti dinamičku ključnu riječ za pristup COM objektu ili objektu stvorenom u dinamičkim jezicima kao što su Python, Ruby ili JavaScript.

Evo isječka koda koji ilustrira kako se dinamička ključna riječ može koristiti.

pomoću System.Dynamic;

dinamički excelObj = System.Runtime.InteropServices.Marshal.GetActiveObject ("Excel.Application");

Više ne trebamo koristiti refleksiju za pristup COM objektima - vaš je kod puno čistiji bez refleksionog koda koji biste inače morali napisati bez dinamičke ključne riječi.

Predložena čitanja

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