סוויפט לעומת מטרה C: 10 סיבות שהעתיד מעדיף את סוויפט

שפות תכנות אינן מתות בקלות, אך חנויות פיתוח הנצמדות לפרדיגמות דועכות כן. אם אתה מפתח אפליקציות למכשירים ניידים ולא חקרת את סוויפט, שים לב: סוויפט לא רק תחליף את Objective-C כשמדובר בפיתוח אפליקציות עבור Mac, iPhone, iPad, Apple Watch ומכשירים שיבואו, אך הוא יחליף גם את C לתכנות משובץ בפלטפורמות של אפל.

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

נראה שלאפל יש יעדים גדולים עבור סוויפט. היא מיטבה את המהדר לביצועים ולשפה להתפתחות, והיא רומזת לכך שסוויפט "נועדה להתמקד מ'הלו, עולם 'למערכת הפעלה שלמה" בתיעוד של סוויפט. אפל אמנם עדיין לא הצהירה על כל יעדיה בשפה, אך ההשקות של Xcode 6, Playgrounds ו- Swift מסמנות יחד את כוונתה של אפל להפוך את פיתוח האפליקציות לקל יותר ונגיש יותר מאשר בכל שרשרת כלי פיתוח אחרת.

הנה 10 סיבות להקדים את המשחק על ידי התחלת העבודה עם סוויפט עכשיו.

1. קל יותר לקרוא את סוויפט

Objective-C סובל מכל היבלות שהיית מצפה משפה הבנויה על C. כדי להבדיל בין מילות מפתח וסוגים מסוג C, Objective-C הציגה מילות מפתח חדשות באמצעות הסמל @. מכיוון ש- Swift אינה בנויה על C, היא יכולה לאחד את כל מילות המפתח ולהסיר את הסמלים @ המרובים מול כל סוג Objective-C או מילת מפתח הקשורה לאובייקטים.

סוויפט מפיל מוסכמות מורשת. לפיכך, אינך צריך עוד נקודה-פסיק כדי לסיים שורות או סוגריים כדי להקיף ביטויים מותנים בתוך הצהרות אם / אחר. שינוי גדול נוסף הוא שקריאות שיטה אינן מקננות זו בזו וכתוצאה מכך גיהנום בסוגריים - להתראות [[[ ]]],. שיטות ושיחות פונקציות ב- Swift משתמשות ברשימת הפרמטרים המופרדים בפסיקים בתקן התעשייתי. התוצאה היא שפה נקייה יותר, אקספרסיבית יותר עם תחביר ודקדוק פשוטים יותר.

קוד מהיר דומה יותר לאנגלית טבעית, בנוסף לשפות תכנות מודרניות פופולריות אחרות. הקריאה הזו מקלה על מתכנתים קיימים מ- JavaScript, Java, Python, C # ו- C ++ לאמץ את סוויפט לשרשרת הכלים שלהם - בניגוד לברווזון המכוער שהיה Objective-C.

2. קל יותר לתחזק את סוויפט

מורשת היא מה שמחזיק את Objective-C - השפה אינה יכולה להתפתח בלי ש- C תתפתח. C מחייבת מתכנתים לתחזק שני קבצי קוד על מנת לשפר את זמן הבנייה והיעילות של יצירת האפליקציה להפעלה, דרישה המועברת ל- Objective-C.

סוויפט מורידה את הדרישה לשני קבצים. Xcode והמהדר LLVM יכולים להבין תלות ולבצע בנייה מצטברת אוטומטית ב- Swift 1.2. כתוצאה מכך, המשימה החוזרת ונשנית על הפרדת תוכן העניינים (קובץ הכותרת) לגוף (קובץ הטמעה) היא נחלת העבר. סוויפט משלבת את כותרת Objective-C (.h) וקבצי יישום (.m) לקובץ קוד יחיד (.swift).

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

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

3. סוויפט בטוחה יותר

היבט מעניין אחד של Objective-C הוא האופן שבו מטפלים במצביעים - במיוחד במצבי אפס (null). ב- Objective-C, שום דבר לא קורה אם אתה מנסה לקרוא לשיטה עם משתנה מצביע שהוא אפס (לא מאוגד). הביטוי או שורת הקוד הופכים ללא פעולה (no-op), ולמרות שזה אולי מועיל שהוא לא מתרסק, זה היה מקור עצום של באגים. אי-פעולה מוביל להתנהגות בלתי צפויה, שהיא האויב של מתכנתים המנסים למצוא ולתקן התרסקות אקראית או לעצור התנהגות לא יציבה.

