Megosztás a következőn keresztül:


Dinamikus nyelvi futtatókörnyezet áttekintése

A dinamikus nyelvi futtatókörnyezet (DLR) egy futtatókörnyezet, amely dinamikus nyelvekhez tartozó szolgáltatásokat ad hozzá a közös nyelvi futtatókörnyezethez (CLR). A DLR megkönnyíti a dinamikus nyelvek fejlesztését a .NET-en való futtatáshoz és dinamikus funkciók hozzáadásához a statikusan gépelt nyelvekhez.

A dinamikus nyelvek futásidőben azonosíthatják az objektumok típusát, míg a statikusan beírt nyelvekben, például a C# és a Visual Basic (ha használja Option Explicit On), a tervezéskor meg kell adnia az objektumtípusokat. Dinamikus nyelvek például a Lisp, a Smalltalk, a JavaScript, a PHP, a Ruby, a Python, a ColdFusion, a Lua, a Cobra és a Groovy.

A legtöbb dinamikus nyelv a következő előnyöket nyújtja a fejlesztők számára:

  • Gyors visszacsatolási ciklus (REPL vagy read-evaluate-print loop) használata. Ez lehetővé teszi, hogy több utasítást adjon meg, és azonnal végrehajtsa őket az eredmények megtekintéséhez.
  • A felülről lefelé irányuló és a hagyományosabb alulról felfelé irányuló fejlesztés támogatása. Ha például felülről lefelé irányuló megközelítést használ, meghívhatja a még nem implementált függvényeket, majd szükség esetén hozzáadhat mögöttes implementációkat.
  • Egyszerűbb újrabontás és kódmódosítások, mert nem kell módosítania a statikus típusdeklarációkat a kódban.

A dinamikus nyelvek kiváló szkriptnyelvek. Az ügyfelek egyszerűen bővíthetik a dinamikus nyelvek használatával létrehozott alkalmazásokat új parancsokkal és funkciókkal. A dinamikus nyelveket gyakran használják webhelyek létrehozására és biztonsági övek tesztelésére, kiszolgálófarmok karbantartására, különböző segédprogramok fejlesztésére és adatátalakításokra.

A DLR célja, hogy lehetővé tegye a dinamikus nyelvek rendszerének a .NET-en való futtatását és a .NET-együttműködés biztosítását. A DLR dinamikus objektumokat ad hozzá a C#-hoz és a Visual Basichez, hogy támogassa a dinamikus viselkedést ezekben a nyelvekben, és lehetővé tegye a dinamikus nyelvekkel való együttműködésüket.

A DLR segít a dinamikus műveleteket támogató kódtárak létrehozásában is. Ha például xml vagy JavaScript Object Notation (JSON) objektumokat használó tára van, az objektumok dinamikus objektumként jelenhetnek meg a DLR-t használó nyelvek számára. Ez lehetővé teszi, hogy a kódtár felhasználói szintaktikailag egyszerűbb és természetesebb kódot írjanak az objektumokkal való működéshez és az objektumtagokhoz való hozzáféréshez.

Előfordulhat például, hogy a következő kóddal növekteti a számlálót XML-ben C#-ban.

Scriptobj.SetProperty("Count", ((int)GetProperty("Count")) + 1);

A DLR használatával az alábbi kódot használhatja ugyanahhoz a művelethez.

scriptobj.Count += 1;

A CLR-hez hasonlóan a DLR is a .NET része. Letölthető az IronLanguages/dlr adattárból a GitHubon.

Az IronPython egy példa egy nyelvre, amelyet a DLR használatával fejlesztettek ki.

Elsődleges DLR-előnyök

A DLR a következő előnyöket biztosítja.

A dinamikus nyelvek .NET-be történő portolásának egyszerűsítése

A DLR lehetővé teszi a nyelvi implementátorok számára, hogy elkerüljék a lexikális elemzők, elemzők, szemantikai elemzők, kódgenerátorok és más eszközök létrehozását, amelyeket hagyományosan maguknak kellett létrehozniuk. A DLR használatához a nyelvnek kifejezésfákat kell létrehoznia, amelyek nyelvszintű kódot képviselnek egy fa alakú struktúrában, a futtatókörnyezeti segédprogramokat és az IDynamicMetaObjectProvider interfészt megvalósító opcionális dinamikus objektumokat. A DLR és a .NET számos kódelemzési és kódgenerálási feladatot automatizál. Ez lehetővé teszi, hogy a nyelv implementálói az egyedi nyelvi funkciókra összpontosítsanak.

