לדלג לתוכן

‎.NET Framework

מתוך ויקיפדיה, האנציקלופדיה החופשית
(הופנה מהדף NET Framework.)
.NET Framework
מפתח מיקרוסופט
מחזור חיים 13 בפברואר 2002 – הווה (22 שנים)
גרסה אחרונה 4.8.1 (9 באוגוסט 2022) עריכת הנתון בוויקינתונים
מערכת הפעלה Microsoft Windows
סוג רישיון Proprietary; FCL under Microsoft Reference Source License
קטגוריה שכבת תוכנה
dotnet.microsoft.com/framework
לעריכה בוויקינתונים שמשמש מקור לחלק מהמידע בתבנית

NET Framework.דוט נט פריימוורק״ או ״תשתית דוט נט״) היא שכבת תוכנה של מיקרוסופט שבאמצעותה מקודדות ומורצות תוכנות אחרות. שכבה זו מספקת לתוכנות שרצות מעליה סט כלים ושירותים כגון: ניהול זיכרון, שליטה בהתקני קלט/פלט, הצפנת הודעות וכולי, כך שהמתכנתים אינם צריכים לכתוב ספריות עזר המספקות שירותים אלה, אלא רק את הלוגיקה העיקרית של התוכנה. בנוסף, שימוש בשכבת תוכנה זו (הנקראת גם "סביבה וירטואלית") מאפשר להריץ תוכנות על פלטפורמות שונות: חלונות, לינוקס, יוניקס, טאבלטים, טלפונים סלולריים וכולי, בלי צורך בשינוי קוד התוכנה, כי התוכנה "מדברת" רק עם הסביבה הווירטואלית, וסביבה זו כבר יודעת איך לדבר עם הפלטפורמה הספציפית. .NET הושקה ב־11 בפברואר 2002[1].

הפלטפורמה מספקת ממשק פיתוח אחיד הן לתוכנות שולחניות, לפיתוח אתרי Web, והן לתוכנות לסמארטפונים המריצים Windows Phone ואף מאפשרת לקשור ביחד התקני מחשוב שונים ולשתף ביניהם יישומים ומידע. היא פותחה כמענה תחרותי לארכיטקטורת J2EE מבית סאן מיקרוסיסטמס. בתחום התוכנות השולחניות, מספקת .NET ספרייה אחידה לפיתוח על כל משפחת מערכת ההפעלה חלונות, החל מגרסת Windows 98, במקום ממשקי תכנות היישומים של מערכות ההפעלה עצמן, או ספריית MFC.

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

שמה של הטכנולוגיה נלקח מסיומת האינטרנט שמציינת אתרים רשתיים, וזאת מכיוון שהטכנולוגיה פותחה בשיא בועת האינטרנט (אם כי גרסתה הרשמית הראשונה, גרסה 1.0, הוכרזה לאחר התפוצצות הבועה, בתחילת 2002). פלטפורמת פיתוח זו תומכת במגוון רב של שפות תכנות, ביניהן: #C, ‏VB.NET, ‏#F, שפת BOO ו-Vala. וגם מחוללי יישומים כדוגמת PowerBuilder וסביבות כמו דלפי, מאפשרים עבודה בסביבה זו.

יכולות ומרכיבים עיקריים

