לרגל שחרורו של gcc-4.4... חידושים ושיפורים.

ב־יום ראשון, 17 במאי 2009, מאת ארתיום; פורסם תחת: תכנה חופשית, פיתוח, תכנה ומחשבים, C++‎‏, Unicode; ‏3 תגובות

לפני כחודש שוחררה גרסה חדשה של 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.

אני מקווה שזה לא ייקח הרבה זמן...

"האח הגדול" בהתנדבות ושמו Facebook.

ב־יום רביעי, 29 באפריל 2009, מאת ארתיום; פורסם תחת: מוזיקה וריקוד, אינטרנט, תכנה ומחשבים; ‏15 תגובות

ביום ראשון, חזרתי מקונגרס הסלסה ורציתי למצוא מה מספרים האנשים על הקונגרס באתרי הסלסה הגדולים כמו: LaMusica.co.il‏, ‏salsa.co.il‏ שעד לא מזמן, היו מקורות מידע מעולים. לתדהמתי גיליתי אתרים שוממים לגמרי. אף אחד לא שואל: "איך היה", לא מספר "היה מגניב" או מתלונן, אף אחד לא מביע ביקורת.

למעשה, בשנה האחרונה, לא קראתי ולא כתבתי באתרים אלו באופן פעיל, אלא הייתי רק מציץ לשתי דקות פעם בחודש--חודשיים. הבנתי, משהו רע מאוד קרה לאתרי הסלסה בארץ. אז נתקלתי בדיון הזה בפורום ב־LaMusica והבנתי שכל הפעילות, כל הדיונים עברו ל־Facebook. למעשה, כל השיחות התפזרו בין קבוצות ומועדונים שונים ב־Facebook עצמו אם כי בצורה שונה מהדיונים שהיו פעם. כפי ש־"Icy" סיכם:

לדעתי הפייסבוק ... אינו מהווה שום תחליף למקום בו ראוי לפרוק את יצר הכתיבה, בטח לא תחליף ל-Lamusica באספקט הזה.

מה שכן, כולם שם. למה? כי כולם שם. למה? כי כולם שם...

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

מה שגיליתי, פשוט הפחיד אותי... באמת!

המשך...

קונגרס הסלסה 2009, סיכום מנקודת המבט האישית

ב־יום רביעי, 29 באפריל 2009, מאת ארתיום; פורסם תחת: מוזיקה וריקוד; ‏4 תגובות

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

המשך...

כשאתה לא החלק מהסלסה אלא סלסה היא חלק ממך

ב־יום שני, 27 באפריל 2009, מאת ארתיום; פורסם תחת: מוזיקה וריקוד, הכל מלבד מחשבים; תגובה אחת

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

כל רקדן סלסה עובר מספר שלבים:

  1. שלב התעניינות: אתה הולך למועדון אחד, לוקח שיעורים, לאט־לאט משתפר.
  2. שלב התמכרות והכחשה: אתה הולך לפחות פעם--פעמיים בשבוע לסלסה, אתה מכיר את רוב המועדונים המרכזיים והקהל שלהם באזור המגורים שלך. סלסה הופכת לתחביב העיקרי שלך.
  3. שלב התמכרות קשה: אתה הולך לפחות לאחת הסדנאות שכל סלסרו "חייב" להגיע אליהן: "מיומנות הובלה", "מוזיקה וקצב", "לידי־סטייל", "קורס מדריכי סלסה". אתה מבלה לפחות פעמיים בשבוע במועדון סלסה ולפחות פעם אחת בשבוע נשאר בו עד 2--3 בלילה. לפעמים אתה חוזר הביתה בבוקר. בעבודה כבר כולם התרגלו, שיש ימי השבוע שבבוקר "אין עם מי לדבר".

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

יש כאלה נמאס להם, זה עבר להם והם מסתכלים לאחור בלא געגוע; יש כאלה שהופכים את זה למקצוע שלהם; ויש כאלה שהם יוצאים מסצנת הסלסה: אתה לא תראה אותם במועדון בכל יום רביעי, אתה לא תראה אותם כותבים בפורומים, אתה לא תרים אליהם טלפון להגיד: "היי, מחר יש הופעה במועדון ב', אתם באים?"; אבל... עדיין, כשיש זמן והזדמנות נוחה הם יוצאים למועדון זה או אחר לרקוד שעה--שעתיים, כשמתכננים חופשה מסודרת מסתכלים על פסטיבל סלסה קרוב כדי לשלב חופשה עם אחד מהתחביבים שלהם, "מכרי־הסלסה שלהם" שנמצאים בשלב 3, רואים אותם כ"נוטשים" ובכלל, לא רואים אותם הרבה.

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

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

האם אתה מוכן לבינאום ולוקליזציה?

ב־יום ראשון, 19 באפריל 2009, מאת ארתיום; פורסם תחת: לינוקס, פיתוח, תכנה ומחשבים, C++‎‏, Unicode; ‏6 תגובות

הכנתי שאלון קצת שמאפשר לכם לבדוק... האם אתם מוכנים לכתיבת תכנה שתהיה מוכנה להתאמה לתרבויות שונות?

  1. אני רוצה לייצג מחרוזת, כ־char *some_text. מהו המידע שחסר לי?
  2. יש לי מחרוזת wchar_t *text או String text ב־Java, אני רוצה לקחת את התו הראשון שלה: wchar_t c=text[0]; // C Char c=text.charAt(0); // Java האם זהו קוד נכון?
  3. אני כותב את הקוד הבא: if n==1: print translate("You have one aplle") else: print translate("You have %d apples") % n מה לא בסדר בקוד הזה?
  4. מה לא בסדר בקוד הבא: #include <stdio.h> #include <time.h>

     int main()
     {
             time_t now_t=time(NULL);
             struct tm *now=localtime(&now_t);
             char str_time[32];
             strftime(str_time,sizeof(str_time),"%d/%m/%y",now);
             printf("Today is %s\n",str_time);
             return 0;
     }
    
  5. מהו גודל הזכרון הנדרש לשמירת תו unicode בודד?
  6. מהו גודל של wchar_t? (למתכנתי C++/C)‏?
  7. מהי גודל של תו unicode בשפת התכנות שאתה אוהב?
  8. מהו קידוד של מחרוזת (unicode) בשפת התכנות/toolkit שאתה אוהב?
  9. מה הבדל בין utf-8,‏ utf-16, ‏utf-32?‏
  10. מהו אורך התו הארוך ביותר ב־utf8?‏
  11. בניתי ספרייה עם שתי פונקציות בלבד. מה לא בסדר בקוד הבא (שתי בעיות לפחות)? extern Char32 to_upper_char(Char32); void to_upper(String str) { for(int i=0;i<str.size();i++) str[i]=to_upper(str[i]); }
  12. מה לא בסדר בקוד הבא: def print_error_message(message): print translate("Error occured: ")+"“"+translate(message)+"”"
  13. מה לא בסדר בקוד הזה: <?php $rtl_langs=array("he","ar","pa"); ?> ...
    > ...
  14. אני רוצה לחתוך את הטקסט בצורה יפה, כך שזה לא ייחתך באמצע המילה: מה לא בסדר בקוד הבא: // Cut nice pice of text wstring cut_nicely(wstring const &orig,int n) { if(orig.size()<=n) return orig; return orig.substr(orig.find_first_of(L" \r\n\t\f",n)); }
המשך...

העמוד הקודם

העמוד הבא

דפים

נושאים