.NET keretrendszer

A Microsoft által készített .NET keretrendszer (a .NET Framework) gyors alkalmazásfejlesztést (RAD), platformfüggetlenséget és hálózati átlátszóságot támogató szoftverfejlesztői platform. A keretrendszert a korábbi platform, a COM leváltására szánták.

Eredetileg a .NET kifejezés nemcsak fejlesztői környezetet jelentett, hanem fejlesztőeszközök, szoftverek, sőt hardvereszközök összességét is. Az évek során a kép kitisztult, így mostanra a .NET alatt a keretrendszert értjük.

A .NET Framework eszköztára a szoftverfejlesztés szinte minden aspektusát (kliens-, illetve szerveroldali megoldások, adatbázisok kezelése, játékfejlesztés stb.) lefedi.

Története 

A kilencvenes évek közepén a Sun kiadta a Java platform első verzióját. Az új környezet hamarosan igen nagy népszerűségre tett szert platformfüggetlensége, hatalmas, jól kezelhető osztálykönyvtára illetve könnyű megtanulhatósága révén. A Microsoft és más cégek eszközei eleinte nem tudták hatékonyan felvenni a versenyt a Sun termékével, később azonban a fejlesztések beértek. A Microsoft először a Java saját implementációjával próbálkozott, de ezzel soha nem aratott különösebb sikert.

Néhány későbbi .NET technológia eredetileg ezen fejlesztések során jött létre. Amikor 1998-ban a Microsoft elhatározta, hogy nem használja tovább a Sun Microsystems Java technológiáját, a már létező Microsoft J++ (Java++) terméket a .NET projekt alapjaként használták. A .NET CLR kódja egyesek szerint a Colusa Software OmniVM termékéből származik, amit a Microsoft 1996. március 12-én vásárolt meg.

A tényleges fejlesztés a kilencvenes évek végén Next Generation Windows Services munkacím alatt Bill Gates személyes felügyelete mellett indult el. 2000-ben a Microsoft, az Intel és a Hewlett-Packard már a C# nyelv szabványosításán dolgozott, ezt az ECMA 2001-ben el is fogadta.

2000 végére elkészült az első béta változat, 2002. január 5-én pedig a .NET Framework 1.0 verziója végre a nagyközönség kezei közé került.

A következő mérföldkövet 2005. november 7. jelentette, ekkor adták ki a 2.0-s verzió végleges változatát, amely hatalmas változásokat hozott. Tulajdonképpen ez a verzió hozta meg az igazi népszerűséget a .NET számára.

Egy nap híján egy évvel később a 3.0 is napvilágot látott, rá egy évre pedig a 3.5 verzió született meg. 2008 augusztusában a Microsoft kiadta a 3.5 verzióhoz tartozó első szervizcsomagot. 2010 év elején jelent meg a 4.0 verzió, 2012-ben pedig a 4.5 verzió béta változata.

Architektúra

Common Language Infrastructure 

A .NET Framework alapját a CLI, vagyis a Common Language Infrastructure képezi. Ez nem más, mint azon szabályok halmaza, amelyek leírnak egy nyelvfüggetlen fejlesztői környezetet, a futtatókörnyezetet, típusrendszert stb. A .NET Framework implementációját CLR-nek, Common Language Runtime-nak hívják. A CLI maga is négy fő részre oszlik:

 Common Language Specification

A CLS a CLI része. Azokat a szabályokat írja le, amelyeket a CLI-kompatibilis nyelveknek be kell tartaniuk. Érdekesség, hogy a legtöbb .NET nyelv – pl. a C# – tartalmaz olyan elemeket, amelyek nem felelnek meg a CLS specifikációnak (pl. a CLS nem engedi meg ulong típusú paraméterek használatát, míg a C# igen).

 Common Type System

A CTS a CLI azon része, amely a típusokat, azok memóriabeli reprezentációját illetve egymással való interakcióját írja le. A .NET minden nyelve ugyanazt a típusrendszert használja, és ugyan az egyes típusok megnevezése nyelvfüggő, viszont mindig ugyanarról a típusról van szó.

 Common Language Runtime

A CLR vagy VES (Virtual Execution System) a CLI nyelven megírt programok betöltéséért és végrehajtásáért felel. Felelősséggel tartozik pl. a memóriamenedzsmentért, kivételkezelésért illetve a kódbiztonságért is (itt a fontosabbak lettek említve).

 Common Intermediate Language

