מה אני שונא ב־C++‎.

ב־21.12.2008, מאת ארתיום; פורסם תחת: פיתוח, תכנה ומחשבים, C++‎‏; ‏9 תגובות

אחד הדברים החשובים במלחמת "שפות/דתות" זה לדעת טוב מאוד את המגרעות של השפה. כך, כדי "לאזן" את הכתבות על C++‎ החלטתי לפרסם רשימת הדברים שאני שונא ב־C++‎.‏

  1. זמן קומפילציה --- נוראי. לפעמים כשאני מקמפל קוד C או Java אני לא מבין מה קורה? מדוע לחצתי על "Enter" והקמפול נגמר.
  2. קשה מאוד ליצור ספריות עם ABI תואם לאחור. כל שינוי קטן בממשק הורס תאימות לאחור. או צריך להמציא טריקים כמו "הסתרת מימוש" או לעבוד עם מחלקות אבסטרקטיות בלבד.
  3. שגיאות קומפילציה נוראיות: אני כבר מחכה ש־ConceptsGCC יתמזג לענף gcc הראשי --- שוב, חלק מ־C++Ox.‏
  4. מתכנתי C++‎ שאין להם מושג ירוק מה הם עושים.
  5. קוד C++‎ כתוב כמו קוד C... מקור מעולה לבאגים.
  6. ספריות "C++‎" שתואמות קומפיילרים טרם־היסטוריים --- ללא namespaces, ללא STL, ללא RTTI ועוד. (למשל ממשק C++‎ של BDB).‏
  7. ספריות שממציאות גלגל מחדש: בא לנו string משופר, רשימה מקושרת משופרת ועוד -- אבל הורסות את התאימות עם שאר הספריות.
  8. עבודה עם ספריות C מתוך C++‎ --- כי ב־C אין destructors ואז הקוד הופך לספגטי של try/catch. או צריך לעטוף כל שטות במחלקה. מצד שני, אי אפשר לוותר על זה, כי יש המון ספריות מעולות, מדובגות ונפוצות הן ספריות C.‏
  9. אני שונא iostreams -- הם מסובכים, לא נוח לעבוד עם format, לא נותנים גישה ל־file descriptors כמו FILE של C.‏ מצד שני, הם הפתרון הטוב ביותר לעבודה אחידה מול streamים שונים -- למשל, כתיבה לקטע בזיכרון, כתיבה ל־socket ועוד.
  10. כתיבת טיפוסים של iterators --- אני כבר מחכה ל־auto של C++0x.‏
  11. קומפיילרים גרועים --- ראה ערך VS6 שאני לא מבין מדוע אנשים עדיין משתמשים בו.

אני מעביר את השרביט ל:

הסבר: הכוונה היא --- לתת ביקורת על מה שאפשר היה לשפר בשפה, או מה שלא ניתן לשנות וזה לפעמים מפריע.

תגובות

ליאור קפלן, ב־21.12.2008, 9:56

בתור איש System, הייתי מציע לכתוב פוסט סיכום לסדרה - "מה אני שונא בתכנות| (:

ארתיום, ב־21.12.2008, 10:13

בתור איש System, הייתי מציע לכתוב פוסט סיכום לסדרה - "מה אני שונא בתכנות| (:

אתה מוזמן :)

עידו, ב־21.12.2008, 11:41

1 הזכיר לי את הקומיקס הבא: http://xkcd.com/303/ :)

מאיר, ב־22.12.2008, 10:55

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

  • חלק לא קטן היה ארגון ה-namespace בספריה הסטנדרטית, שסודר בפייתון 3 (לדעתי היה אפשר ללכת עוד טיפה רחוק)
  • היה הנושא של יוניקוד ומחרוזות שהיה מקור לבעיות לא צפויות, מסודר יותר בפייתון 3
  • היה דברים קטנים (כמו ביטויים ליצירת מילונים, בדומה ל-list comprehension) שגם קיבלו מענה בפייתון 3
  • בעיקר מפריע לי נושא האריזה ו-deploy של העסק ותלויות למערכות הפעלה מגוונות שלא כוללות פייתון וספריות נדרשות (דוגמא: אפליקציית pygtk או pyqt). אבל את זה יש לי גם עם סביבות אחרות (לדעתי אלו שפתרו את זה הכי יפה היו בורלנד בדלפי, אבל גם שם את ה-BDE היה צריך להפיץ, לפחות ניתן היה לשלב בתוכנת ההתקנה). ראו מאמר של Ian Bicking בנושא
  • ותמיד אפשר לשפר מהירות וזמן אתחול
ארתיום, ב־22.12.2008, 14:07

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

להגיד את האמת, די התאכזבתי מנושא של Unicode ב־python. אני לא מבין מדוע הם הלכו על עבודה עם utf16 ולא utf-32 או אפילו utf8. זה מתכון לצרות.

מאיר, ב־22.12.2008, 16:41

תבדיל בין אחסון פנימי לקידוד (utf-8 וכד' הם קידודים). האחסון הפנימי תלוי איך בנו את פייתון עצמו (--with-wide-unicode‏).

utf-32 מופיע ברשימת הקידודים של 3.

דותן דימט, ב־25.12.2008, 20:20

נקודות 1+2 שלך (איטיות הקימפול, ה-ABI המבורדק) קשורות לנקודה 6 - התמיכה במלוא האפשרויות ב-C++ גורר בהכרח המון עבודה מצד הקומפיילר (והודעות שגיאה מרהיבות בעירפולן, לפחות ב-gcc). מצד שני, תוצרי הקומפילציה נראים כמו תוצרי קומפילציה של C, והעבודה איתם (כלומר, דיבוג) מאוד לא נוחה.

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

אני לא גבור, אבל יש כמה דברים שאני לא אוהב ב-Perl:

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

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

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

  • התחביר המכוער והלא-אינטואיטיבי של הצבעות (references)

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

ik_5, ב־29.12.2008, 15:49

קצת מאוחר, אבל עדיף מאוחר מאשר לעולם לא :)

ובכן אני גם יכול לכתוב מה אני לא אוהב בהרבה שפות. אבל בפסקל:

  1. העדר תקן חדש שיתן התפתחות נורמלית לכל המהדרים.

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

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

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

aaa, ב־24.9.2013, 14:53

אני מעוניין בפיתוח תוכנה אך אני יכול ליצור קשר איתך לדבר

הוסף תגובה:

 
 כתובת דוא"ל לא תוצג
 

ניתן לכתוב תגובות עם שימוש בתחביר Markdown.

חובה לאפשר JavaScript כדי להגיב.

דפים

נושאים