Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A dinamikus nyelvi futtatókörnyezeti (DLR) olyan futtatókörnyezet, amely dinamikus nyelvekhez készült 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 való futtatáshoz, valamint dinamikus funkciók hozzáadását a statikusan beírt nyelvekhez.
A dinamikus nyelvek futásidőben azonosíthatják az objektumok típusát, míg statikusan beírt nyelvekben, például a C# és a Visual Basic (Option Explicit On használatakor) a tervezéskor meg kell adnia az objektumtípusokat. Dinamikus nyelvek például a Lisp, Smalltalk, JavaScript, PHP, Ruby, Python, ColdFusion, Lua, Cobra és Groovy.
A legtöbb dinamikus nyelv a következő előnyöket nyújtja a fejlesztők számára:
- A gyors visszacsatolási ciklus (REPL vagy read-evaluate-print loop) használatának képessége. 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 .NET való futtatását, és .NET interoperabilitást biztosít számukra. A DLR dinamikus objektumokat ad hozzá a C#-hoz és Visual Basic a dinamikus viselkedés támogatásához ezeken a nyelveken, és lehetővé teszi 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öveli a számlálót XML-ben C# nyelven.
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ő a IronLanguages/dlr adattárból GitHub.
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 rendszerhez való átültetését leegyszerűsíti
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 a fa alakú szerkezet nyelvszintű kódját, a futásidejű segédprogramokat és az IDynamicMetaObjectProvider interfészt implementáló opcionális dinamikus objektumokat jelölik. A DLR és a .NET számos kódelemzési és kódgenerálási feladatot automatizálnak. 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 jövőbeli előnyeit és .NET fejlesztéseket. Ha például a .NET olyan új verziót ad ki, amely továbbfejlesztett szemétgyűjtővel vagy gyorsabb összetevő-betöltési idővel rendelkezik, a DLR segítségével implementált nyelvek azonnal ugyanazt az előnyt élvezik. 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ó: Expression Trees (C#) vagy Expression Trees (Visual Basic).
Híváswebhely gyorsítótárazása. A dinamikus hívási hely a kód azon helye, ahol egy műveletet hajt végre, például
a + bvagya.b()dinamikus objektumokon. A DLR gyorsítótárazza aaés abjellemzőit (általában az ilyen objektumok típusait), valamint 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 közé tartozik a IDynamicMetaObjectProvider, DynamicMetaObject, DynamicObjectés ExpandoObject.
A DLR kötőanyagokat használ a híváshelyeken, hogy ne csak .NET, 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 a dinamikus viselkedés nyelvhez való hozzáadásáról, illetve a dinamikus nyelv .NET való használatának engedélyezéséről a IronLanguages/dlr adattár dokumentációjában talál további információt a GitHub.