A CIL (korábban MSIL) egy ún. köztes kód. Minden CLI nyelvben megírt program erre a kódra fordítódik le (ellentétben a hagyományos nyelvek natív kódjától). Ezt a kódot a tényleges futtatáskor az ún. jitter (Just in time compiler) fordítja le natív kódra, amelyet a processzor már tud kezelni. A CIL hasonlít a Java bytekódjára.

Kapcsolat a Java-val 

A Java rendszert a .NET evolúciós előfutárának szokták mondani. Ezzel ellentétben, a Sun Microsystems, később az Oracle Java licence ragaszkodott a különböző Java kivitelezések összeférhetőségéhez, azaz hogy különböző rendszereken pontosan ugyanolyan eredmény adódjék, valamint a Java rendszer elérhető legyen szinte minden elterjedten használt rendszeren. Az ugyanolyan működés biztosításának kezdetben ára volt, leginkább a platformok legkisebb közös többszöröse lett megvalósítva, kihagyva ezekből az egyes rendszerek specialitásait. Ez 2016-ban már szintén nem okoz problémát pl. standard OpenGL vagy open POSIX szabványok használatával.

A „Java (programozási nyelv)” szócikk szerint: Egyes cégek, mint például a Microsoft, mégis platformfüggő sajátságokat adtak a nyelvhez, amire a Sun keményen reagált: beperelte a Microsoftot (az amerikai bíróság 20 millió dollár kártérítésre és a sajátos tulajdonságok visszavonására kötelezte a céget). Válaszként a Microsoft kihagyta a Java rendszert a jövőbeli termékekből és Windows-változatokból. A platformfüggetlenség megvalósítása technikailag nagyon bonyolult, a Java esetében is sok vita volt: az „írd meg egyszer, futtasd bárhol” szlogenből „írd meg egyszer, hibakeress mindenhol” lett. 2015-re azonban ez már nem okoz problémát, a Java elérhető az összes jelentős platformon, szervereken való előnyét megtartotta, a .NET ezzel szemben inkább klienskörnyezetben erős. A platformfüggetlenségre a Microsoft is törekszik, például a Mono projekt megvásárlásával. Ez a platform lehetővé teszi .NET-fejlesztést más nem-Microsoft platformon is, pl. Linux alatt.

A két környezet és nyelv manapság egymás mellett fejlődik tovább, hol az egyik előzi a másikat máskor épp fordítva. Hasonlóságok: ASP – JSP, Lambda kalkulus mindkettőben. A Java Development Kitet alapvetően Java nyelven lehet programozni, bár 6-os Java óta más nyílt parancsnyelvek használatát is támogatja a platform. A .NET CLR-re a kezdetektől fogva több nyelvet támogatott, bár legerősebben a C# nyelvet. A Java a kezdetektől épített a nyílt forráskódú szoftverek közösségeire, 2007-től maga a JDK is nyílt lett. 2015-től a Microsoft is próbál nyitni az „open source” közösségek felé és a közösségi fejlesztés előnyeit kihasználni.

Szabványosítás 
A Microsoft benyújtotta a .NET specifikáció egy részét az ECMA-hoz és az ISO-hoz szabványosításra. Ez kockázatot jelentett számukra, de támogatja a szabványkövető megvalósításokat.

.NET vs JEE 
A CLI, a CIL és a C# nagy hasonlóságot mutat a Sun JVM-jéhez és a Sun Java-jához képest, ezért erős versenyben állnak egymással. Mindkettő egy saját köztes bájt kódot használ, amit a Microsoft CIL-nek (korábban MSIL) hív. A .NET bájt kódot futásidejű fordításra tervezték, míg a Javát eredetileg interpretálásra, de mára ott is futásidejű fordítás az alap viselkedési forma. A .NET jelenleg csak Windows platformon érhető el teljes valójában, míg a Java több platformon is teljesen rendelkezésre áll. Azonban a folyamatban levő megvalósítások, mint a Mono vagy a Rotor lehetővé teszik a .NET programok futtatását a Unix-típusú operációs rendszereken is, például Linuxon, FreeBSD-n és Mac OS X-en. Az Oracle terméke, a JEE, azonos funkciókat biztosít az olyan Microsoft technológiákhoz, mint a COM+ és az MSMQ, melyek erősen integráltak a Windows operációs rendszerbe. A .NET ezeket a technológiákat absztrakt módon teszi elérhetővé.

