Mi a "felügyelt kód"?
A .NET használatakor gyakran találkozhat a "felügyelt kód" kifejezéssel. Ez a cikk ismerteti, mit jelent a felügyelt kód, és további információkkal szolgál róla.
Egyszerűen fogalmazva a felügyelt kód csak a következő: olyan kód, amelynek végrehajtását futtatókörnyezet felügyeli. Ebben az esetben a szóban forgó futtatókörnyezetet Common Language Runtime vagy CLR-nek nevezzük, a megvalósítástól függetlenül (például Mono, .NET Framework vagy .NET Core/.NET 5+). A CLR feladata a felügyelt kód átvétele, gépi kódba való összeállítása, majd végrehajtása. Ezen felül a futtatókörnyezet számos fontos szolgáltatást biztosít, például az automatikus memóriakezelést, a biztonsági határokat és a típusbiztonságot.
Ezt hasonlítsa a C/C++ program futtatásához, más néven "nem felügyelt kódhoz". A nem felügyelt világban a programozó nagyjából mindenért felelős. A tényleges program lényegében egy bináris, amelyet az operációs rendszer (OS) betölt a memóriába, és elindul. Minden más, a memóriakezeléstől a biztonsági szempontokon át a programozót terheli.
A felügyelt kód az egyik olyan magas szintű nyelvre van megírva, amely a .NET-en futtatható, például C#, Visual Basic, F# és mások. Ha az adott nyelvekre írt kódot fordítja le a megfelelő fordítóval, akkor nem kap gépi kódot. köztes nyelv kódot kap, amelyet a futtatókörnyezet lefordít és végrehajt. A szabály alól a C++ az egyetlen kivétel, mivel natív, nem felügyelt bináris fájlokat is létrehozhat, amelyek Windows rendszeren futnak.
Közbenső programnyelv & végrehajtása
Mi az a "köztes nyelv" (röviden IL)? Ez a magas szintű .NET-nyelveken írt kód fordításának terméke. Miután lefordított egy kódot ezen nyelvek egyikén, egy IL-ből készült bináris fájlt fog kapni. Fontos megjegyezni, hogy az IL független minden olyan nyelvtől, amely a futtatókörnyezeten fut; létezik rá egy külön specifikáció is, amelyet elolvashat, ha érdekli.
Miután előállította az IL-t a magas szintű kódból, valószínűleg szeretné majd futtatni. A CLR itt veszi át az irányítást, és elindítja az igény szerinti (Just-In-Time) fordítást, más néven JIT-elés folyamatát, amely a kódot IL-ről a processzoron ténylegesen futtatható gépi kódra alakítja. Ily módon a CLR pontosan tudja, hogy mit csinál a kód, és hatékonyan kezelni.
A köztes nyelvet gyakran közbülső nyelvnek (CIL) is nevezik.
Nem felügyelt kód együttműködése
Természetesen a CLR lehetővé teszi a felügyelt és a nem felügyelt világ közötti határok átlépését, és sok olyan kód van, amely ezt teszi, még a .NET osztálykódtárakban is. Ezt nevezzük interoperabilitásnak, vagy röviden interopnak. Ezek a rendelkezések lehetővé teszik például egy nem felügyelt kódtár becsomagolását és behívását. Fontos azonban megjegyezni, hogy ha ezt megteszi, amikor a kód átlépi a futtatókörnyezet határait, a végrehajtás tényleges kezelése ismét a nem felügyelt kód kezében van, és így ugyanazokra a korlátozásokra vonatkozik.
Ehhez hasonlóan a C# egy olyan nyelv, amely lehetővé teszi nem felügyelt szerkezetek, például a mutatók közvetlen használatát a kódban az úgynevezett nem biztonságos környezethasználatával, amely kijelöl egy olyan kódot, amelyhez a végrehajtást nem a CLR kezeli.