אבולוציה של שפת תכנות

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

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

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

כידוע אני מתכנת מקצועי בשפת פסקל מונחת עצמים. כלומר פיזית הרווחתי כסף (וארוויח בעתיד) מתכנות בשפה. רגע זה לא נשמע טוב אשנה את המשפט: תכנתתי בצורה מקצועית בסביבת הפיתוח Delphi והרווחתי כסף מפיתוח בסביבה הזו. וואוו אם מכבסים מילים (כלומר לא יודעים את שם השפה) אז זה נשמע טוב יותר לא ?

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

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

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

פסקל גם יכולה להיות הבסיס לכל שפה הקיימת כיום, כלומר אם זו שפת C או ++C ואם אלו שפות דינמיות כדוגמת רובי.

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

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

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

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

8 מחשבות על “אבולוציה של שפת תכנות

  1. יורם

    C היא הג'וק ששורד אסון גרעיני …..

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

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

  2. אבים

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

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

  3. ik_5 מאת

    אבים מצטער שאני לא ברור. נתון שיש מצב מסויים. עכשיו יש לך תורה מסויימת אשר מסבירה מדוע יש מצב מסויים.

    נתון לך מצב איך המינים מתקיימים וכו'. ההסבר הוא תורת האבולוציה (שים לב שדיברתי על התורה).

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

  4. ארתיום

    אבולוציה של C הופכה אותה ל־C++‎ – ל"מין" חדש, שהיום מתפתחת מאוד מהר. אפילו שאתה לא יודע ולא אוהב את השפה, היא מאווווד שונה מ־C כך שאפילו אי אפשר להשוות ביניהן.

    ואני לא רואה C++‎ מתה בעשור הקרוב.

    להגיד שהיא שפה מצויינת. היא לא. C++‎ היא היא סוחבת המון זבל מאחוריה, יש לה המון חסרונות, היא מסובכת כך ש־80% מהמתכנתים יודעים 20% מהשפה. אבל… היא חיה ובועטת.

    הסיבה שגם C לא מתה ולא תמות בקורב, זאת העובדה שזאת שפה שממלא נישה מאוד חשובה בין שפת Assembly לשפות מאוד אבסטרקיות. אני לא אספר לך כמה קל לעשות אינטגרציה של כמעט כל ספריה שכתובה ב־C למערכות אחרות: Python, Perl, Ruby, Pascal, Java ועוד אלף ואחת פלטפורמות.

    זה אפשרי דווקא בגלל הפשוטת גולמית של השפה.

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

    בגלל זה אין לה תחליף.

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

    תראה עידו, בסופו של דבר שפות שורדות ומתות לאו דווקא בגלל שהן טובות או לא וטובות אלא בגלל הרבה סיבות נוספות לאו דווקא קשורות בשפה עצמה. עד היום קיים המון קוד ב־cobol וב־fortran ואנשים כותבים בשפות האלה למרות שאין להן שום הצדקה היום. למה? כי יש להן code-base ענק. כנ"ל ל־C יש code-base ענק שמבטיח השרדותה ובנוסף העדר תחרות בנישה שלה, יחזיק אותה בחיים שנים רבות.

    הערה לגבי

    בעוד שC נעצרה לפני הרבה מאוד שנים. אפילו תקן נוסף מלפני 11 שנים אינו נתמך אצל כולם כמו שצריך

    צר לי לאכזב אותך, חוץ מ־MSVC כול קומפיילר C שיצא לי לעבוד איתו (וכמובן הרבה מעבר ל־GCC) תומכים מצויין ב־C99. לגבי MSVC הם לא מפתחים C בגלל שהם רוצים שהוא ימות לטובת C++‎ או C#‎.

  5. עידו גנדל

    Object Pascal המודרנית היא אכן שפה חזקה מאד שלא זוכה למספיק הערכה, והיא ממשיכה להתפתח. אני רק תוהה לאן בדיוק. למיטב ידיעתי יש כיום רק שני כוחות שדוחפים אותה קדימה – אמברקדרו/דלפי ולזרוס/FPC, וכל אחד מהם דוחף לכיוון קצת אחר.

    כבר עכשיו יש אי-תאימות בנושא של מחרוזות (UTF16/8) ובעוד מספר נושאים, ונראה שה"מחויבות" של מפתחי FPC לשפה של דלפי פוחתת ככל שאמברקדרו מתברברים יותר עם המוצר. אני עוקב אחרי הנעשה בפורומים של שני הצדדים, ונראה ש-FPC מתחזק ככל שדלפי שוקעת בבוץ השיווקי ובעיכובי הפיתוחים. אם זה ימשיך ככה, יווצרו שני דיאלקטים שונים, שכל אחד מהם מוכר על ידי קומפיילר אחד ויחיד – מצב מאד לא בריא, בהשוואה למבחר הגדול של קומפיילרים וסביבות פיתוח לשפות נפוצות אחרות.

  6. ik_5 מאת

    זה לא מדוייק שיש לך רק 2 מהדרים לפסקל. יש לך למשל את http://www.remobjects.com/

    ויש עוד כמה חלקם מבוססים על FPC וחלקם לגמרי עצמאיים.

    הבעיה עם דלפי היא שהם הלכו לכיוון מיקרוסופט ו .NET מידי וירשו כמה דברים ממש לא טובים שם. כמו האפשרות לכתוב קוד לגמרי בעברית (בדלפי) למעט המילים השמורות. זה דבר איום ונורא.

    מה שמביא למאבק בין UTF-16 לבין UTF-8 הוא בעצם סוג של מאבק של ווינדוז מול לינוקס. ווינדוז משתמש ב 16 אם אני זוכר נכון. ד"א עוד סביבת פיתוח נחמדה בקוד פתוח לFPC היא MSEide היא ד"א עובדת בUTF-16. אבל לא תומכת עברית בכלל או דו כיווניות😦

    ד"א הרבה תכונות שנוספו ל FPC נוספו לפני שהם שוחררו בדלפי, ולכן יש הרבה חוסר תאימות בניהם. כמו שאתה רואה ברשימות דיוור (ב3 חודשים האחרונים אין לי זמן הרבה לקרוא אותם לצערי) המפתחים אומרים לך במפורש שהם מעדיפים להשקיע זמן בדברים חדשים מאשר לרדוף כל הזמן אחרי דלפי כאשר הם כבר מימשו משהו, או שהפיטצ'ר שיש בדלפי לא באמת תורם משהו אמיתי לפיתוח. למשל לעשות foreach על enum זה בסה"כ סוכר סינטטי, כי אתה פיזית יכול לעשות את זה עם for רגיל בפסקל בלי להתאמץ בכלל. ועוד הרבה דברים שלא באמת צריך אותם ולכן לא מוסיפים להם תמיכה.

  7. עידו גנדל

    כן, בדלפי הלכו על UTF-16 כי זה הייצוג ה"טבעי" ב-Windows, וזה הגיוני בהסתכלות צרה של פיתוח בסביבה זו בלבד. אבל שפת תכנות לא אמורה להיות תלוית-פלטפורמה (שמעתי על C#, ובכל זאת…), ומהלך כזה פוגע באפשרות ליצור תקן אחיד ל-Object Pascal. מה גם שאמברקדרו עצמם מתעניינים שוב, אם להאמין לשמועות, בריבוי פלטפורמות ולמעשה הם צריכים עכשיו לבלוע את הצפרדע שהם בעצמם יצרו.

    בגישה הנוכחית של מפתחי FPC נתקלתי כשגיליתי שאין שם "מתודות Record" כמו שיש בדלפי. הם טענו שזו כפילות פונקציונלית, ושבשביל זה יש class. טענה מוזרה, לטעמי, מצד אנשים ששילבו דברים כמו "+=" בשפה, שהם האם-אמא של סוכר סינטקטי…🙂

    RemObjects זה לא "פסקל-סקריפט"? שמעתי את השם הזה פעם, אבל לא התעמקתי. על MSEide לא שמעתי בכלל. בכל מקרה, אני בספק אם אפשר להגדיר אותם ככוחות מובילים בתחום.

  8. ik_5 מאת

    בקשר ל record ומתודות בפנים: אתה מוזמן לראות את הדיון שהיה לי עם שי כאן בפוסט הזה: https://idkn.wordpress.com/2008/06/12/%D7%94%D7%94%D7%91%D7%93%D7%9C-%D7%91%D7%99%D7%9F-%D7%9E%D7%97%D7%9C%D7%A7%D7%94-%D7%9C%D7%90%D7%95%D7%91%D7%99%D7%99%D7%A7%D7%98/

    מה ש FPC יצרו זה לא את התמיכה של += שאף אחד מאיתנו לא משתמש בזה שאני יודע לפחות (למרות שיש לזה שימושים, פשוט רובינו לא אוהבים להשתמש בהם כי אפשר גם אחרת), אלא הם יצרו את היכולת לבצע operator overload שזה נכנס להגדרה הזו. כלומר אני יכול ליצור לך אופרטור שיודע לחבר בין 2 אובייקטים שלמעשה הוא עושה את פעולת ה Assign של מחלקות (שזה שכפול ערכים אבל ללא שכפול האובייקט).

    RemObjects זה לא רק "פסקל סקריפט" (ב FPC יש לך אפשרות להשתמש בפסקל סקריפט שהוא בעצם התוצר של המפרש של המהדר רק כסקריפט, ולמרות זאת יש לךגם את האלטרנטיבה שלהם לFPC), יש להם פיזית מפרשים משלהם לפסקל כולל תחביר שקרוב יותר לדלפי, אבל הם המציאו גם תוספות שלא היו קיימות בדלפי ו FPC, עד כדי כך ש CodeGear בזמנו רצו למכור להם את דלפי, אבל זה לא יצא לפעול ואנחנו יודעים למי זה הגיע בסופו של יום. מה שכן, הם יודעים להתמששק להרבה מאוד סביבות כדוגמת מונו בלינוקס, ו Visual Studio בווינדוז, ואפילו לFPC ולזרוס ברמת המפרש שלהם (הם גם cross platform כמו שאתה מבין). הם מציגים תפיסה שונה. הם מתייחסים לפסקל כשפה דינאמית יותר מאשר שפה מקומפלת בצורה מזכירה את ג'אווה ו #C.

כתיבת תגובה

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

הלוגו של WordPress.com

אתה מגיב באמצעות חשבון WordPress.com שלך. לצאת מהמערכת / לשנות )

תמונת Twitter

אתה מגיב באמצעות חשבון Twitter שלך. לצאת מהמערכת / לשנות )

תמונת Facebook

אתה מגיב באמצעות חשבון Facebook שלך. לצאת מהמערכת / לשנות )

תמונת גוגל פלוס

אתה מגיב באמצעות חשבון Google+ שלך. לצאת מהמערכת / לשנות )

מתחבר ל-%s