Staticky písané jazyky sú jazyky, v ktorých by ste v čase definovania museli špecifikovať typ objektu. Medzi príklady staticky napísaných jazykov patria C #, VB a C ++. Naopak, v dynamicky písaných jazykoch sa typ objektu určuje za behu - iba v čase, keď je danému typu priradená hodnota. Príklady dynamicky písaných jazykov sú Python, Ruby a JavaScript.
DLR (Dynamic Language Runtime) beží nad CLR (Common Language Runtime) a dodáva dynamiku riadenému prostrediu .Net - môžete ho použiť na implementáciu dynamických funkcií vo vašej aplikácii. DLR v podstate umožňuje interoperabilitu medzi jazykmi so statickým a dynamickým typom v kontexte CLR. DLR môžete použiť na zdieľanie knižníc a objektov s dynamickými jazykmi. V tomto článku by som predstavil prehľad prostredia Dynamic Language Runtime v Microsoft .Net.
Verziu DLR s otvoreným zdrojovým kódom môžete získať od spoločnosti Codeplex.
Čo je DLR?
DLR je výsledkom snahy spoločnosti Microsoft dosiahnuť, aby služby bežali nad CLR a poskytovali interoperabilitu medzi staticky a dynamicky písanými jazykmi. Podporu pre prostredie Dynamic Language Runtime uľahčuje priestor názvov System.Dynamic. MSDN uvádza: "Dynamický runtime jazyk (DLR) je runtime prostredie, ktoré pridáva sadu služieb pre dynamické jazyky do spoločného jazykového modulu runtime (CLR). DLR uľahčuje vývoj dynamických jazykov pre spustenie v .Net Framework a pridať dynamické funkcie k staticky napísaným jazykom. “
Ako je to užitočné?
Medzi služby poskytované DLR patrí podpora systému dynamického typu, štandardného modelu hostingu, ako aj generovanie a odosielanie dynamického kódu. Medzi výhody, ktoré poskytuje DLR, patria:
- Poskytuje podporu pre dynamické funkcie v staticky napísaných jazykoch. Keď je DLR na mieste, môžete vytvárať dynamicky písané objekty a používať ich spolu so svojimi staticky napísanými objektmi vo svojej aplikácii.
- Umožňuje bezproblémové prenášanie dynamických jazykov do rozhrania .Net Framework. DLR umožňuje ľahký prenos dynamických jazykov do .Net Framework. Aby ste mohli využívať funkcie DLR, musíte mať všetko, čo musíte mať v dynamickom jazyku, schopnosť vytvárať výrazové stromy a pomocné rutiny za behu.
- Uľahčuje zdieľanie knižníc a objektov. DLR umožňuje vytvárať objekty a knižnice v jednom jazyku, ku ktorým máte prístup z iného jazyka.
- Poskytuje podporu pre odosielanie a vyvolanie dynamických metód. DLR poskytuje podporu pre vyvolanie a odoslanie dynamických metód pomocou pokročilého polymorfného ukladania do pamäte cache.
Subsystém dynamického jazyka za behu
Subsystém DLR je v zásade zložený z troch vrstiev. Medzi ne patria:
- Stromy výrazov - DLR využíva stromy výrazov na vyjadrenie sémantiky jazyka.
- Ukladanie do pamäte cache stránok - volania metód pomocou dynamických objektov sa ukladajú do pamäte, takže DLR môže použiť históriu pamäte cache pre následné volania tej istej metódy na rýchlejšie odoslanie.
- Interoperabilita dynamických objektov - DLR umožňuje interoperabilitu medzi staticky a dynamicky písanými jazykmi. DLR obsahuje kolekciu typov - tried a rozhraní v mennom priestore System.Dynamic. Na vytvorenie dynamických rámcov môžete využiť rozhranie IDynamicMetaObjectProvider a triedy DynamicMetaObject, DynamicObject a ExpandoObject.
Jazykové viazače
Jazykové spojivá v DLR mu pomáhajú rozprávať s inými jazykmi. Takže pre každý dynamický jazyk by ste zvyčajne mali spojivo, ktoré s ním môže interagovať. Ako príklad uvádzame bežne používané spojivá v DLR.
- .Net Binder - slúži na komunikáciu s objektmi .Net
- JavaScript Binder - používa sa na komunikáciu s objektmi vytvorenými v objektoch JavaScript
- IronRuby Binder - umožňuje DLR hovoriť s objektmi IronRuby
- IronPython Binder - pomáha DLR hovoriť s objektmi IronPython
- COM Binder - pomáha DLR hovoriť s objektmi COM
„Dynamické“ kľúčové slovo
Kľúčové slovo dynamické môžete využiť na prístup k dynamickému objektu. Dynamické kľúčové slovo bolo prvýkrát predstavené v .Net Framework 4. Umožňuje vašej aplikácii spolupracovať s dynamickými typmi. Kľúčové slovo dynamic teda môžete použiť na prístup k objektu COM alebo k objektu vytvorenému v dynamických jazykoch, ako sú Python, Ruby alebo JavaScript.
Tu je útržok kódu, ktorý ilustruje, ako sa dá použiť dynamické kľúčové slovo.
pomocou System.Dynamic;
dynamic excelObj = System.Runtime.InteropServices.Marshal.GetActiveObject ("Excel.Application");
Na prístup k objektom COM už nemusíme používať reflexiu - váš kód je oveľa čistý bez reflexného kódu, ktorý by ste inak museli napísať bez dynamického kľúčového slova.
Navrhované hodnoty
//msdn.microsoft.com/en-us/library/dd233052(v=vs.110).aspx