.NET vs COM 
A Microsoft által korábban támogatott komponens alapú modell a COM volt (aminek része volt az MTS az elosztott tranzakciók támogatására), később pedig a COM+ lett. Bár a .NET be tudja csomagolni a COM komponenseket és fordítva – amit a Microsoft Runtime Callable Wrapper-nek (RCW) és COM Callable Wrapper-nek (CCW) hív –, a Microsoft egyértelműen jelezte, hogy a .NET mint szoftver komponens architektúra le fogja cserélni a COM-ot. A Microsoft reményei szerint a Win32 platformra fejlesztők elkezdik használni a .NET-et a COM helyett, és a jelenlegi szolgáltatásokat absztrakt interfészeken keresztül érik el (például a tranzakciókban részt vevő .NET komponensek jelenleg COM+-t használnak).

.NET nyelvek 

A CLI-t úgy tervezték, hogy bármilyen objektumorientált programozási nyelvet támogasson, megosztva egy közös objektum modellt és egy nagy, közös osztálykönyvtárat. A .NET jelenleg több mint 40 programozási nyelvet támogat, melyek többsége ingyenes (a kereskedők fejlesztői környezeteket árulnak).

Sok nyelvet jelentősen hangoltak, hogy illeszkedjen a .NET keretrendszerbe. A gyártók ezt kihasználva gyakran egyéb nyelvi funkciókat is módosítottak.

Beépített nyelvek 
 C#, a C++-hoz és a Sun Java nyelvéhez hasonló objektumorientált nyelv
 JScript .NET, Microsoft JScript nyelvének fordított verziója
 J#, a Java és a J++ programozók átmeneti nyelve a .NET keretrendszer felé
 Managed C++, a C++ egy változata a .NET platformra
 Visual Basic .NET, a klasszikus Visual Basic egy továbbfejlesztett, objektumorientált, többszálas verziója

Külső forrásból elérhető nyelvek (válogatás) 
 APL
 Boo
 COBOL
 Component Pascal
 Delphi 8 és Delphi 2005
 Eiffel
 F#
 Forth
 Fortran
 IKVM, Java
 Lisp
 Mercury
 Mondrian
 Nemerle
 Oberon
 Perl
 IronPython (a Python egyik implementációja)
 IBM RPG
 Smalltalk

ASP.NET és ADO.NET 
 ASP.NET a klasszikus Active Server Pages (ASP) webprogramozási technológia továbbfejlesztése. Megvalósítja a .NET követelményeket, .NET osztálykönyvtárral rendelkezik, de önmagában nem egy nyelv, hanem bármely .NET-et támogató nyelven lehet használni.
 ADO.NET az ActiveX Data Objects (ADO) továbbfejlesztett verziója, mely támogatja a .NET keretrendszert.

Alternatív megvalósítások 
Míg a Microsoft .NET Keretrendszer a .NET technológiák megvalósításának zászlóshajója, léteznek más megvalósítások is.

 A Microsoft Rotor, vagy hivatalos nevén Shared Source Common Language Infrastructure egy shared source (megosztott forráskódú) licencű megvalósítása a .NET keretrendszernek. Microsoft Windows XP-n, FreeBSD-n és Mac OS X-en fut.
 A Mono egy nyílt forráskódú megvalósítása a .NET futtató környezetnek és a fejlesztői könyvtáraknak. A Mono-t a Ximian (a Novell, Inc. része) és a nyílt forráskódú fejlesztői közösség fejleszti. Gyorsan fejlődik, támogatja az ASP.NET-et, az ADO.NET-et és fejlődik a Windows Forms könyvtárak támogatása is. Tartalmaz egy C# fordítót és egy Visual Basic .NET béta előtti állapotú fordítót is. A Mono új könyvtárak és technológiák fejlesztését is magában foglalja:
 Gtk# – .NET burkoló a Gtk+ GUI készlet számára
 XSP – C# nyelven írt webkiszolgáló ASP.NET támogatással
 MonoDevelop – a SharpDevelop egy átültetett (portolt) változata, egy GPL-ed integrált fejlesztői környezet a .NET, a Gtk# és a Mono számára
 Novell.Directory.Ldap osztály könyvtárak – Egy ingyenes .NET Lightweight Directory Access Protocol (LDAP) implementáció
 SerialPortNet – egy soros portot kezelő könyvtár .NET és Mono platformra .NET 2.0 specifikáció támogatással
 DotGNU Portable.NET kevésbé fejlett, mint a Mono, mivel a Portable.NET-et nem a Microsoft fejlesztői keretrendszerét használva hozták létre.

Jegyzetek

További információk 
 Külső forrásból származó .NET nyelvek listája
 What is .NET Framework? a .NET hivatalos honlapján

Számítógép-programozás
Microsoft-szoftverek