הבלוג של ארתיום
בלוג על לינוקס, תוכנה חופשית, מוזיקה, סלסה, ומה לא!
שפת תכנות לא משנה...
מאז שהמציאו שפת תכנות ראשונה ממשיכים למצוא את השפה האולטימטיבית שתפתור לנו את כל הבעיות:
- תהיה מהירה
- תהיה פשוטה
- תהיה חזקה
- תהיה ברורה
- תהיה נוחה
- תכין לנו קפה לארוחת הבוקר...
אז נגיד מחר אני אצליח ליצור שפה חדשה:
- מהירה כמו C או C++
- קלה להבנה כמו Java או Pascal
- גמישה כמו Python או JavaScript
- ועוד כמה תכונות נוספות שתרצו לפרט
ואז כשיהיה לי מהדר (או משערך) אולטימטיבי שיעבוד על כל מערכת הפעלה ובכל סביבה החל ממערכות משובצות עד מחשבי על, החל מ־ARM עד ל־Itanium ואפתח IDE אולטימטיבי יהפוך אותי לפרודוקטיבי־על, אני אתחיל לעבוד...
מה יקרה?
רוב המפתחים היום לא כותבים אלגוריתמים הם כותב אפליקציות. רוב המפתחים היום צריכים לדעת את הספריות שלהם יותר טוב מהשפה, למתכנת GUI ממוצא יותר חשוב להבין אין עובד Qt מאשר לדעת כיצד לעשות partial template specialization. למתכנת יישומי עיבוד תמונה ב־Matlab יותר חשוב לזכור את הפונקציות שמבצעות convolution על מטריצה, מאפשר לזכור כיצד להגדיר מחלקות. למפתח Web יהיה יותר חשוב לדעת כיצד לייצר טופס, מאשר כיצד להשתמש בפונקציות למבדה.
בסופו של דבר גם אם פיתחת שפת־על אתה צריך כלים. ואם אין לך כלים השפה תמות.
זאת הסיבה רוב השפות שנולדות לאחרונה הן רצות על JVM או על .Net או כמו Vala משתמשות באוסף הספריות העשיר של Gnome כדי להיות פרודוקטיבי.
ומה עם "שפות־העל" שפותחו והמון מחשבה הושקעה בהן כמו, למשל, D? הן לא התרוממו.
למעומת זאת, שפות "עתיקות" כמו C ממשיכות להתקיים והמונים כותבים בהן. Vala בזכות האימוץ המלבב של GTK ו־GObject תופסת תאוצה. Go? כנראה לא תתרומם בקרוב בלי השקעה אדירה.
במילים אחרות.
זה נחמד אם תהיה שפה חדשה שתפתור לנו את כל הבעיות האפשריות, אבל אם היא לא "תירש" בצורה אוטומטית או חצי אוטומטית SDK עשיר, היא לא תחיה הרבה.
תגובות
פסקל, מהירה כמו C, קריאה כמו פיתון, ובעלת הרבה כוח כמו שפות דינאמיות, מסוגלת לרוץ על הרבה מעבדים, וסביבות. ויש לה המון כלים ספריות וכו'...
אני לא מבין למה צריך עוד שפה :P
+1 לעידו. אם כבר שפה סטטית ומהודרת, object pascal עדיפה לטעמי, גם מבחינת תחביר ובהירות קוד,.
מילא ש-Go לא תופסת תאוצה, אפשר עוד להתווכח למה בדיוק קוראים תאוצה (פיתוח לחלונות, ופיתוח מהדר ל-Go שכתוב ב-Go, ע"י הקהילה, Appengine ב-Go, הם לדעתי די תאוצה).
אבל לומר ש-Vala תופסת תאוצה יותר מ-Go? על זה נאמר Citation needed. אשמח לשמוע הסבר.
איבוד תמונה - זו טעות הקלדה או שמא ציניות או כוונה אחרת?
לעתים שפה חדשה באה להתאים לצרכים שלא היו קיימים בעבר.
ג'אבה כידוע באה לתת מענה על פיתוח יחיד לפלטפורמות רבות. C# באה להתחרות בה...
Perl, PHP וכדומה, השתלבו בצורה טובה לתוך תחום חדש. אני לא מנסה לנתח כרגע את ההגדרות המדוייקות, אבל נראה כי מהירות פיתוח ותחזוקה על חשבון יעילות (צריכת משאבי מחשוב) הם המאפיינים העיקריים של שפות אלו מול שפות תכנות מסורתיות. ASP/.NET באה להתחרות גם בתחום זה...
JavaScript באה לתת אפשרויות בסיסיות למימוש בדפי אינטרנט (ובהמשך כמובן התרחבה עד לכדי שפה השולטת במינשק הגרפי). JScript באה כמובן להתחרות בה...
אסמבלי נשארה וכנראה לעד תשאר, שפת סף לתכנות גרעיני מערכות הפעלה, מכשירים מזעריים ביותר וכדומה.
על פניו נראה כי השפות שמייקרוסופט מנסים לפתח, באים בעיקר להתחרות, ואולי גם כדי לדאוג שהעולם לא יהיה מושלם מדי, להכניס לאוסף השפות עוד שפה מסורבלת שכאילו יודעת לעשות הכל, אבל בחוסר יעילות גרוע מהשפה בה היא באה להתחרות. [זה לא בהכרח תמיד נכון].
לא צריך הרבה: זאת כמות החבילות Source שהן build-depends בקומפיילר של שפה ספציפית ב־Ubuntu 11.10:
אני חושב שמספרים מדברים בעד עצמם, חוץ מזה היום חלק גדול מיישומי Gnome החדשים כתובים ב־Vala, Unity כתוב גם בחלקו ב־Vala.
כן רק שהיא כל־כך Verbose שלידה Java נראית לקונית. אולי היא יותר קריאה, רק שבשבילה צריך לקרוא פי כמה יותר בהשוואה לשפות אחרות (אפילו C)
הסבר פשוט: היא נותנת לך את כל ה־GTK/Glib/GObject בחינם יחד עם שפה פשוטה מהירה ומודרנית.
כמו שאמרתי... הכל בסופו של דבר מסתכם ב־Toolkit וב־Vala יותר קל לכתוב יישומי GTK מאשר ב־C
איני מצליח לראות איך פסקל יותר verbose מג'אווה (או אפילו c++), מספיק להשוות דבר פשוט כמו פלט של שורה.
להסתכל רק ביישומים באובונטו זו משקפת צרה מדי. אולי נסתכל בגיטהב? שם התמונה הפוכה. אולי במספר החברות המסחריות שמשתמשות בשפה? מי עוד משתמש בואלא פרט לקנוניקל לגו יש כמה חברות שמשתמשות בה.
http://blog.golang.org/2011/04/go-at-heroku.html
פסקל נבנתה עבור single-pass-compiler אתה חייב להגיד כל משתנה במקום מסוים, אתה אפילו חייב להגדיר labels. הגישה של OOP שלהם חייבת גם לקרוא constructor וגם destructor אופן מפורש, וגם לנהל זיכרון באופן מפורש.
להמשיך?
פסקל היא Single pass. כן. כמו C. גם ב C וגם אפילו בפיתון, אתה צריך להגדיר משתנים במקום מסויים. מה שאני מאוד אוהב בפסקל ולא אוהב בשאר השפות, זה לקרוא קוד ופתאום לגלות שם של משתנה שהגיע משום מקום וללכת אחורה להבין מאיפה הוא נפל עלי.
אני לא מבין את הטענה שלך לגבי כך שאני חייב לקרוא ל constructor ו destructor באופן מפורש, או ניהול זיכרון באופן מפורש.
אתה מפשט משהו שאתה לא באמת מבין אותו. ה Constructor בפסקל הוא לא יוצר זיכרון, הוא סוג של Callback מסויים. גם ה Destructor של פסקל הוא סוג של CallBack אשר משחרר זיכרון רק שאתה קשור אליו ושמוגדר ב TObject. זו הסיבה שאתה אמור לעשות ירושה שלו בסוף, אבל לא חייב.
אבל אתה לא מנהל זיכרון של מחלקה (כלומר class). בשביל זה יש לך את TObject שהוא המחלקה הכי בסיסית שיש שהיא עושה את הדברים.
אם אתה רוצה התנהגות זהה ל ++C, אז יש לך עוד סוג של גישה, והיא עובדה במקום object (המילה) במקום המילה class. שם, נכון אתה מנהל הכל לבד.
ד"א גם בג'אווה, ואפילו ברובי, יש מצבים בהם אתה צריך לשחרר את הזיכרון של מה שאתחלת. למשל כרגע אני מתמודד עם באג של זליגת זיכרון של ספריית רובי שפריימוורק שאני משתמש בו משתמש באותה ספרייה.
מצטער ארתיום, אבל אתה נעול מידי בעולם ++C ולא יודע איך דברים עובדים עד הסוף בשאר השפות.
הוסף תגובה:
חובה לאפשר JavaScript כדי להגיב.