logo

.NET Common Language Runtime (CLR)

NET CLR היא סביבת זמן ריצה המנהלת ומבצעת את הקוד הכתוב בכל שפת תכנות NET. CLR הוא רכיב המכונה הווירטואלית של מסגרת NET. המהדר של שפה זו מרכיב את קוד המקור של יישומים שפותחו באמצעות שפות תואמות .NET לשפת הביניים של CLR הנקראת MSIL, כלומר, קוד שפת הביניים של מיקרוסופט. קוד זה אינו תלוי בפלטפורמה. זה דומה לקוד בייט ב-java. מטא נתונים נוצרים גם במהלך הקומפילציה וקוד MSIL ומאוחסנים בקובץ המכונה קובץ Manifest. מטא נתונים אלה עוסקים בדרך כלל על חברים וסוגים הנדרשים על ידי CLR לביצוע קוד MSIL. רכיב מהדר בדיוק בזמן של CLR ממיר קוד MSIL לקוד מקורי של המכונה. קוד זה תלוי בפלטפורמה. CLR מנהלת זיכרון, שרשורים, חריגים, ביצוע קוד, בטיחות קוד, אימות והידור.

Java while condition

האיור הבא מציג את ההמרה של קוד מקור לקוד מקורי.

זמן ריצה של שפה משותפת נטו

הדמות לעיל ממירה קוד לקוד מקורי, שה-CPU יכול לבצע.

המרכיבים העיקריים של CLR הם:

  • מערכת רגילה
  • ייעוד שפה נפוצה
  • אוסף זבל
  • רק במהדר זמן
  • מטא נתונים ומכלולים
זמן ריצה של שפה משותפת נטו

1. מערכת מסוג נפוץ:

CTS מספק הנחיות להכרזה, שימוש וניהול סוגי נתונים בזמן ריצה. הוא מציע תקשורת בין שפות. לדוגמה, ל-VB.NET יש סוג נתונים שלמים, ול-C# יש סוג נתונים int לניהול מספרים שלמים. לאחר הקומפילציה, Int32 משמש את שני סוגי הנתונים. אז, CTS מספקת את סוגי הנתונים באמצעות קוד מנוהל. מערכת רגילה מסייעת בכתיבת קוד בלתי תלוי בשפה.

הוא מספק שתי קטגוריות של סוגים.

    סוג ערך:סוג ערך מאחסן את הנתונים בזיכרון שהוקצה בערימה או בשורה במבנה. קטגוריה זו של סוג מכילה את ספריית הנתונים. אם ערך של משתנה אחד מועתק לאחר, שני המשתנים מאחסנים נתונים באופן עצמאי. זה יכול להיות מסוגים מובנים, מוגדרי משתמש או סוגים של ספירות. טיפוסים מובנים הם סוגי נתונים פרימיטיביים כמו מספרים, בוליאניים, char ותאריך. משתמשים בקוד המקור יוצרים סוגים המוגדרים על ידי המשתמש. ספירה מתייחסת לקבוצה של ערכים מצוינים המיוצגים על ידי תוויות אך מאוחסנים כסוג מספרי.
    זמן ריצה של שפה משותפת נטו סוג התייחסות:סוג הפניה מאחסן הפניה לערך של כתובת זיכרון ומוקצה בערימה. זיכרון ערימה משמש להקצאת זיכרון דינמית. סוג הפניה אינו מחזיק ישירות נתונים בפועל אלא מחזיק את כתובת הנתונים. בכל פעם שנוצר אובייקט מסוג הפניה, הוא מעתיק את הכתובת ולא את הנתונים בפועל. לכן שני משתנים יתייחסו לאותם נתונים. אם הנתונים של אובייקט מסוג Reference אחד משתנים, אותו הדבר בא לידי ביטוי עבור האובייקט השני. סוגי הפניות יכולים להיות סוגים המתארים את עצמם, סוגי מצביעים או סוגי הפרעות. הסוגים המתארים את עצמם עשויים להיות סוגי מחרוזת, מערך ומחלקה המאחסנים מטא נתונים על עצמם.

2. מפרט שפה נפוצה (CLS):

מפרט שפה משותף (CLS) מכיל קבוצה של כללים שיש לפעול לפי כל השפות הנתמכות ב-NET. הכללים הנפוצים מקלים על הטמעת אינטגרציה של שפות ועוזרים בהורשה ובניפוי באגים בין שפות. לכל שפה הנתמכת על ידי NET Framework יש כללי תחביר משלה. אבל CLS מבטיח יכולת פעולה הדדית בין יישומים שפותחו באמצעות שפות NET.

3. איסוף אשפה:

אספן זבל הוא רכיב של CLR שפועל כמנהל זיכרון אוטומטי. זה עוזר לנהל את הזיכרון על ידי הקצאה אוטומטית של זיכרון בהתאם לדרישה. הוא מקצה זיכרון ערימה לאובייקטים. כאשר חפצים אינם בשימוש, הוא תובע בחזרה את הזיכרון שהוקצה להם לשימוש עתידי. זה גם מבטיח את בטיחותם של חפצים בכך שהוא לא מאפשר לאובייקט אחד להשתמש בתוכן של אובייקט אחר.

4. מהדר Just in Time (JIT):

