הבלוג של ארתיום
בלוג על לינוקס, תוכנה חופשית, מוזיקה, סלסה, ומה לא!
מאמרים בנושא C++.
Unicode ב־C++ תיקון טעות.
עדכון קטן על תמיכה ב־Unicode ב־C++. למעשה, כשאמרתי בכתבה קודמת שאין כל תמיכה ב־Unicode, טעיתי. דווקא יש תמיכה אם כי היא לא מתקרבת למה ש־ICU נותן.
std::locale נותן מספר ממשקים בפרט: std::ctype<> שמאפשר המרה של case והמרת קידוד בין קידוד מקומי כמו utf-8 או cp1255 למחרוזות של wchar_t. הוא מצליח להמודד עם מקרים יחסית פשוטים כמו המרת "Артём" (השם הפרטי שלי ברוסית) לאותיות גדולות וקטנות בצורה נכונה: АРТЁМ. דבר שכל הכלים, אפילו פחות מוצלחים כמו Python ו־qt3 מצליחים לבצע ללא בעיה.
אבל תמיכה מובנית עדיין לא מצליחה להתמודד עם מקרים מסובכים יותר כמו ß הגרמנית ו־Σ היוונית.
כך שלצרכים הבסיסיים, ניתן להסתפק ב־API של C++ כפישהו, אבל כמובן זאת לא תמיכה מלאה (כמו גם בשפות אחרות, משל Python).
לדוגמה toupper:
// Set global locale
locale::global(locale("en_US.UTF-8"));
// Now we can use locale for various purposes
wchar_t str[]=L"Артём";
use_facet<ctype<wchar_t> >(locale()).toupper(str,str+5);
הכרות עם Java.
למרות שכבר יצא לי לדבג קוד שכתוב ב־Java לא הייתה לי התנסות מעמיקה עם שפת התכנות הזו. כלומר, אני מכיר את עקרונות הפעולה שלה... אבל לא עבדתי אתה הרבה.
לאחרונה, התחלתי לכתוב יישומים ויישומונים ב־Java ביניהם רכיבי GUI קטנים. הסיבות לכך היו שניים:
- דרישת הקורס -- הגשת תרגילים ב־Java.
- צורך לכתוב רכיבי GUI בלתי תלויים בפלטפורמה גם למערכות אקזוטיות ביותר כמו OpenVMS.
אז התחלתי להשתמש בה קצת יותר לעומק ו־... התחלתי להפנים כמה דברים מעניינים:
- יש דור מתכנתים שמקולקלים ע"י Java וחושבים במושגים שלה גם בשפות תכנות אחרות.
- Java היא בהחלט שפה יפה... יפה בפשוטתה המוחלטת הגובלת באמירה --- "כל המתכנתים מטומטמים"
עכשיו נסכם בקצרה
המשך...לא רק GCC, או הניסיון הקצר עם קומפיילר של Intel.
בד"כ אני לא נוהג לכתוב כאן הרבה על טכנולוגיות סגורות, במיוחד לכתוב דברים טובים. אבל הפעם יהיה קצת שונה. אעשה סקירה קצרה של קומפיילר של אינטל.
רקע
אף אחד לא אוהב Vendor Lock In אפילו עם מדובר במשהו טוב כמו GCC או Linux. לכן, אני מוודא כי CppCMS ירוץ גם על BSD וגם על Solaris. אבל עם קומפיילר היו לי קצת יותר בעיות. יש מעט מאוד קומפיילרים טובים והנפוץ בין כולם הוא כמובן GCC.
הרבה זמן היו לי תהיות לגבי זה, אפילו ניסיתי להתקין SUN Studio על OpenSolaris ב־Virtual Box, אבל... בינתיים Solaris לא מתנהג יפה אפילו עם GCC.
אז בסופו של דבר אחרי הרבה ייסורים והתקלויות החלטתי לעשות בדיקה ל־icc. התהליך היה מייגע, אבל בסופו של דבר קיבלתי כמה דברים ממש נחמדים שאספר עליהם כאן.
המשך...גם לחלשים מגיע... או CppCMS במערכות משובצות מחשב.
בעיות ביצועים של מערכות web יכולות להופיע לא רק עקב עומסים כבדים אלא גם בגלל מערכות מוגבלות. פה שפות מקומפלות כמו C/C++/Pascal יכולות לתת מענה מצוין. אבל כרגיל חסרים כלים: Klone זה לא הרבה יותר ממשהו דמוי PHP ברק C. Wt הוא בנוי כמו GUI. Pascal? מישהו בכלל זוכר שפה כזו ;).
לכן CppCMS יתמוך גם בצרכים של מערכות משובצות מחשב והן:
- צמצום תלויות למינימום.
- עבודה מהירה.
- גודל קובץ ריצה מינימלי.
לכן, לקחתי CppCMS ועשיתי לו ניתוח --- זרקתי את כל מנגנוני ה־cache, ביטלתי דחיסת zlib ובכל צמצמתי תלות ב־boost::iostreams, העפתי מודי עבודה מיותרים ב־embedded.
בנוסף, אם המפתח רוצה לבנות גרסת cgi אז בכלל, העפתי את כל הקוד שמטפל ב־thread-pool וכמובן גם בפרוטוקולים כמו scgi/fcgi. ובכן, התכנה הצטמצמה לגודל של 500Kb בלבד. שזה כ־10%--20% מגודל משערך PHP אופייני.
ובכך שוחררה גרסת CppCMS 0.0.4 שכוללת תמיכה במערכות משובצות מחשב.
שוחררה CppCMS 0.0.2!
אחרי תקופה ארוכה של פיתוח מאומץ שוחררה גרסה 0.0.2 של CppCMS -- תשתית פיתוח יישומי אינטרנט ב־C++.
- הורדה
- תיעוד -- עדיין לא הושלם ב־100%.
- הוראות התקנה
הגרסה כוללת
- CppCMS תשתית הפיתוח.
- DbiXX --- ספריה לעבודה מול בסיסי נתונים שונים.
- WikiPP מערכת ויקי מובססת CppCMS.
- Examples --- דוגמאות שונות כחלק מתיעוד של CppCMS.
שינויים במדיניות
ישנם מספר שינויים חשובים במדיניות שחרור הגרסאות:
- גרסאות בטא ציבוריות יהיו זמינות רק דרך svn, ענף פיתוח ראשי trunk.
- קצב שחרור הגרסאות יגדל. אמנע משמירת השינויים ב־trunk בלבד.
- רוב הארכיטקטורה של CppCMS התייצבה, אם כי, API עדיין נתון לשינוי. עם זאת, ייצוב API ותאימות לאחרות הן מטרות חשובות של פיתוח עתידי.
השינויים העיקריים
- מערכת תבניות חדשה מבוססת על טיפוסים סטטיים. היא נשענת על קימפול התבניות לקוד המכונה וטעינתן כ־shared objects.
- מערכת תבניות הישנה, מבוססת על טיפוסים דינאמיים לא תיתמך יותר.
השיפורים השונים במערכת התבניות כוללים בין השאר:
- ירושת תבניות בסגנון Django.
- הרחבת תבניות ע"י השתלת קוד C++ לתוכן.
- תבניות הן חלק מהתשתית ולא מהוות ספריה נפרדת.
פותחה מערכת חדשה ליצירה ובדיקה של טפסים. היא משולבת עם מערכת התבניות.
- פיתחה מערכת ניהול sessions חדשה.
- שיפורים ב־API של מערכת caching לתמיכה יותר טובה ב־cache העובד ללא טריגרים.
- התיעוד של המערכת הועבר ל־WikiPP מערכת ויקי שפותחה על בסיס של CppCMS.
- נתמכות מערכות הפעלה חדשות: FreeBSD ו־OpenSolaris, בנוסף ל־Linux ו־Cygwin.
- מערכת ויקי WikiPP שוחררה תחת רישיון GPLv3.
