Přehled DLR (Dynamic Language Runtime)
Modul runtime dynamického jazyka (DLR) je běhové prostředí, které do modulu CLR (Common Language Runtime) přidává sadu služeb pro dynamické jazyky. DlR usnadňuje vývoj dynamických jazyků pro spouštění v .NET a přidávání dynamických funkcí do staticky zadaných jazyků.
Dynamické jazyky mohou identifikovat typ objektu v době běhu, zatímco v staticky zadaných jazycích, jako je C# a Visual Basic (při použití Option Explicit On
), je nutné určit typy objektů v době návrhu. Mezi příklady dynamických jazyků patří Lisp, Smalltalk, JavaScript, PHP, Ruby, Python, ColdFusion, Lua, Cobra a Groovy.
Většina dynamických jazyků poskytuje vývojářům následující výhody:
- Schopnost používat smyčku rychlé zpětné vazby (REPL nebo smyčku čtení-vyhodnocení-tisku). To vám umožní zadat několik příkazů a okamžitě je spustit, aby se zobrazily výsledky.
- Podpora vývoje shora dolů i tradičního vývoje směrem dolů. Když například použijete přístup shora dolů, můžete volat funkce, které ještě nejsou implementované, a pak přidat základní implementace, když je potřebujete.
- Jednodušší refaktoring a úpravy kódu, protože nemusíte měnit deklarace statického typu v celém kódu.
Dynamické jazyky tvoří vynikající skriptovací jazyky. Zákazníci můžou snadno rozšířit aplikace vytvořené pomocí dynamických jazyků s novými příkazy a funkcemi. Dynamické jazyky se také často používají k vytváření webů a testovacích nástrojů, údržbě serverových farem, vývoji různých nástrojů a provádění transformací dat.
Účelem DLR je umožnit systému dynamických jazyků spouštět v .NET a poskytnout jim interoperabilitu .NET. DlR přidává dynamické objekty do jazyka C# a Visual Basic pro podporu dynamického chování v těchto jazycích a umožňuje jejich spolupráci s dynamickými jazyky.
DlR také pomáhá vytvářet knihovny, které podporují dynamické operace. Pokud máte například knihovnu, která používá objekty JSON (XML nebo JavaScript Object Notation), mohou se objekty zobrazovat jako dynamické objekty pro jazyky, které používají DLR. To umožňuje uživatelům knihovny psát syntakticky jednodušší a přirozenější kód pro práci s objekty a přístup k členům objektu.
Pomocí následujícího kódu můžete například zvýšit čítač v jazyce XML v jazyce C#.
Scriptobj.SetProperty("Count", ((int)GetProperty("Count")) + 1);
Při použití DLR byste místo toho mohli použít následující kód pro stejnou operaci.
scriptobj.Count += 1;
Podobně jako CLR je DLR součástí .NET. Je k dispozici ke stažení v úložišti IronLanguages/dlr na GitHubu.
IronPython je příkladem jazyka vyvinutého pomocí DLR.
Hlavní výhody DLR
DLR poskytuje následující výhody.
Zjednodušuje přenos dynamických jazyků do .NET.
DLR umožňuje implementátorům jazyka zabránit vytváření lexikálních analyzátorů, analyzátorů, sémantických analyzátorů, generátorů kódu a dalších nástrojů, které si tradičně museli vytvořit. Pro použití DLR musí jazyk vytvářet stromy výrazů, které představují kód na úrovni jazyka ve stromové struktuře, pomocné rutiny modulu runtime a volitelné dynamické objekty, které implementují IDynamicMetaObjectProvider rozhraní. DLR a .NET automatizují spoustu úloh analýzy kódu a generování kódu. Díky tomu se implementátoři jazyků mohou soustředit na jedinečné jazykové funkce.
Umožňuje dynamické funkce v staticky zadaných jazycích.
Existující jazyky .NET, jako je C# a Visual Basic, můžou vytvářet dynamické objekty a používat je společně se staticky zadanými objekty. Například jazyk C# a Visual Basic můžou používat dynamické objekty pro HTML, model DOM (Document Object Model) a reflexi.
Poskytuje budoucí výhody DLR a .NET.
Jazyky implementované pomocí DLR můžou těžit z budoucích vylepšení DLR a .NET. Pokud například .NET uvolní novou verzi, která má vylepšenou dobu načítání paměti nebo rychlejší načítání sestavení, jazyky implementované pomocí DLR okamžitě získají stejnou výhodu. Pokud DLR přidává optimalizace, jako je lepší kompilace, výkon se také zlepší pro všechny jazyky implementované pomocí DLR.
Umožňuje sdílení knihoven a objektů.
Objekty a knihovny implementované v jednom jazyce mohou být používány jinými jazyky. DLR také umožňuje spolupráci mezi staticky zadanými a dynamickými jazyky. Jazyk C# může například deklarovat dynamický objekt, který používá knihovnu napsanou v dynamickém jazyce. Dynamické jazyky mohou současně používat knihovny z rozhraní .NET Framework.
Poskytuje rychlé dynamické odesílání a vyvolání.
DLR poskytuje rychlé spouštění dynamických operací tím, že podporuje pokročilé polymorfní ukládání do mezipaměti. DLR vytváří pravidla pro operace vazby, které používají objekty k potřebným implementacím modulu runtime, a pak tato pravidla ukládá do mezipaměti, aby se zabránilo vyčerpání vazeb prostředků během následných spuštění stejného kódu na stejných typech objektů.
Architektura DLR
DLR přidá do modulu CLR sadu služeb pro lepší podporu dynamických jazyků. Mezi tyto služby patří:
Stromy výrazů DlR používá stromy výrazů k reprezentaci sémantiky jazyka. Pro tento účel dlR rozšířil stromy výrazů LINQ tak, aby zahrnovaly tok řízení, přiřazení a další uzly pro modelování jazyka. Další informace najdete v tématu Stromy výrazů (C#) nebo Stromy výrazů (Visual Basic).
Volání ukládání do mezipaměti webu Web dynamického volání je místo v kódu, kde provádíte operaci jako
a + b
neboa.b()
u dynamických objektů. DLR ukládá vlastnostia
ab
(obvykle typy těchto objektů) a informace o operaci. Pokud byla taková operace provedena dříve, dlR načte všechny potřebné informace z mezipaměti pro rychlé odeslání.Dynamická interoperabilita objektů DLR poskytuje sadu tříd a rozhraní, které představují dynamické objekty a operace a mohou je používat implementátoři jazyka a autoři dynamických knihoven. Tyto třídy a rozhraní zahrnují IDynamicMetaObjectProvider, , DynamicMetaObjectDynamicObject, a ExpandoObject.
DLR používá pořadače v call lokalitách ke komunikaci nejen s .NET, ale s dalšími infrastrukturami a službami, jako je com. Bindery zapouzdřují sémantiku jazyka a určují, jak provádět operace v lokalitě volání pomocí stromů výrazů. To umožňuje dynamické a staticky napsané jazyky, které používají DLR ke sdílení knihoven a získání přístupu ke všem technologiím, které DLR podporuje.
Dokumentace k DLR
Další informace o tom, jak pomocí opensourcové verze DLR přidat dynamické chování do jazyka nebo jak povolit použití dynamického jazyka s .NET, najdete v dokumentaci k úložišti IronLanguages/dlr na GitHubu.