מאמרים בנושא ‏CppCMS‏.

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

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

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

קישורים:

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

למה אצלם זה אף פעם לא עובד? או מדוע 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‏

כשהקצאות הזיכרון משנות

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

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

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

ב־C++‎ יש מחרוזת הטובה הישנה: std::string. אבל יש לה מגבלה אחת: היא דורשת הקצאה של חתיכת זיכרון. זה נכון לכל מחרוזות בכל השפות ובכל הכלים גם אם הם immutable ומשתמשות ב-reference counting - עדין יש צורך להקצות זיכרון לאותה החתיכה.

בואו ניקח לדוגמה יישום פשוט שמאתר מקום כלשהו בעץ המשתמש במפתחות std::string המבוסס על std::map. הוא מקבל כפרמטר מחרוזת כמו ‎/foo/bar/124‎ ומחלץ ממנה את המפתחות foo ו־bar כחלקים במסלול, יישום בסגנון xpath.‏

אז עבור פונקציה:

void find_path(std::string const &str);

הקריאה

find_path("/foo/bar/123");

תצטרך ליצור שלוש מחרוזות:

  • /foo/bar/123
  • foo
  • bar

כך או אחרת עבור שולש מחרוזות האלה נצטרך להקצות שלוש חתיכות זיכרון, גם אם המחרוזות שלנו משתמשות ב-reference counting או הן immutable.

אז כיצד CppCMS מתמודד עם הבעיה הזו:

  1. קיימת מחלקה מיוחדת cppcms::string_key שמחזיקה מתוכה את ה־std::string הישן והטוב. אבל בנוסף, ניתן ליצור את אותה המחלקה באופן מפורש מזוג מצביעים מטיפוס char const *‎, כך שהיא שומרת רק הצבעה לטקסט ולא מעתיקה אותו.

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

  2. עכשיו נשנה את הפונקציה find_path קלות ונוסיף לה עוד גרסה:

    void find_path(char const *str);
    void find_path(std::string const &str);
    

    עכשיו, נשתמש רק במחרוזות שלא "מחזיקות בעלות על התוכן" ובכך נוכל ליצור מחרוזת מקורית ותת־מחרוזות foo ו־bar בלי להקצות זיכרון בכלל.

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

CppCMS החל מגרסה 0.99.9 ששוחררה היום, אימץ את הטכניקה הזו בצורה רחבה ואפשר, במקרים מסוימים, להכפיל את ביצועים המערכת כולה.

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

שוחררה גרסת Boost.Locale חדשה

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

אחרי עבודה ארוכה על שיפורי ממשק ותיקוני בעיות שהועלו בתהליך בחינה רשמית של Boost.Locale הגרסה החדשה 4.0.0 שוחררה.

בקרוב אתחיל לשלב אותה בעץ svn של Boost, כך שאם הכל ילך בסדר, אני צופה שהיא תיכנס לגרסה 1.48 או לכל המאוחר 1.49 של Boost.

כרגיל:

במקביל שוחררה גרסת CppCMS 0.99.8 שמכילה את כל השינויים של Boost.Locale וגם תיקוני באגים שהצטברו במהלך 3 חודשים אחרונים.

אם עדיין לא שמתם לב, אני נותן הרצאה על Boost.Locale באוגוסט פינגווין - תבואו יהיה מעניין (גם אם אתם לא מדברים ב־C++‎)

העמוד הבא

העמוד הבא

דפים

נושאים