מאמרים בנושא ‏C++‎‏‏.

מה צפוי ב"בטא 2" של CppCMS‏?

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

בקרוב תשוחרר בטא השניה של CppCMS. מה החידושים הצפויים:

  1. מערכת cache מבוזרת מעל TCP/IP שנותנת אפשרות scale up במקרה של עומסים גבוהים במיוחד. המערכת מבצעת ביזור של cache בסגנון memcached ונותנת ניהול load ballancing אוטומטי.
  2. שינוי משמעותי במערכת התבניות, מעכשיו, התבניות יהיו staticly typed. ה"תוכן" ייוצג ע"י מבני C++‎ טבעיים, התבניות עצמן יתוגרמו לקוד C++‎, שמייצר את העמוד מה"תוכן". המעבר מאפשר לממש מספר דברים:
    • ירושה של תבניות בסנגון Django.
    • יכולת לבצע הרחבות בקלות ע"י השתלת קוד C++‎ באופן ישיר.
    • בעתיד יהיה קל יותר לחבר טיפול בטפסים.
    • התבניות יכולות להיות מקומפלות סטטית ישירות ליישום או והיטען כמודולים (so/dll) בנפרד.

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

המשך יבוא...

לוותר על gc או לוותר על destructor?

ב־יום שלישי, 7 באוקטובר 2008, מאת ארתיום; פורסם תחת: פיתוח, תכנה ומחשבים, C++‎‏; ‏15 תגובות

היום, יש נטייה להשתמש בכל שפה אפשרית ב־GC -- כי היא פותרת המון בעיות בניהול זיכרון. כמעט כל השפות פופולריות (למעט C/C++/Pascal) מממשות אותה בצורה זו או אחרת.

כמעט כולם (למעט CPython,‏ Perl ו־vala) משתמשות בשיטה של "בדיקת נגישות" (Reachability). בשיטה זו מנוע GC פועל אחת לזמן מה, מחפש כל מופעי אובייקטים שאינם נגישים יותר ומוחק אותם.

השיטה הפחות נפוצה, שמתשמשים בה למשל ב־CPython, היא שימוש ב"ספירת הפניות" (Reference counting), אבל היא קשה למימוש ובעייתית באופן כללי, בגלל טיפול בלולאות סגורות, כאשר אובייקט יכול להפנות לעצמו, ובכך "מספר הפניות" לעולם לא ירד מתחת ל־0.

שימוש ב־GC שיטה הראשונה פותרת את בעיית ניהול הזיכרון, יחד עם זו היא מציבה בעיה הגדולה אחרת: destructors או finalizers --- מתודות שמבצעות "מחיקה" של האובייקט, הופכות לכמעט ולא רלוונטיות. כי אי אפשר לדעת מתי ישוחרר האובייקט. כלומר ב־Java, C#, IronPython, PHP, D וכמעט כל שפות אחרות שמשתמשות בשיטה הזו, destructors הם חסרי משמעות.

המשך...

על כלי פיתוח מהיר ועולם המחשוב

ב־יום שני, 6 באוקטובר 2008, מאת ארתיום; פורסם תחת: פיתוח, תכנה ומחשבים, C++‎‏; ‏8 תגובות

אחת הגישות המודרניות בפיתוח תכנה היא:

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

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

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

גם צורך בהעסקת כוח אדם מיומן היא משמעותית. כידוע, לא כל המתכנתים שווים. למשל, לפי נתוני indeed‏ ההבדל בין משכורת מפתח C++‎ לבין משכורת מפתח PHP או Asp.Net יכול להגיע עד פי־1.5--2.

השאלה היא, אם העיקרון הזה נכון והאם כדאי לצצד לו?

התשובה היא חד משמעית: לא. הוא נכון בחלק גדול מהמקרים, אבל הוא ממש לא נכון בהמון מקרים אחרים.

המשך...

פיתוח יישומי רשת ב־C++‎ או הצצה ל־Boost.Asio.

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

במאמר זה, אביא סקירה קצרה של ספריית Boost.Asio‏‏ -- ספרייה לפיתוח יישומי תקשורת ב־C++‎ בצורה מהירה, יעילה ונוחה. ההכרות שלי איתה התחילה, דווקא מצורכי העבודה. אחרי זמן קצת, הבנתי שהיא מאוד נוחה ואפילו תהיה שימושית עבור CppCMS. למעשה, הספרייה הזו, אפשרה לי לעטוף את ספריית ה־cache של CppCMS ולהפוך אותה למבוזרת --- לבנות פתרון בסגנון memcached --- תוך מספר שעות בלבד.

הספרייה הזו קיימת בשתי גרסאות:

  1. גרסת Boost.Asio: היא חלק מ־Boost החל מגרסתו 1.35.
  2. גרסת Asio עצמאית, שדורשת Boost גרסה 1.33 ומעלה --- מאפשרת לעשות שדרוג של ספרייה ללא תלות בגרסת Boost.

אחד המאפיינים המעניינים שלה היא העובדה, שהספרייה כולה כתובה על בסיס Template Metaprogramming ומהווה אוסף קובצי־"‎.hpp" בלבד.

"בעיית עשרת אלפים קשרים" או "למה צריך ספריות כאלה בכלל?"

מעבר לעובדה ש־Berkeley Sockets API‏ די מסובך, עדין ושונה במערכות הפעלה שונות --- כבר סיבה מספיק טובה לבנות מעטפת עבורו --- אני אתרכז דווקא במשהו אחר, כתיבת יישומים יעילים.

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

יש מספר גישות לבניית השרת:

המשך...

על C++0x ועל TR1.

ב־יום שלישי, 19 באוגוסט 2008, מאת ארתיום; פורסם תחת: פיתוח, תכנה ומחשבים, C++‎‏, Boost‏; ‏4 תגובות

מה זה C++0x‏ ו־TR1‏? הם השינויים בסטנדרט החדש של C++‎, כאשר C++0x מדבר בעיקר על שינויים בשפה, ביניהם: הוספת פונקציות למדא , טיפוס auto‏ ורבים אחרים. הסטנדרט החדש מגדיר גם שינויים בספריית C++‎, הנקראים TR1.

היום, gcc מתקדם לאט־לאט ביישום של שינויים בליבה של השפה, אבל מה שיותר מעניין אותנו כרגע, זה שרוב השינויים המוצעים ב־TR1 כבר נכנסו לספריה סטנדרטית (כרגע תחת namespace:‏ tr1). ביניהם: מצביעים חכמים, "אובייקט הפונקציה" או Deligators במונחי C#‎, טבלאות hash, ביטויים רגולריים ועוד.

חלק מהשינויים זמינים כבר בגרסה 4.1 של gcc, אחרים (כמו ביטויים רגולריים) זמינים כבר ב־gcc 4.3. חלק גדול מהשינויים האלה נלקח כפישהו מספריות Boost‏.

נעבור בקצרה על האופציות החדשות:

המשך...

העמוד הבא

העמוד הבא

דפים

נושאים