מדוע צוברת שפת התכנות GO פופולריות רבה כל כך?

בשנת 2016 שפת GO, שהחלה כפיתוח פנימי בגוגל, הובילה עם העלייה הגבוהה ביותר במדד הפופולריות של שפות תכנות, בעיקר בגלל הפשטות שלה. אז מה הופך אותה לכל כך אהובה?

עיצוב: שלומי זיגורט

מאת אילנה בן ישי, Twistlock

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

השפה החלה להיכתב בשנת 2007 והוכרזה באופן רשמי בשנת 2009 על ידי חברת גוגל. אחד המוחות שמאחוריה הוא קן תומפסון, המעצב המקורי של יוניקס, שגם יצר את שפת B שהייתה השראה לשפת C. ל-GO של גוגל יש הפוטנציאל לשפר ולייעל את הפיתוח של אפליקציות ויישומים על ידי הפיכתו לפשוט יותר, אך מבלי לגרוע מרמת ביצועי היישומים. אנשי גוגל פיתחו את השפה למטרות פנימיות, כמו פיתוח של Kubernetes או google app, וכדי לפתור בעיות ידועות בתחום הפיתוח, בדגש על שיפור זמן קומפילציה, ניהול גרסאות יעיל ושיפור ניהול הזיכרון.

האם בגוגל באמת הצליחו לפתור את הבעיות האלה, ומה בדיוק הייחוד של GO לעומת שפות אחרות? הנה חמישה הבדלים שבזכותם היא הפכה לשפה כה פופולרית.

1. שחרור זכרון אוטומטי

לאופן ניהול הזיכרון יש השפעה עמוקה על הדרך שבה השפה מתנהלת בפועל. כאשר בוחרים לעבוד בצורה של שחרור זיכרון אוטומטי (garbage collection) יש תוספת משמעותית בעלויות שבאות לידי ביטוי במספר פרמטרים: תקורה גבוהה יותר (general overhead), מרווחי זמן גבוהים יותר (latency) ועלייה במורכבות של היישום. מפתחי השפה השקיעו ומשקיעים מאמץ רב בשיפור וייעול של שחרור זיכרון אוטומטי ותחום זה משתפר מגרסה לגרסה של שפת GO.

2. ספרייה סטנדרטית

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

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

3. תחביר

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

המפתחים בגוגל פיתחו שפה עם תחביר נקי ופשוט בהשוואה לשפות אחרות במשפחת C; הדקדוק של שפת GO הוא צנוע בגודלו ומכיל רק 25 מילות מפתח, וחשוב מכך – הוא קבוע וקל. התוצאה מקלה לא רק על מפתחים, אלא מייעלת את היכולת לשתף קוד בקהילה ולעבוד בצוותי פיתוח.

4. ניהול גרסאות

אפשר להגיד שבהשוואה למנגנוני ניהול גרסאות, כמו NPM או Bower, ב-GO ניהול הגרסאות פועל באופן שונה מהותית. הבעיה הנפוצה ביותר היא התנגשות בין אובייקטים שהגיעו מספריות בגרסאות שונות למקום אחד, שם עליהם לרוץ יחדיו (diamond dependency problem). ב-GO אין בעיה כזו משום שלא ניתן להגדיר שתי גרסאות שונות לאותה ספריה – לדוגמה, ספרייה D תהיה קיימת רק במקום אחד בגרסה יחידה, וכולם יתכוונו לאותה ספריית D כאשר ינסו להריץ אותה. כך מפתחים לא צריכים לנהל גרסאות ממקורות רבים ושונים, וכל פרויקט שרץ משתמש רק בספריות שהוא תלוי בהם וצורך אותם לאותו פרויקט.

5. קומפילציה

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

שפת GO צמחה והתפתחה בתוך גוגל למטרות פנימיות כמו פיתוח של Kubernetes, google app ועוד, אולם חברות רבות וטובות כמו Docker ו-Deis  בחרו לפתח את מוצריהן בשפת זו. השפה נולדה כצורך לפתור בעיות בהנדסת תוכנה שנחשפו בבנייה של תוכנות לשרתים גדולים, אולם הפשטות שלה, הפרודוקטיביות, הסמנטיקה ושאר היתרונות שלה גרמו לה לפרוץ את הגבולות ולהגיע לעוד ועוד חברות ומפתחים, ואין ספק שהיא תמשיך להתפתח ותהיה אחת המובילות בשפות התכנות.

 

