הבלוג של ארתיום
בלוג על לינוקס, תוכנה חופשית, מוזיקה, סלסה, ומה לא!
לרגל שחרורו של gcc-4.4... חידושים ושיפורים.
לפני כחודש שוחררה גרסה חדשה של gcc: 4.4. אחד הדברים המעניינים זה התקדמות בתמיכה בתקן C++ החדש C++0x. הנה כמה תכונות מאוד מעניינות שכבר מזמן חיכיתי להן:
סוף־סוף, הגיע אחת התכונות הנחשקות ביותר --- תמיכה ב־auto, שחוסכת המון הקלדה מיותר ומקלה בצורה משמעותית על כתיבת קוד בלתי תלוי בקונטיינרים. לדוגמה, היום כך כותבים לולאה שמדפיסה איברי הרשימה:
for(list<int>::contst_iterator p=numbers.begin();p!=numbers.end();++p) { cout<< *p <<endl; }
ואם רוצים לשנות את סוג הקונטיינר מ־list ל־vector צריך לשנות את
list
ל־vector
בלולאה. עם טיפוס auto זה מתקצר בצורה משמעותית:for(auto p=numbers.begin();p!=numbers.end();++p) { cout<< *p <<endl; }
ובנוסף ל"קיצור" הכתיבה, אין שום אזכור של סוג הקונטיינר בלולאת for.
טיפוסי תווים חדשים. בסטנדרט הנוכחי יש בעיה משמעותית בהגדרת תווי unicode, או ליתר דיוק העדר הגדרה ראויה שלהם. כך
wchar_t
למעשה יכול להיות בגודל של 32 ביטים, 16 ביטים ואפילו 8 ביטים. למעשה, בסביבת Windows, wchar_t
הוא בגודל של שני בתים ומייצג utf-16 (או ucs-2), כאשר בכל סביבות ה־UNIX, wchar_t
מייצג נקודת קידוד בודדת והוא בגודל של 32 ביט. זה יוצר לא מעט בעיות בטיפול במחרוזות unicode. כי הקידוד של std::wstring לא ברור.התקן החדש הגדיר שני טיפוסי תווים חדשים:
char16_t
ו־char32_t
שמונעים את האי בהירות בנושא. כך שהעבודה עם std::u16string ו־std::u32string הופכת להרבה יותר שקופה. כך, בנוסף הוגדר ייצוג חדש למחרוזות:std::string normal="שלום"; // encoded as 8 bit std::wstring wide=L"שלום"; // utf16 or utf32 depending on your OS std::u16string utf16=u"שלום"; // utf16 encoded std::u32string utf32=U"שלום"; // utf32 encoded
כמובן, לא צריך לשכוח את התמיכה ב־Variadic templates שהתווספה ב־gcc-4.3, המאפשרת לבנות פונקציות typesafe עם מספר משתנה של פרמטרים בצורה בטוחה, קצרה ומהירה. התמיכה בהן מקצרת בצורה בסדר גודל את זמן הקומפילציה של תבניות כמו std::function או std::bind.
מבחינתי, יש עוד מספר תכונות שאני מחכה להן:
- תמיכה בביטויי למבדא.
- תמיכה ב־delegating and inheriting constructors שמקצרת בצורה משמעותית את הכתיבה של overloaded constructors.
- תמיכה ב־Concepts שייאפשר לספק פלט שגיאות הרבה יותר ידידותי.
- תמיכה מלאה ב־STL החדש, כולל regular expressions.
אני מקווה שזה לא ייקח הרבה זמן...
תגובות
בקיצור מנסים לגרום ל ++C להפוך להיות שפה דינמית. זה עוד יכול להיות הסוף של ++C או יותר נכון הפיטצ'רים שיפילו אותה סופית.
אתה מתבלבל בין static polymorphism, שזה כמו compile time duck typing שקיימת כבר שנים רבות ב־C++ ולמעשה אחד המרכיבים המרגזיים שלו, לבין שפה דינאמית.
כשאתה מציין auto, אתה יודע בפירוש באותה נקודה מהו טיפוס המשתנה, כל מה ש־auto חוסך לך זה כפילות של מידע.
לעומת זאת, כשאתה מציין a=c+b בשפות דינאמיות, אתה יודע מהו c ו־b רק בזמן ריצה, ורק בזמן ריצה תגלה מהי הבעיה.
להזכיר לך גם אתה כתבת פוסט על פסקל על שימוש בטיפוס מיוחד שמאפשר לקבל כל טיפוס והוא מבצע את ההמרות בעצמו...
הוסף תגובה:
חובה לאפשר JavaScript כדי להגיב.