ארכיון יומי: 16 אוגוסט, 2010

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

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

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

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

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

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

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

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

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

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

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

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

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