CLR in .NET

CLR in .NET: CLR हमारे .NET Framework का सबसे महत्वपूर्ण Component होता है। CLR ही .NET Framework Supported किसी Programming Language में लिखे गए Codes को Manage व Execute करने का काम करता है और CLR ही ठीक Java के JVM की तरह .NET Architecture का आधार है। CLR ही विभिन्न Objects को Activate करता है, उन पर Security Checks को Perform करता है, उन्हें Memory में Load करता है, Execute करता है और Garbage Collector के माध्‍यम से Memory से Unload करता है।

CLR Environment

CLR .NET Infrastructure का आधार होता है, जो किसी .NET Application को Execute करने से सम्बंधित विभिन्न जरूरतों को पूरा करता है।   CLR किसी भी .NET Framework Application के Execution को Manage करता हैं। CLR को हम निम्न चित्र द्वारा Represent कर सकते हैं:

CLR  in .Net - Hindi

जैसाकि इस चित्र में हम देख सकते हैं कि Common Language Runtime से ऊपर की Layer पर विभिन्न .NET PE Files हैं, जो कि विभिन्न .NET Supported Programming Language में Developed Applications की .NET Assemblies या Deployment Units को Represent करता है।

CLR एक Runtime Engine होता है, जो कि किसी .NET Application Program को Execute करने के लिए जरुरी Classes को Load करता है, जिन Methods की जरूरत होती है, उनके लिए Just-In-Time Compilation करता है, Security Checks को Enforce करता है और अन्‍य Runtime Functionalities को Accomplish करता है।

CLR Executables

Microsoft .NET Executables अन्‍य Windows Executables की तुलना में थोडा अलग होते हैं क्योंकि ये Directly Native Code में Converted नहीं होते बल्कि वास्तव में Intermediate Byte Code में Converted होते हैं, जिसमें Executable Codes के साथ ही अन्‍य DataMETADATA भी होते हैं, जो CLR को इस बात की Instruction देते हैं कि .NET Programming Languages द्वारा .NET Application को Compile करने पर जो .EXE या .DLL File Generate होता है, उसे किस तरह से Execute करना है।

.NET Portable Executable (PE) File

.EXE या .DLL Windows Executable Files एक Specific File Format Specification के आधार पर Create होते हैं, जिसे PE File Format कहा जाता है। Windows Operating System को पता होता है कि इस File Format को किस प्रकार से Load व Execute करना है। इसलिए कोई भी Compiler, जो कि Windows Executables Generate करना चाहता है, उसे PE/COFF Specification को Follow करना जरुरी होता है।

Standard Windows PE Files मूल रूप से दो भागों में Divided होती है। पहले Section में PE/COFF Headers होता है, जो कि PE File के Content को Refer करता है। जबकि दूसरे Section के रूप में Header Section, Current Application में Used विभिन्न Images की Information के साथ .data, .rdata, .rsrc.text Sections की Information को भी Hold करता है।

ये दोनों Sections किसी भी Windows Executable के Standard Sections होते हैं, लेकिन Microsoft के C/C++ Compilers हमें pragma Statement का प्रयोग करके PE File में हमारा स्वयं का Header Specify करने की भी सुविधा देते हैं। इस प्रकार से Microsoft द्वारा किसी Normal PE Format में Add किए गए CLR HeaderCLR Data Sections को हम निम्न चित्रानुसार बेहतर तरीके से Represent कर सकते हैं:

CLR  in .Net - Hindi

जहां CLR Header उस Information को Store करता है, जो इस बात को Indicate करते हैं कि PE File एक .NET Executable File है जबकि CLR Data Section में METADATAIL Code होते हैं और ये दोनों ही इस बात को तय करते हैं कि Current Application Program किस प्रकार से Execute होगा।

.NET Assemblies

.NET Framework के आधार पर Develop किए गए सारे .NET Applications के Codes को CLR द्वारा ही Execute किया जाता है जो कि .NET Platform का Runtime होता है। लेकिन किसी Code को CLR पर Execute करने के लिए इस Code को इस प्रकार के Format में Translate किया जाता है, जिसे CLR Runtime समझ सके और इस Format को CIL या Common Intermediate Language कहा जाता है।

दूसरे शब्दों में इसी को MSIL या सिर्फ IL भी कहा जाता है। जबकि जो Codes CLR पर Run होते हैं, उन Codes को Managed Code कहा जाता है, क्योंकि ये Codes ऐसे Native Codes नही होते, जो Directly Current Machine के Microprocessor पर Execute हो सकें, बल्कि इन्हें Execute होने के लिए Additional Runtime Infrastructure की जरूरत होती है।

IL Instructions के अलावा CLR को किसी Application को Execute करने के लिए कुछ METADATA की भी जरूरत होती है, जो कि उस Application में Use किए गए Types या Classes के Organization व Structure को Describe करते हैं।

METADATA को Use करने की वजह से हमें हमारे Programs में Header Files को Include करने की जरूरत नहीं रहती, क्योंकि CLR को Current Application Program के Execution के लिए जिन Type Information की जरूरत होती है, उन्हें वह METADATA से प्राप्त कर लेता है।

Assemblies कोई Single File ही हो, ऐसा जरुरी नहीं होता। बल्कि .NET Framework में Multiple Assemblies भी हो सकते हैं, जो कि एक Single Module के रूप में Compose होते हैं। दूसरे शब्दों में कहें तो .NET Application Deployment के लिए Assembly नहीं बल्कि Module महत्वपूर्ण होता है, भले ही उस Module में केवल एक ही Assembly क्यों न हो।

महत्वपूर्ण बात ये भी हम कि हम Visual Studio का प्रयोग करके Modules Create नहीं कर सकते, बल्कि Modules Create करने के लिए हमें .NET के Command Line Tools को Use करना जरुरी होता है।

.NET Framework Supported VisualBasic.NETC# जैसी Static Programming Languages में बने Programs को Compile करने पर ये .EXE या .DLL Assemblies के रूप में Compile हो जाते हैं, जो कि सभी MSIL या IL तथा METADATA के Container होते हैं।

.NET Supported Dynamic Programming Languages थोडा अलग तरीके से Behave करते हैं, क्योंकि Dynamic Programming Languages सामान्‍यत: Scripting Language होते हैं, जो कि Compile नहीं होते बल्कि बिना Compile हुए Runtime में Separate Assembly के रूप में Directly Load हो जाते हैं।

Runtime में कई तरह की Multiple Dynamic Languages को Handle करने के लिए एक Common Format की जरूरत होती है जो कि इस प्रकार की Scripting Language के Codes को Represent करता है और Program के Execution के दौरान CIL Instruction में Translate करता है। इस प्रक्रिया को हम निम्न चित्र द्वारा बेहतर तरीके से समझ सकते हैं: (CLR in .NET)

CLR  in .Net - Hindi

C# in Hindiये Article इस वेबसाईट पर Selling हेतु उपलब्‍ध EBook C#.NET in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी। 

C#.NET in Hindi | Page:908 | Format: PDF

BUY NOW GET DEMO REVIEWS