מהדר JIT הוא מרכיב חשוב של CLR. הוא ממיר את קוד MSIL לקוד מקורי (כלומר, קוד ספציפי למכונה). תוכנית NET מורכבת באופן מפורש או מרומז. המפתח או המתכנת קורא למהדר מסוים כדי להדר את התוכנית בקומפילציה המפורשת. בהידור מרומז, התוכנית מורכבת פעמיים. קוד המקור מקומפל לתוך Microsoft Intermediate Language (MSIL) במהלך תהליך ההידור הראשון. קוד MSIL מומר לקוד מקורי בתהליך ההידור השני. תהליך זה נקרא קומפילציה של JIT. ישנם שלושה סוגים של מהדרים של JIT - Pre, Econo ו-Normal. Pre JIT Compiler מרכיב את כל קוד MSIL לקוד מקורי לפני הביצוע. Econo JIT Compiler מרכיב רק את החלקים של קוד MSIL הנדרשים במהלך הביצוע ומסיר את החלקים שאינם נדרשים יותר. מהדר JIT רגיל גם קומפילציה רק ​​את החלקים של קוד MSIL הנדרשים במהלך הביצוע, אך ממקם אותם במטמון לשימוש עתידי. זה לא מצריך הידור מחדש של חלקים שכבר השתמשו בהם מכיוון שהם הוצבו בזיכרון המטמון.

5. מטא נתונים:

Metadata הוא מידע בינארי על התוכנית, המאוחסן בקובץ CLR Portable Executable (PE) יחד עם קוד MSIL או בזיכרון. במהלך הביצוע של MSIL, מטא-נתונים נטענים לזיכרון גם לצורך פרשנות נכונה של מחלקות ודברים קשורים. מידע המשמש בקוד. אז, מטא נתונים עוזרים ליישם קוד בצורה ניטראלית בשפה או להשיג יכולת פעולה הדדית של השפה.

6. הרכבות:

הרכבה היא יחידה בסיסית של קיבוץ קוד פיזי. הוא מורכב ממניפסט ה-assembly, מטא נתונים, קוד MSIL וקבוצת משאבים כמו קבצי תמונה. זה נחשב גם ליחידת פריסה בסיסית, בקרת גרסאות, שימוש חוזר, הרשאות אבטחה וכו'.

פונקציות .NET CLR

להלן הפונקציות של ה-CLR.

  • זה ממיר את התוכנית לקוד מקורי.
  • מטפל בחריגים
  • מספק בטיחות סוג
  • ניהול זיכרון
  • מספק אבטחה
  • ביצועים משופרים
  • שפה עצמאית
  • עצמאית בפלטפורמה
  • איסוף זבל
  • מספק תכונות שפה כגון ירושה, ממשקים ועומס יתר עבור תוכניות מונחה עצמים.

הקוד שרץ עם CLR נקרא קוד מנוהל, ואילו הקוד שמחוץ ל-CLR נקרא קוד לא מנוהל. ה-CLR מספק גם שכבת Interoperability, המאפשרת הן לקודים המנוהלים והן לקודים הלא מנוהלים לפעול הדדית.

1. קוד מנוהל:

כל שפה שנכתבת במסגרת NET. היא קוד מנוהל. קוד מנוהל השתמש ב-CLR, אשר דואג ליישומים שלך על ידי ניהול זיכרון, טיפול באבטחה, מתן אפשרות איתור באגים בין שפות וכו'. תהליך הקוד המנוהל מוצג באיור:

זמן ריצה של שפה משותפת נטו

2. קוד לא מנוהל:

הקוד שפותח מחוץ למסגרת NET מכונה קוד לא מנוהל. יישומים שאינם פועלים תחת שליטת ה-CLR נחשבים לא מנוהלים. ניתן להשתמש בשפות מסוימות כמו C++ כדי לכתוב יישומים כאלה, כמו פונקציות גישה ברמה נמוכה של מערכת ההפעלה. תאימות רקע עם VB, ASP ו-COM הן דוגמאות לקוד לא מנוהל. קוד זה מבוצע בעזרת שיעורי עטיפה. תהליך הקוד הבלתי מנוהל מוצג להלן:

זמן ריצה של שפה משותפת נטו

גרסאות .NET CLR

ה-CLR מעדכן את עצמו מעת לעת כדי לספק ביצועים טובים יותר.

גרסת NET גרסת CLR
1.0 1.0
1.1 1.1
2.0 2.0
3.0 2.0
3.5 2.0
4 4
4.5 4
4.6 4
4.6 4

מבנה .NET CLR

להלן מבנה הרכיבים של Common Language Runtime.

זמן ריצה של שפה משותפת נטו

תמיכה בספריית כיתות בסיס

זוהי ספריית מחלקות התומכת בשיעורים עבור יישום NET.

תמיכה בשרשור

הוא מנהל את הביצוע המקביל של היישום מרובי ההליכים.

COM מרשלר

הוא מספק תקשורת בין אובייקטי ה-COM והאפליקציה.

מנוע אבטחה

הוא אוכף מגבלות אבטחה.

מנוע ניפוי באגים

זה מאפשר לך לנפות באגים מסוגים שונים של יישומים.

הקלד בודק

הוא בודק את הסוגים המשמשים באפליקציה ומוודא שהם תואמים לסטנדרטים שסופקו על ידי CLR.

מנהל קוד

הוא מנהל קוד בזמן ריצה.

אוסף זבל

הוא משחרר את הזיכרון שאינו בשימוש ומקצה אותו לאפליקציה חדשה.

מטפל חריגים

זה מטפל בחריג בזמן ריצה כדי למנוע כשל ביישום.

ClassLoader

הוא משמש לטעינת כל המחלקות בזמן ריצה.