כתב אורח

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

הגב

9 Comments on "מדוע צוברת שפת התכנות GO פופולריות רבה כל כך?"

avatar
Photo and Image Files
 
 
 
Audio and Video Files
 
 
 
Other File Types
 
 
 
Sort by:   newest | oldest | most voted
אורי
Guest

ומה עם שינוי התפיסה בעולם ה-concurency שיש בGO? את הקילר פיצ'ר הכי חשוב של השפה בכלל לא ציינו.
כל שאר הדברים שציינו כאן למעלה הם באמת נחמדים וnice to have אבל הכח המרכזי בשפה הוא ביצוע פעולות מקביליות ללא צורך ביצירת threads (פעולה יקרה שגוזלת הרבה מאוד resources) וללא צורך בסנכרון ביניהם (בלי ביצוע locks) בצורה מאוד פשוטה, built-in בתוך השפה.
באמצעות go למשל ניתן לשרת מיליוני בקשות "במקביל" משרת אחד לעומת שפות אחרות בהן היינו נחנקים על כמות הthreads אחרי כמה עשרות אלפי בקשות.
ולמי שמתעניין:
https://www.golang-book.com/books/intro/10

כל השאר זה תוספות נחמדות מאוד שיש בgo.

אילנה
Guest

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

Vitali Perchonok
Member
לא בדיוק. CSP (או goroutines) זה ממש לא רעיון חדש, הוא קיים משנות ה 70 נדמה לי.. אפשר לממש אותו בכל שפה ברמה זו או אחרת – ראה את core.async של clojure לדוגמה…. ת'ראדים הם לא "אטיים" או גוזלי משאבים אם משתמשים בהם נכון וכל מנגון concurrency משתמש בהם מתחת למכסה, כי זה מה שה OS שלך יודע.. (אפילו ל node יש thread pool). "להחנק מ threads" = ניהול משאבים נאיבי, זה פחות קשור לשפה ויותר למתכנתים.. כן נכון יש פלטפורמות שעושות את זה קל יותר, אבל לומר "לעומת שפות אחרות בהן היינו נחנקים" זה ממש.. איך לומר.. מביך :(… Read more »
אורי
Guest

כל מה שאמרת נכון ויפה, csp הוא באמת רעיון משנות ה-70 ואפשר לממש אותו בכל שפה רק שבgo הוא נמצא כבר built it בשפה ובצורה מאוד אלגנטית. ברוב השפות הפופולאריות תצטרך לעבוד הרבה יותר קשה בשביל לממש את המנגנונים שgo יתן לך בצורה מאוד אלגנטית. מימוש מנגנון concurrency באופן נכון הוא לא טריוויאלי כמו שאתה מתאר.

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

יובל
Guest

איפה אפשר ללמוד את השפה (קורס, או אונליין) ?

מיכאל
Guest

אחלה מקום להתחיל זה: https://tour.golang.org

אלי
Guest

השפה לא תומכת בחריגות ועדיין יש צורך במיוטקסים כשמבצעים חישוב מקבילי. בנוסף השפה היא איטית יותר מג'אווה ומשמעותית יותר מסי. ממליץ מאוד לבחון את ראסט שהיא הרבה יותר מהירה נוח ובאמת פתרה את עניין המיוטקסים בחישוב מקבילי:
http://rustbyexample.com/

מר עובדות
Guest

קצת עובדות במספרים ולא סתם מלים באויר
מהירות מול java
https://benchmarksgame.alioth.debian.org/u64q/go.html
כמו שאפשר לראות היא ברוב בדיקות go יותר מהירה מ-java.
מיוטקסים זה דרך לא יפה לעבוד ב-go. דרך נכונה ויפה יותר זה דרך channel. שיטה זאת מאוד נוחה וכבר עברה לכמה סיפריות בשפות אחרות כולל java.

תמיר
Guest

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

wpDiscuz

תגיות לכתבה: