Sdílet prostřednictvím


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í 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é 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ů 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. 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í 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 vydá novou verzi, která má vylepšený garbage collector nebo rychlejší načítání sestavení, jazyky implementované pomocí DLR okamžitě profitují ze stejné výhody. 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 naleznete v tématu Stromy výrazů (C#) nebo stromy výrazů (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á vazby 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í opensourcové verze DLR přidat dynamické chování do jazyka nebo jak povolit použití dynamického jazyka s .NET, najdete v dokumentaci k IronLanguages/dlr úložiště na GitHubu.

Viz také