מאמרים בנושא ‏תכנה ומחשבים‏.

שוחררה גרסת 1.48 של Boost שמכילה Boost.Locale

ב־יום רביעי, 16 בנובמבר 2011, מאת ארתיום; פורסם תחת: תכנה חופשית, פיתוח, תכנה ומחשבים, CppCMS, C++‎‏, Unicode, Boost‏; ‏2 תגובות

סוף סוף שוחררה גרסה 1.48 של Boost. אחד הדברים המשמעותיים בה היא שילוב של Boost.Locale - ספריית הלוקליזציה שאני פיתחתי.

קישורים:

להזכירכם, Boost.Locale פותחה כחלק מפרויקט CppCMS‏

כמה מטומטם ה־API יכול להיות

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

היום בניה לילית נתקעה... מכונה וירטואלית של חלונות לא ירדה.

תוך כדי בירור נכנסתי למכונה וגיליתי חלונית עם הודעה בסגנון:

The library e:\mingw\lib\libsqlite3.dll is not valid windows library. Reinstalling
application may solve the problem

אני מכיר את הבעיה שאם אתה מריץ תוכנה שחסר לה dll אז קופצת חלונית. אפשר להבין התנהגות כזו. רק שבמקרה הספציפי הזה: מדובר בטעינה דינאמית של dll עם LoadLibrary...

אני מצפה שפונקציה תחזיר שגיאה ולא תציג חלון! אחרי חיפוש קצר הגעתי לפונקציה SetErrorMode... שמאפשרת "לפתור" את הבעיה. אבל באמת... אם אין dll אז LoadLibrary יחזיר שגיאה אבל אם ה־dll לא ניתן לטעינה תקפיץ חלון?!?!

מי האידיוט שתכנן את ה־API הזה... בחלום הרע שלי לא הייתי מצפה להתנהגות כזו!

בקיצור: אם אתם לא חייבים אל תפתחו לחלונות!

למה אצלם זה אף פעם לא עובד? או מדוע IIS+FastCGI לא מה שחשבתם...

ב־יום שלישי, 16 באוגוסט 2011, מאת ארתיום; פורסם תחת: תכנה חופשית, פיתוח, תכנה ומחשבים, CppCMS; ‏3 תגובות

זה כבר לא בפעם הראש שואלים אותי אם ניתן להריץ את CppCMS עם IIS.

לכאורה, IIS תומך ב־FastCGI וזה הממשק העיקרי של CppCMS, אז לא אמורה להיות כאן בעיה.

אז מה צריך? להגדיר לעבוד בממשק TCP, להגדיר את הפורט שעליו השרת שלי מאזין? נשמע פשוט, אבל זה לא בדיוק עובד.

  1. IIS לא מאפשר להגדיר פורט! הוא לא רק לא תומך בשרתי FastCGI חיצוניים הוא מחייב את השרת להשתמש ב-Socket שהועבר דרך StdIn, רק שבחלונות Stdin הוא לא בדיוק file descriptor וצריך לעשות שמיניות באוויר כדי לקבל ממנו את ה-socket שעליו עושים accept.

    ראה: http://forums.iis.net/t/1146857.aspx

  2. אבל, נגיד לא נורא, אז נשתמש ב-socket שקיבלתי מהשרת כמו שזה נעשה בד"כ גם עם שרתים ב-Linux.

    זה עדיין לא יעזור! הוא לא יעביר בקשרות לשרת במקביל, הוא פשוט מניח שכל תהליך FastCGI, הוא Single-Threaded ומיועד לטפל בבקשה אחת בו זמנית, כמו ש-PHP עושה.

    ראה: http://forums.iis.net/t/1155551.aspx

    במילים אחרות גם אם אני אפתור את הבעיה הראשונה (הלא מסובכת) המערכת שלי לא תוכל להנות ממקביליות, משמע אין שיתוף cache, אין תמיכה ב-Comet ועוד.

