מה צפוי ב"בטא 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, גם כן.

המשך יבוא...

שפת C, פקודות goto, ניהול משאבים ומה שביניהם.

ב־יום ראשון, 12 באוקטובר 2008, מאת ארתיום; פורסם תחת: פיתוח, תכנה ומחשבים; ‏5 תגובות

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

בשפות ללא destructorים כמו Java זה מאוד מקובל להשתמש בקטעי־try/finally לניהול משאבים. לדוגמה:

void function()
{
    resource r1,r2;
    try {
        r1.allocate()
        if(error1) throw;
        r2.allocate()
        if(error2) throw;
        do_something;
        if(error3) throw;
    }
    finally {
        r1.free();
        r2.free();
    }
}

למעשה, throw מקפיץ אותך לקטע finally שמאפשר שחרור מסודר של משאבים שלא מנוהלים ב־gc. עכשיו בואו נסתכל בקוד הבא:

void function()
{
    resource r1,r2;
    {
        r1.allocate()
        if(error1) goto filally;
        r2.allocate()
        if(error2) goto filally;
        do_something;
        if(error3) goto filally;
    }
    finally: {
        r1.free();
        r2.free();
    }
}

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

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

לוותר על 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.

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

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

המשך...

תולדות הבלוג שלי (בעקבותיו של שלומי).

ב־יום ראשון, 5 באוקטובר 2008, מאת ארתיום; פורסם תחת: תכנה חופשית, אינטרנט, כתיבה, תכנה ומחשבים, WordPress בעברית, CppCMS; ‏0 תגובות

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

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

התכנון המקורי היה להתרכז בשני נושאים:

  1. סלסה וריקוד ולהחליף פרסום כתבות באתר LaMusica.co.il‏‏ בכתיבה בבלוג שלי.
  2. להתחיל לכתוב בנושא תכנה חופשית

לצערי, הנושא הראשון, בסופו של דבר, הסתכם במספר מצומצם של כתבות, כך שהבלוג הפך לבלוג מחשבים כמעט טהור; ובסביבות אוקטובר 2007, הוא זכה להיכנס ל־planet.linux.org.il‏.

במקביל התחלתי לפתח טכנולוגיית web חדשה --- ‏CppCMS‏; ובדצמבר 2007, פתחתי בלוג נוסף באנגלית, שהיה אמור לשמש אותי לשתי מטרות:

  1. בניית פלטפורמת הניסוי של הטכנולוגיה החדשה
  2. פרסום מידע אודות CppCMS לקהל שלא מדבר בעברית.

יחד עם התקדמות הפרויקט, מערכת הבלוגים הפכה ליותר ויותר בשלה. במאי 2008 החלטתי להיפרד מוורדפרס ולהחליפו במערכת החדשה. מאד הבלוג הזה רץ על טהרת C++‎.

העמוד הקודם

העמוד הבא

דפים

נושאים