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
vagya.b()
dinamikus műveletet hajt végre. A DLR gyorsítótárazza az objektumok jellemzőita
ésb
(á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
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: