====== .NET ====== A .NET Framework egy keretrendszer (ilyen pl. a [[oktatas:informatika:programozas:java]] is), amely egy új absztrakciós réteget valósít meg a keretrendszerre írt felhasználói programok és az operációs rendszer ([[informatika:programozas:linux]], [[informatika:programozas:windows_xp]], [[informatika:programozas:windows_vista]]) között. Szokásos elnevezések: framework, keretrendszer, virtuális gép. Feladata a beépített osztályokon és saját utasításkészletén keresztül "felügyelt" programok futtatása az op. rendszeren. Ezt az utasítéskészletet egy köztes nyelv, az Intermediate Language adja. A magasabb szintű nyelveken ([[informatika:programozas:dotnet:c-sharp:start|c#]], visual c++, visual basic.net, j#, php, pascal, python, LOGO, ...) írt fordító (compiler) erre a köztes nyelvre (IL) fordítja le, amit aztán a futtatókörnyezet "felügyelt" módon [[informatika:programozas:gepi_kod]]ra fordít és az operációs rendszer a [[informatika:programozas:hardver]]en futtat. .cs (c# forráskód) {doubleright}over{compiler} .exe (il bináris) {right}over{JIT} a futó natív gépi kód Természetesen a futás idejű fordítás sebességcsökkenéssel jár, amit a .net keretrendszer menet közbeni fordítója azzal kompenzál, hogy csak a még nem fordított [[informatika:programozas:metodust]] fordítja vagy a már rendelkezésre álló gépi kódot használja. Így a programindulás lényegesen lassabb lehet, de a futás általában már nem. Ebből származó előnyök: * hardverfüggő optimalizást a keretrendszer és nem a program végezheti (hordozható marad az általunk írt és fordított kód) * szoftveroptimalizáció (?) Native Imgae Generator (ngen.exe) -ral közvetlenül a natív kód is fordítható, bár általában nem javasolt. A keretrendszer jelenleg a Mono projekt keretében [[informatika:programozas:linux]]ra, a Microsoft által Windows-okra érhető el. Elnevezések: * .NET osztálykönyvtár ~ Framework Class Library * .NET futtatókörnyezet ~ Common Language Runtime Execution Engine * menet közbeni fordító ~ JIT ~ Just-in-time Compiler ===== .NET Osztálykönyvtár ===== Igen nagy számú beépített osztálykönyvtár áll a programozó rendelkezésére. Fontosabb névterek((a névtér és az osztálykönyvtár fogalma nem teljesen ekvivalens)): System, System.IO, System.Net , System.XML, System.Console ... ===== .NET Típusrendszere ===== * objektumorientált * nyelvfüggetlen * szigorú típuskezelés (érték+referencia; boxing; attributumok) ===== .NET Kivételkezelés ===== A nem várt eseményeket kivételnek nevezzük. Az egységes megvalósítás lehetőséget ad a kódban a hasznos kód és a kivételkezelő kód egymástól szétválasztására. Saját kivételek (osztályok) definiálhatók, kedvünkre szabhatók. Természetesen "kivételes esetben" ez is lassulást okoz, így a kivételkezelés módszerét nem célszerű - bár lehet - programozói feladatokra használni. ===== Memóriakezelés ===== Az automatikus memóriakezelést végez: memóriafoglalás, felszabadítás. Jellemzően: * gyors memóriafoglalás * lassú - bár a végletekig optimalizált, és ritkán futó szemétgyűjtő algoritmus (Garbage Collector: külön szál; amíg fut, minden alkalmazás áll) A GC mozgatja át a lyukas memóriaterületre a használt adatokat, az új üres tér egybefüggő (v.ö JAVA), így a memóriafoglalás villámgyors. Az optimalizált GC az igényeknek megfelelő sebességet produkál.