סוגים אופציונליים הופכים את האפשרות של ערך אופציונלי אפס לברור מאוד בקוד Swift, מה שאומר שהוא יכול ליצור שגיאת מהדר בזמן שאתה כותב קוד רע. זה יוצר לולאת משוב קצרה ומאפשרת למתכנתים לקודד בכוונה. ניתן לתקן בעיות תוך כדי כתיבת קוד, דבר המפחית מאוד את משך הזמן והכסף שתשקיעו בתיקון באגים הקשורים ללוגיקת המצביע מ- Objective-C.

באופן מסורתי, ב- Objective-C, אם ערך הוחזר משיטה, הייתה האחריות של המתכנת לתעד את ההתנהגות של משתנה המצביע שהוחזר (באמצעות הערות ומוסכמות למתן שיטות). ב- Swift, הסוגים האופציונליים וסוגי הערך מבהירים במפורש בהגדרת השיטה אם הערך קיים או אם יש לו פוטנציאל להיות אופציונלי (כלומר, הערך עשוי להתקיים או שהוא עשוי להיות אפסי).

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

4. סוויפט מאוחדת עם ניהול זיכרון

סוויפט מאחדת את השפה באופן שלא הייתה למטרה C מעולם. התמיכה בספירת הפניות אוטומטית (ARC) הושלמה במסלולי קוד פרוצדורליים ומכווני עצמים. ב- Objective-C, ARC נתמך בתוך ממשקי ה- API של Cocoa והקוד המכוון לאובייקטים; זה לא זמין, עם זאת, עבור קוד C פרוצדורלי ו- API כמו Core Graphics. פירוש הדבר שהוא הופך לאחריות המתכנת לטפל בניהול זיכרון בעבודה עם ממשקי ה- API של Core Graphics וממשקי API אחרים ברמה נמוכה הזמינים ב- iOS. דליפות הזיכרון העצומות שיכולות להיות למתכנת ב- Objective-C אינן אפשריות בסוויפט.

מתכנת לא צריך לחשוב על זיכרון עבור כל אובייקט דיגיטלי שהוא יוצר. מכיוון ש- ARC מטפל בכל ניהול הזיכרון בזמן הקומפילציה, כוח המוח שהיה הולך לניהול זיכרון יכול במקום להתמקד בלוגיקה מרכזית של אפליקציות ותכונות חדשות. מכיוון ש- ARC ב- Swift עובד על פני קוד פרוצדורלי וגם מונחה עצמים, אין צורך במתגי הקשר נפשיים יותר עבור מתכנתים, גם כאשר הם כותבים קוד שנוגע בממשקי API ברמה נמוכה יותר - בעיה בגרסה הנוכחית של Objective-C.

ניהול זיכרון אוטומטי וביצועים גבוהים הוא בעיה שנפתרה, ואפל הוכיחה שהיא יכולה להגדיל את התפוקה. תופעת הלוואי השנייה היא שגם Objective-C וגם Swift אינם סובלים מ- Garbage Collector שפועל לנקות זיכרון שאינו בשימוש, כמו Java, Go או C #. זהו גורם חשוב לכל שפת תכנות שתשמש לגרפיקה רספונסיבית ולהזנת משתמשים, במיוחד במכשיר מישוש כמו ה- iPhone, Apple Watch או iPad (שם השהיה מתסכלת וגורמת למשתמשים לתפוס אפליקציה מקולקלת).

5. סוויפט דורשת פחות קוד

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

מערכת הסוגים בסוויפט מפחיתה את המורכבות של הצהרות קוד - מכיוון שהמהדר יכול להבין סוגים. כדוגמה, Objective-C דורש מתכנתים לשנן אסימונים מחרוזת מיוחדת ( %s, %d, %@) ולספק רשימה מופרדת בפסיקים של משתנים כדי להחליף כל אסימון. סוויפט תומכת באינטרפולציה של מחרוזות, מה שמבטל את הצורך בשינון אסימונים ומאפשר למתכנתים להכניס משתנים באופן ישיר למחרוזת הפונה למשתמש, כמו תווית או כותרת כפתור. מערכת הסקת הסוגים ואינטרפולציה מחרוזת מקלים על מקור נפוץ של קריסות הנפוצים ב- Objective-C.