[עריכת קוד מקור | עריכה]
סקירה חזותית של ה-CLI
  • תפעוליות בינית (Interoperability): מאחר שלעיתים קרובות נדרשת יכולת לתקשר עם תוכניות ישנות שלא פותחו ב-NET., סביבת ה-NET. מאפשרת להשתמש בפונקציונליות שמבוצעת בתוכניות שפותחו מחוץ לסביבת .NET גישה לרכיבי COM מתאפשרת באמצעות מרחבי השם System.Runtime.InteropServices ו-System.EnterpriseServices וניתן לגשת לפונקציות אחרות באמצעות P/Invoke.
  • מנוע Common Runtime: שפות התכנות בסביבת NET. מהודרות לשפת ביניים הנקראת Common Intermediate Language ‏(CIL). במימוש של מיקרוסופט שפת ביניים זו אינה מפורשת אלא מהודרת בזמן ריצה (just-in-time; JIT) לשפת מכונה. צירוף רעיונות אלו נקרא Common Language Infrastructure, שאותו מימשה מיקרוסופט ב-Common Language Runtime ‏(CLR).
  • אי תלות בשפה: סביבת NET. משתמשת בתקן הנקרא Common Type System ובקיצור CTS. תקן זה מגדיר את כל טיפוסי הנתונים והמושגים התכנותיים הנתמכים על ידי ה-CLR וכיצד הם יתקשרו או לא יתקשרו זה עם זה. הודות לכך מאפשרת סביבת NET. המרת מופעים של טיפוסים בין שפות שונות שנתמכות ב-.NET.
  • ספריית מחלקות בסיסית (Base Class Library): ספריית מחלקות בסיסית הנקראת Base Class Library ובקיצור BCL היא חלק מ-Framework Class Library, היא ספרייה של מחלקות המספקת פונקציונליות שניתן להשתמש בהן בכל שפות ה-.NET ספרייה זו עוטפת פונקציות נפוצות כדוגמת קריאה וכתיבה של קבצים, ציור גרפי, תקשורת עם מסד נתונים ועבודה עם XML.
  • ניידות: התכנון של סביבת ה-NET. מאפשר ברמת התאוריה לפתח תוכנה שלא תהיה תלויה בפלטפורמה ושתעבוד במגוון פלטפורמות ללא צורך בהתאמת הקוד לכל אחת ואחת. מיקרוסופט פיתחה תמיכה בסביבת NET. בעבור Windows, Windows CE, ו-Xbox 360. הפירוט של ה-Common Language Infrastructure, של #C ושל C++/CLI מוגדר הן בתקני ECMA והן בתקני ISO, וכך יכולות חברות צד שלישי לפתח מימוש מתאים לסביבת NET. ולשפות התכנות שלה שיתאים לפלטפורמות אחרות.

פריסה ושכיחות

[עריכת קוד מקור | עריכה]

מיקרוסופט הגישה את טכנולוגיית .NET לגופי תקינה בינלאומיים, והיא תוקננה בתקן ECMA-335. טכנולוגיה זו שואבת חלק ניכר מעקרונותיה ואף מעיצוב מערכת האובייקטים שלה, מטכנולוגיית Java. בין היתר, היא משתמשת ברכיב החוצץ בין התוכנית המתבצעת לבין מערכת ההפעלה, המכונה Common Language Runtime, ושפתו נקראת Common Intermediate Language (בקיצור CIL, "שפת ביניים משותפת"). רכיב זה מהווה למעשה מכונה וירטואלית, המפרידה בין החומרה לתוכנה. רכיב זה מאפשר לפתח בשפות שונות ועבור מעבדים שונים, כל עוד השפה מהודרת לקובץ היכול לרוץ על ה־CLR. רכיב נוסף מהדר בדיוק בזמן (JIT – Just In Time) מהדר בזמן ריצה את קוד הביניים של המכונה הווירטואלית לקוד מכונה טבעי של המחשב הנוכחי, ומעניק ליישום יכולת להתבצע במהירות הקרובה למהירות של יישום שהודר לקוד מכונה טבעי, וזאת בדומה לשפת Java.

מיקרוסופט עצמה פיתחה את שפת C#, וכמו כן יצרה מחדש את שפת Visual Basic תוך התאמתה באופן מלא לעקרונות תכנות מונחה עצמים, והיא מכונה Visual Basic .NET עבור סביבת .NET כמו כן יצרה מיקרוסופט גרסה של Java המכונה J#, גרסה של JavaScript המכונה JScript ואף גרסה "מנוהלת" (Managed) ל-C++ המכונה Managed C++. יצירת גרסאות .NET לשפות קיימות נועדה להקל על מפתחים שכבר היו מורגלים בשפות אלה, להגר אל סביבת .NET בנוסף, חברות אחרות יצרו גם הן גרסאות של שפות אחרות שניתן להדר אל סביבת CLI, כמו למשל גרסת .NET של שפת דלפי. כמו כן פותחה שפה XSharp.

אחת מתוצאות תקנונו של ה־CLI היא שגם גופים אחרים רשאים לפתח מימוש של תקן זה. ואכן, קיימים לפחות שני פרויקטים בקוד פתוח לפיתוח סביבות .NET שלא יהיו קשורות למערכות החלונות דווקא – פרויקט מונו של חברת נובל ופרויקט דוט-גנו (GNU.). שני פרויקטים אלה מפתחים גרסאות של ה-CLI עבור מערכות לינוקס ומק, ומערכות אחרות, כך שבדומה לטכנולוגיית ג'אווה, תוכנה שפותחה על פלטפורמה אחת תרוץ על כל פלטפורמה אחרת עליה מותקנת ה־CLI. במקביל שפות פיתוח אופייניות לקוד הפתוח יצאו בגרסאות שעברו התאמה לסביבת הפיתוח של ה-.NET, כך למשל PHP יצאה בגרסה העונה לשם Phalanger.

גרסה מספר גרסה תאריך הפצה ויז'ואל סטודיו מופץ כברירת מחדל במערכת ההפעלה
1.0 1.0.3705.0 13 בפברואר 2002 Visual Studio .NET ללא
1.1 1.1.4322.573 24 באפריל 2003 Visual Studio .NET 2003 Windows Server 2003
2.0 2.0.50727.42 7 בנובמבר 2005 Visual Studio 2005 Windows Server 2003 R2
3.0 3.0.4506.30 6 בנובמבר 2006 Windows Vista, Windows Server 2008
3.5 3.5.21022.8 19 בנובמבר 2007 Visual Studio 2008 Windows 7, Windows Server 2008 R2
4.0 4.0.30319.0 12 באפריל 2010 Visual Studio 2010 ללא
4.5 4.5.50709.17929 15 באוגוסט 2012 Visual Studio 2012 Windows 8, Windows Server 2012
4.5.1 17 באוקטובר 2012 Visual Studio 2013 Windows 8.1, Windows Server 2012 R2
4.5.2 5 במאי 2014 Visual Studio 2015
4.6 20 ליולי 2015 חלונות 10
4.6.1 30 לנובמבר 2015
4.6.2 2 לאוגוסט 2016 Visual Studio 2017
4.7 5 לאפריל 2017
4.7.1 17 לאוקטובר 2017
4.7.2 30 לאפריל 2018
4.8 18 לאפריל 2019 Visual Studio 2019