Dinamikus funkciók engedélyezése statikusan gépelt nyelvekben

A meglévő .NET-nyelvek, például a C# és a Visual Basic dinamikus objektumokat hozhatnak létre, és statikusan beírt objektumokkal együtt használhatják őket. A C# és a Visual Basic például dinamikus objektumokat használhat a HTML, a Dokumentumobjektum-modell (DOM) és a tükröződés számára.

A DLR és a .NET jövőbeli előnyeit biztosítja

A DLR használatával implementált nyelvek kihasználhatják a DLR és a .NET jövőbeli fejlesztéseit. Ha például a .NET olyan új verziót ad ki, amely továbbfejlesztett szemétgyűjtővel vagy gyorsabb szerelvénybetöltési idővel rendelkezik, a DLR használatával implementált nyelvek azonnal ugyanazt az előnyt kapják. Ha a DLR optimalizálásokat, például jobb fordítást ad hozzá, a teljesítmény a DLR használatával implementált összes nyelv esetében is javul.

Tárak és objektumok megosztásának engedélyezése

Az egy nyelven implementált objektumokat és kódtárakat más nyelvek is használhatják. A DLR lehetővé teszi a statikusan beírt és a dinamikus nyelvek közötti interoperációt is. A C# például deklarálhat egy dinamikus nyelven írt kódtárat használó dinamikus objektumot. A dinamikus nyelvek ugyanakkor a .NET-keretrendszer kódtárait is használhatják.

Gyors dinamikus kézbesítést és meghívást biztosít

A DLR a fejlett polimorf gyorsítótárazás támogatásával biztosítja a dinamikus műveletek gyors végrehajtását. A DLR szabályokat hoz létre olyan kötési műveletekhez, amelyek objektumokat használnak a szükséges futtatókörnyezeti implementációkhoz, majd gyorsítótárazza ezeket a szabályokat, hogy elkerülje az erőforrás-kimerítő kötési számításokat ugyanazon kód ugyanazon típusú objektumok egymást követő végrehajtása során.

DLR-architektúra

A DLR szolgáltatáskészletet ad hozzá a CLR-hez a dinamikus nyelvek jobb támogatása érdekében. Ezek a szolgáltatások a következők:

  • Kifejezésfák. A DLR kifejezésfákkal jelöli a nyelvi szemantikát. Erre a célra a DLR kiterjesztett LINQ-kifejezésfákkal rendelkezik, hogy a vezérlőfolyamatokat, hozzárendeléseket és más nyelvmodellező csomópontokat is magában foglalja. További információ: Kifejezésfák (C#) vagy Kifejezésfák (Visual Basic).

  • Híváswebhely gyorsítótárazása. A dinamikus híváswebhely a kód azon helye, ahol dinamikus objektumokhoz hasonló a + b vagy a.b() dinamikus műveletet hajt végre. A DLR gyorsítótárazza az objektumok jellemzőit a és b (általában az objektumok típusait) és a művelettel kapcsolatos információkat. Ha korábban már végrehajtottak ilyen műveletet, a DLR lekéri az összes szükséges információt a gyorsítótárból a gyors kézbesítéshez.

  • Dinamikus objektum-együttműködés. A DLR olyan osztályokat és interfészeket biztosít, amelyek dinamikus objektumokat és műveleteket képviselnek, és amelyeket a nyelv implementálói és a dinamikus kódtárak szerzői használhatnak. Ezek az osztályok és felületek a következők: IDynamicMetaObjectProvider, DynamicMetaObject, DynamicObjectés ExpandoObject.

A DLR a hívási helyeken kötéseket használ, hogy ne csak a .NET-tel, hanem más infrastruktúrákkal és szolgáltatásokkal, például a COM-val is kommunikáljon. A kötőanyagok beágyaznak egy nyelv szemantikáját, és megadják, hogyan hajthat végre műveleteket a hívási helyeken kifejezésfák használatával. Ez lehetővé teszi a DLR-t használó dinamikus és statikusan gépelt nyelvek számára a kódtárak megosztását és a DLR által támogatott összes technológia elérését.

A DLR dokumentációja

A DLR nyílt forráskód verziójának használatával dinamikus viselkedést adhat egy nyelvhez, illetve arról, hogyan engedélyezheti a dinamikus nyelv használatát a .NET-tel, tekintse meg a GitHub IronLanguages/dlr adattárának dokumentációját.

Lásd még