עם Objective-C, בלגן בסדר או שימוש באסימון מחרוזת שגוי גורם לאפליקציה לקרוס. כאן, סוויפט שוב ​​מפנה אתכם מעבודת הנהלת חשבונות, מתרגם לקוד פחות לכתוב (קוד שכעת פחות נוטה לשגיאות) בגלל התמיכה המוטבעת שלו במניפולת מחרוזות טקסט ונתונים.

6. סוויפט מהירה יותר

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

על פי Primate Labs, יצרני כלי הביצועים הפופולרי GeekBench, סוויפט התקרבה למאפייני הביצועים של C ++ למשימות מחויבות בחישוב בדצמבר 2014 באמצעות אלגוריתם Mandelbrot.

בפברואר 2015, Primate Labs גילו כי ה- Xcode 6.3 בטא שיפר את ביצועי סוויפט באלגוריתם GEMM - אלגוריתם הכרוך בזיכרון עם גישה רציפה של מערכים גדולים - בגורם 1.4. ליישום ה- FFT הראשוני - אלגוריתם עם זיכרון עם גישה אקראית למערכים גדולים - היה שיפור ביצועים פי 2.6.

שיפורים נוספים נצפו ב- Swift על ידי יישום שיטות עבודה מומלצות, שהביאו לעלייה של פי 8.5 לביצועי אלגוריתם FFT (והשאיר C ++ עם רווח ביצועים של 1.1 פעמים בלבד). השיפורים אפשרו גם לסוויפט לבצע ביצועים טובים יותר מ- C ++ באלגוריתם Mandelbrot בפקטור 1.03 בלבד.

סוויפט כמעט שווה ל- C ++ גם לאלגוריתמים FFT וגם לאלגוריתמים של Mandelbrot. על פי Primate Labs, ביצועי האלגוריתם של GEMM מצביעים על כך שמהדר המהיר של Swift אינו יכול לקבע את קוד המהדר C ++ - רווח ביצועים קל שאפשר להשיג בגירסה הבאה של Swift.

7. פחות התנגשויות שמות עם פרויקטים של קוד פתוח

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

Swift מספקת מרחבי שמות מרומזים המאפשרים לאותו קובץ קוד להתקיים על פני מספר פרויקטים מבלי לגרום לכשל בנייה ודורשים שמות כמו NSString (השלב ​​הבא - חברת סטיב ג'ובס לאחר שפוטרה מאפל) או CGPoint (Core Graphics). בסופו של דבר, תכונה זו ב- Swift שומרת על מתכנתים פרודוקטיביים יותר ומשמעותה שהם לא צריכים לבצע את הנהלת החשבונות שקיימת ב- Objective-C. אתה יכול לראות את ההשפעה של סוויפט עם שמות פשוטים כמו מערך, מילון ומחרוזת במקום NSArray, NSDictionary ו- NSString, שנולדו מחוסר מרחבי שמות ב- Objective-C.

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

8. סוויפט תומכת בספריות דינמיות

השינוי הגדול ביותר ב- Swift שלא זכה לתשומת לב מספקת הוא המעבר מספריות סטטיות, המתעדכנות במהדורות נקודתיות (iOS 8, iOS 7 וכן הלאה) לספריות דינמיות. ספריות דינמיות הן נתחי קוד הניתנים להפעלה הניתנים לקישור לאפליקציה. תכונה זו מאפשרת ליישומי Swift הנוכחיים לקשר עם גרסאות חדשות יותר של שפת Swift ככל שהיא מתפתחת לאורך זמן.

היזם מגיש את האפליקציה יחד עם הספריות, שתיהן חתומות דיגיטלית עם תעודת הפיתוח כדי להבטיח שלמות (שלום, NSA). פירוש הדבר ש- Swift יכולה להתפתח מהר יותר מ- iOS, שזו דרישה לשפת תכנות מודרנית. ניתן לכלול שינויים בספריות עם העדכון האחרון של אפליקציה ב- App Store, והכל פשוט עובד.

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

היכולת לדחות את הטעינה באפליקציה לנייד או באפליקציה מוטמעת ב- Apple Watch תשפר את הביצועים הנתפסים למשתמש. זו אחת ההבחנות שגורמות למערכת האקולוגית של iOS להרגיש יותר מגיבה. אפל התמקדה בטעינת נכסים, משאבים בלבד, וכעת קוד מקובץ ומקושר במהירות. הטעינה תוך כדי טיסה מצמצמת את זמני ההמתנה הראשוניים עד שנדרש ממש משאב שיוצג על המסך.