בשנת 2020 הוכרז כי לא יפותחו עוד גרסאות משמעותיות של NET Frameowrk, ושהפיתוח הפעיל יעבור לNET., ממשיכתה של NET Core.[2]

  • תמיכה בפרוטוקול SOAP של ה-W3C, שמאפשר הפעלה ללא קשר בשפה מעל פרוטוקול HTTP.
  • תמיכה בחלוקת משימות בין שרת לתוכנת לקוח כגון דפדפן.
  • תמיכה בקריאה וכתיבה של קובצי XML
  • ממשק משתמש גרפי חלונאי. במימוש של מיקרוסופט, מדובר למעשה במעטפת לפונקציות ה-C של Windows עצמה האחראיות ליצירת ממשק המשתמש. במימוש של "מונו", ממשק המשתמש מצויר על ידי אובייקט ציור הגרפיקה של .NET
  • קריאה ל-API של מערכת ההפעלה מתוך התוכנית בצורה כמעט טבעית. פעולה לא טריוויאלית, בהתחשב בכך שה-API כתוב בשפת C, בעוד שפות .NET הן שפות אחרות, מוכוונות עצמים.
  • אובייקטים משותפים שבהן משתמשות כל השפות התומכות בסביבה זו.
  • אחד החסרונות העיקריים של הסביבה הוא שקוד ההרצה שהיא יוצרת הוא קוד ביניים קריא, שאפשר בכלים פשוטים להמירו לכל שפה ב-.NET, כך שההגנה על אלגוריתם והזכויות של מפתחיו, כמו גם חסימת עקיפת מנגנון בקרת רישוי תוכנה, הפכה להיות קשה יותר, מאשר בקוד מהודר של שפה טבעית. שיטת ההגנה המרכזית נקראת עירפול (obfuscation)(אנ'), שבו תוכן הקוד משונה לאותיות ומספרים חסרי משמעות. חברת מיקרוסופט נתנה את דעתה על בעיה זו והוציאה עם חבילת הסטודיו גרסה רזה של התוכנה בשם Dotfuscator, שיעודה לערפל קובץ הרצה (EXE,‏ DLL) שהודר בסביבת ה-.NET
  • יש הטוענים נגד הנפח הרב של גרסאות ההרצה בגרסאות 3 של ה-.NET בחלק ממערכות ההפעלה כדוגמת חלונות XP, כדי להריץ במחשב לקוח אפילו יישום קטן של ה-.NET בגודל של 100K שמשתמש בתקשורת WCF, יש צורך להוריד ולהתקין קובצי הפצה בנפח של מאות מגהבייט. (מכיוון שכל גרסה נבנתה אחת על השנייה, מי שרוצה להשתמש בתכונות המעודכנות בגרסה 3.5. צריך להתקין גרסה 3 בנפח 50 מגהבייט, גרסה 3.5 בנפח 197 מגהבייט ועוד 250 מגהבייט ל-NET 3.5 SP1.). בגרסה 4 של ה-.NET, בעיה זו תוקנה בחלקה (ונפח קובץ ההפצה שאיננו תלוי בגרסאות קודמות, עומד על 48 מגהבייט ל-x86 + x64). פתרון נוסף לבעיה זו הוצג בגרסה 4 של .NET והציע אפשרות לריצה תחת תת-קבוצה של רכיבי מערכת המכונה Client Profile. ריצה בפרופיל זה מוגבלת לשימוש בספריות התשתית הנפוצות באפליקציות לקוח ובכך מאפשרת הקטנה של נפח קובצי ספריות ההרצה שהמשתמש מחויב להתקין.
  • בעוד שטבעם של התקנים שמרכיבים את ה-.NET להיות חוצי פלטפורמות, יישום מלא של .NET נתמך רק על Windows. מיקרוסופט מספקת תמיכה מוגבלת עבור פלטפורמות אחרות כגון XNA עבור Xbox 360 ועבור Windows Phone 7, Silverlight, ו-Mac OS X. קיימים מימושים חלופיים של CLR, ספריות מחלקת בסיס ומהדרים (לפעמים של ספקים אחרים), אך בזמן שכל המימושים הללו מבוססים על אותם תקנים, הם עדיין מימושים שונים עם רמות שונות של שלמות, בהשוואה לגרסה המלאה של ה-.NET המשווקת בידי מיקרוסופט.

ב-2 באפריל 2014 מיקרוסופט הוציאה לאור גרסת בטא למהדר חדש בשם DotNET Native[3], המאפשר להדר קוד בשפת #C ו-VB.NET לקוד מכונה באופן ישיר (Native Code), ללא שימוש ב-JIT (מהדר דינמי – Just-In-Time Compiler). לפי מיקרוסופט, מהדר זה מתבסס על המהדר של ויז'ואל סטודיו לשפת ++C, והוא מהדר סטטי. מהדר זה מיועד ליישומי Windows Store בלבד (יישומים למחשבי לוח של מיקרוסופט), אך לפי מיקרוסופט, בעתיד המהדר יתמוך גם ביישומי "חלונות" למחשבים נייחים (Desktop Applications), אך הדבר לא התממש עד הרבעון הראשון של 2016.

היתרון הבולט במהדר זה הוא הביצועים – ניתן לכתוב קוד בשפת #C עם ביצועים דומים לקוד בשפת ++C, לפי מיקרוסופט. בנוסף לכך, מהדר זה מאפשר ל-#C לרוץ על מספר פלטפורמות שונות, ומקשה על פענוח לשפת המקור של הקובץ המהודר (Assembly Executable). יתרון נוסף הוא שאף על פי שהקוד הוא קוד מכונה, ניהול הזיכרון האוטומטי ושאר היתרונות של NET. עדיין מתאפשרים באופן מלא לחלוטין, בניגוד לשפות אחרות שמתהדרות לקוד מכונה (כדוגמת ++C). מהדר זה לא יחליף את מהדר ה-JIT, אך הוא יספק חלופה למהדר ה-JIT (ניתן לקבוע את סוג ההידור, JIT או Native, לפני ההידור).

ניהול זיכרון

[עריכת קוד מקור | עריכה]

ניהול הזיכרון של שפות המפותחות בסביבה זו נעשה באופן אוטומטי בניגוד לתכנות בשפה כדוגמת ++C. ה-CLR מספק שירותים לטיפול בנושא של הקצאת זיכרון דינמית. אובייקטים שהוקצו אינם דורשים ניקוי ידני בתום השימוש ויש מערכת של "איסוף זבל" שדואגת לפנות זיכרון של אובייקטים שכבר אינם בשימוש.

קישורים חיצוניים

[עריכת קוד מקור | עריכה]

הערות שוליים

[עריכת קוד מקור | עריכה]