בקיצור... IIS+FastCGI זה זבל שנכתב במטרה אחת בלבד: להגיד ש־PHP רץ על IIS.

אני הולך לבדוק את ההרחבה isapi_scgi‏, אם כי אני כבר יודע שהיא לא ממש תומכת ב־SCGI בצורה נכונה כי לא מטפלת ב־Status כראוי.

הפוסטר והמצגת מאוגוסט פינגווין

ב־יום שבת, 13 באוגוסט 2011, מאת ארתיום; פורסם תחת: תכנה חופשית, פיתוח, תכנה ומחשבים, CppCMS, C++‎‏, Unicode, Boost‏; תגובה אחת

אני מפרסם כמו שהבטחתי את המצגת והפוסטר מהכנס:

  • המצגת של ההרצאה על Boost.Locale:
  • הפוסטר על CppCMS‏: pdf‏

Clang - הפתעה נעימה

ב־יום רביעי, 10 באוגוסט 2011, מאת ארתיום; פורסם תחת: תכנה חופשית, פיתוח, תכנה ומחשבים, C++‎‏; ‏4 תגובות

כבר הרבה זמן אני שומע על Clang. עד לא מזמן די נהגתי להתעלם ממנו, בעיקר בגלל ששמעתי מילים כמו: "מכונה וירטואלית" ו־"JIT" שהטעו אותי. אבל לא זמן התחלתי להתעמק קצת יותר וגיליתי... קומפיילר C++‎ בשל.

מפתחים שעובדים עם שפות כמו C++‎, יודעים שהמצב שלנו שונה ממצבם של המפתחים העובדים עם שפות שיש להם "אבא יחיד". לשפות פופולריות רבות כמו PHP, Python, Perl, Ruby יש "אבא אחד" שמחליט כיצד הכל מתקדם. גם לשפות שיש להן תקן כללי, כמו Java או C#‎, עדיין יש "אבא אחד" בפועל. הוא נותן את הטון: אם זה Sun (ז"ל) עבור Java ו־Microsoft עבור C#‎.

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

עד לא מזמן, ל־GCC היה מונופול כמעט מלאה בתחום C++‎ ותוכנה חופשית. למרות שקיימים מספר קופיילרים של C היה רק קומפיילר חופשי אחד של C++‎. יש לזה יתרון וגם חסכון. היתרון הגדול ביותר הוא שגם קומפיירים אחרים (לפחות בלינוקס) שאפו להיות תואמי GCC. כך למשל הקומפיילר של Intel תואם מבחינה בינארית ל־GCC ומאפשר להשתמש בספריות של אחד יחד עם השני (שזה בכלל לא מובן מאליו בתחום C++‎). גם GCC אפשר זו בקלות יחסית ע"י מעבר ל־ABI סטנדרטי החל מגרסה 3.4.

אז כשניסיתי לפני מספר ימים Clang לראשונה הופתעתי לגלות קומפיילר C++‎ איכותי שתואם GCC כמעט ב־100%, אבל מיצרן אחר ובנוי על בסיס קוד שונה לחלוטין.

ניסיתי לבנות את CppCMS אתו, והצלחתי לעשות זאת מאוד מהר כמעט ללא בעיות!

אני שמח שסוף־סוף יש אלטרנטיבה טובה וחופשית ל־GCC, לא בגלל ש־GCC לא טוב ולא בגלל ש־Clang מעולה. אני שמח כי טוב שיש לך אפשרות בחירה, ובמיוחד טוב שיש תאימות גבוהה ביניהם!

מה שלא התרשמתי ממנו זה הביצועים. למרות הבטחות רבות Clang עבד רק בכ־20% יותר מהר ללא אופטימיזציה והיה אפילו אטי יותר בקומפילציה עם אופטימיזציה מלאה.

כך או אחרת... Clang בהחלט רשם אצלי כמה נקודות זכות!

העמוד הבא

העמוד הבא

דפים

נושאים