Přehled běhového prostředí pro dynamické jazyky

prostředí dynamického jazyka (DLR) je běhové prostředí, které přidává sadu služeb pro dynamické jazyky do společného modulu CLR (Common Language Runtime). DlR usnadňuje vývoj dynamických jazyků pro spouštění na .NET a přidávání dynamických funkcí do staticky zadaných jazyků.

Dynamické jazyky mohou identifikovat typ objektu za 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é zadat 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ů běžet na .NET a poskytnout jim .NET interoperabilitu. 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;

Stejně jako CLR je DLR součástí .NET. Je k dispozici ke stažení v úložišti IronLanguages/dlr na GitHub.

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. Pokud chcete použít DLR, jazyk musí 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í rozhraní IDynamicMetaObjectProvider. 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í .NET jazyky, 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 C# a Visual Basic můžou používat dynamické objekty pro HTML, Document Object Model (DOM) a reflexi.

Poskytuje budoucí výhody DLR a .NET

Jazyky implementované pomocí DLR mohou těžit z budoucích vylepšení DLR a .NET. Pokud například .NET vydá novou verzi, která má vylepšený garbage collector 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 svázání, která využívají objekty pro potřebné implementace v prostředí runtime, a pak tato pravidla ukládá do mezipaměti, aby se předešlo náročným výpočtům vazeb při následném spouštění stejného kódu na identický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 Výrazní stromy (C#) nebo Výrazní stromy (Visual Basic).

  • Kešování na místě volání Místo dynamického volání je místo v kódu, kde provádíte operaci, jako je a + b nebo a.b() u dynamických objektů. DLR ukládá vlastnosti a a b (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, DynamicMetaObject, DynamicObjecta ExpandoObject.

DLR používá vazební prvky ve volacích místech ke komunikaci nejen s .NET, ale také 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í open source 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 v GitHub.

Viz také