Programování

Zkoumání modulu Dynamic Language Runtime v .Net

Staticky zadané jazyky jsou ty, ve kterých byste museli určit typ objektu v době, kdy jej definujete. Mezi příklady staticky zadaných jazyků patří C #, VB a C ++. Naopak v dynamicky zadávaných jazycích je typ objektu určen za běhu - pouze v době, kdy je typu přiřazena hodnota. Python, Ruby a JavaScript jsou příklady dynamicky psaných jazyků.

DLR (Dynamic Language Runtime) běží nad CLR (Common Language Runtime) a přidává dynamiku do spravovaného prostředí .Net - můžete jej použít k implementaci dynamických funkcí ve vaší aplikaci. DLR v podstatě umožňuje interoperabilitu mezi staticky a dynamicky typovanými jazyky v kontextu CLR. DLR můžete použít ke sdílení knihoven a objektů s dynamickými jazyky. V tomto článku bych představil přehled prostředí Dynamic Language Runtime v Microsoft .Net.

Open-source verzi DLR můžete získat od Codeplex.

Co je DLR?

DLR je výsledkem snahy společnosti Microsoft mít služby spuštěné nad CLR a poskytovat interoperabilitu mezi staticky a dynamicky psanými jazyky. Podporu prostředí Dynamic Language Runtime usnadňuje obor názvů System.Dynamic. MSDN uvádí: "Dynamický jazyk runtime (DLR) je prostředí runtime, které přidává sadu služeb pro dynamické jazyky do modulu CLR (Common Language Runtime). Díky DLR je snazší vyvíjet dynamické jazyky pro běh v .Net Framework a přidat dynamické funkce do staticky zadaných jazyků. “

Jak je to užitečné?

Služby poskytované DLR zahrnují podporu pro systém dynamického typu, standardní model hostování a také generování a odesílání dynamického kódu. Mezi výhody, které poskytuje DLR, patří:

  1. Poskytuje podporu pro dynamické funkce ve staticky zadaných jazycích. Díky DLR na místě můžete vytvářet objekty s dynamickým typem a používat je společně se svými staticky zadanými objekty v aplikaci.
  2. Umožňuje bezproblémové portování dynamických jazyků do .Net Framework. DLR umožňuje snadno přenášet dynamické jazyky do .Net Framework. Chcete-li využít funkce DLR, vše, co musí váš dynamický jazyk mít, je schopnost vytvářet stromy výrazů a pomocné rutiny za běhu.
  3. Usnadňuje sdílení knihoven a objektů. DLR umožňuje vytvářet objekty a knihovny v jednom jazyce pro přístup z jiného jazyka.
  4. Poskytuje podporu pro odesílání a vyvolání dynamických metod. DLR poskytuje podporu pro vyvolání a odeslání dynamické metody pomocí pokročilého polymorfního ukládání do mezipaměti.

Subsystém Dynamic Language Runtime

Subsystém DLR se v zásadě skládá ze tří vrstev. Patří mezi ně následující:

  1. Stromy výrazů - DLR využívá stromy výrazů k reprezentaci jazykové sémantiky.
  2. Ukládání do mezipaměti volání - volání metod pomocí dynamických objektů se ukládají do mezipaměti, takže DLR může použít historii mezipaměti pro následná volání stejné metody pro rychlejší odeslání.
  3. Interoperabilita dynamických objektů - DLR umožňuje interoperabilitu mezi staticky a dynamicky psanými jazyky. DLR obsahuje kolekci typů - tříd a rozhraní v oboru názvů System.Dynamic. Rozhraní IDynamicMetaObjectProvider a třídy DynamicMetaObject, DynamicObject a ExpandoObject můžete využít k vytváření dynamických rozhraní.

Pořadače jazyků

Vazače jazyků v DLR mu pomáhají mluvit s jinými jazyky. Takže pro každý dynamický jazyk byste obvykle měli pořadač, který s ním může komunikovat. Jako příklad uvádíme běžně používaná pojiva v DLR.

  • .Net Binder - používá se ke komunikaci s objekty .Net
  • Pořadač JavaScriptu - používá se pro komunikaci s objekty vytvořenými v objektech JavaScriptu
  • IronRuby Binder - umožňuje DLR mluvit s objekty IronRuby
  • IronPython Binder - pomáhá DLR mluvit s objekty IronPython
  • COM Binder - pomáhá DLR mluvit s objekty COM

„Dynamické“ klíčové slovo

Pro přístup k dynamickému objektu můžete využít dynamické klíčové slovo. Dynamické klíčové slovo bylo poprvé představeno v .Net Framework 4. Umožňuje vaší aplikaci spolupracovat s dynamickými typy. Můžete tedy použít klíčové slovo dynamic pro přístup k objektu COM nebo k objektu vytvořenému v dynamických jazycích, jako je Python, Ruby nebo JavaScript.

Zde je fragment kódu, který ilustruje, jak lze použít dynamické klíčové slovo.

pomocí System.Dynamic;

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

Už nemusíme používat reflexi pro přístup k objektům COM - váš kód je mnohem čistý bez reflexního kódu, který byste jinak museli psát bez dynamického klíčového slova.

Doporučené hodnoty

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

$config[zx-auto] not found$config[zx-overlay] not found