אני אשתדל לענות ../images/Emo13.gif
אני לא יודע לגבי הקצאת זיכרון ושליטה חכמה יותר על זה, כי לא חקרתי לעומק אבל בוא רק נגיד שכמעט אף פעם לא צריך... בקשר לדוגמא, חופשי, אני אתן לך אחת מניסיוני האישי. תאר לך שאתה מקבל מ-Stream מסוים מספר שורות בפורמט מסוים (אורך לא קבוע אבל מבנה לקסיגרפי זהה), ובכמות לא ידועה. אתה רוצה להיות מסוגל לקרוא את המידע ולהחזיר מערך של שורות כאלו (למען הפשטות, כל שורה תהיה מחרוזת) בתוך פונקציה ולהחזיר את המערך לפונקציה שקראה לה. יותר מכך, אם תרצה לבצע מניפולציה של אותו מערך (כגון שינוי אחת המחרוזות או מחיקה שלהן) תוכל לבצע את זה בפונקציה אחרת. בג´אווה כתבתי את הפונקציה שקוראת את השורות ומחזירה מערך ב-20 שורות (כולל הערות!
). ב C או CPP אני רואה כמה בעיות: 1. אתה מנהל את הזיכרון לבד, לכן לא יהיה חכם מצידך שפונקציה תקצה זיכרון דינמית בתוכה, ועוד כמות לא ידועה. לתוכנית חייבת להיות דרך לדעת כמה זיכרון הוקצה במדויק. בד"כ אתה מעביר מבנה נתונים כלשהו או BUFFER עם גודל ידוע ולתוכו קורא את המידע, או לחלופין מוצא פיתרון מעיק אחר לשחרור הזיכרון אח"כ, כמובן תוך כדי מציאת דרך ליידע את שאר התוכנית על כמות הזיכרון שהעניין תפס. 2. להעביר את אותו מערך לפונקציה אחרת לשם מניפולציה (בין אם החלפת מחרוזת או מחיקה, או לא משנה..). בג´אווה אתה יכול להשוות איבר מהמערך ל-NULL או להקצות חדש במקומו וה-REFERNCE לאוביקט הישן יהיה מועמד לניקוי אוטומטי. ב-CPP תיאלץ לבצע את הניקיון בעצמך. מעבר לכך, אם אתה עובד עם מערך של מצביעים ל-CHAR שמצביעים ל-BUFFER גדול שמכיל בתוכו הרבה מחרוזות, אין לך אפשרות לשנות. אם הקצאת כל מחרוזת אתה כמובן יכול למחוק אותה ולהקצות חדשה. הבדל קל בקלות השימוש. זה עלול להפוך להרבה יותר מסובך כשאתה לא מטפל רק במחרוזת אחת מתוך המערך אלא ביותר. 3. יש עוד כמה יתרונות מעניינים לניהול זבל אוטומטי
. קח לדוגמא אפשרות של יצירת אובייקטים זמניים לביצוע פעולות, תוך כדי כך שאתה לא צריך לדאוג למה קורה איתם אח"כ. הדוגמא הכי טריוויאלית היא לקחת מחרוזת ולפצל אותה החל מתו מסוים (אם נמצא). סלח לי, אבל זה לוקח לי 2 שורות בג´אווה, במקרה הרע....
אני לא רוצה בכלל לדבר על לעשות את זה ב-C כי זה מעצבן אפילו עוד יותר! תוסיף לזה עוד פעולות ואתה מקבל כאב ראש. בקיצור, החיים עם שימוש באוסף הזבל האוטומטי הזה הרבה יותר קלים למתכנת. יותר קל לבצע דברים בהקשר של זיכרון, כלומר, לא צריך למעשה לנהל זיכרון אלא רק להתשמש באובייקטי המידע שתכנתת. הרבה יותר פקודיקטיבי ומוליד הרבה פחות באגים, בזה לפחות אתה מסכים איתי. אני לא רוצה לספר לך איך נראית אותה השגרה כשכתבתי אותה ב-C, זוועה! והיא אפילו לא תומכת במספר לא ידוע של מחרוזות. השתמשתי בשיטת ה-BUFFER הגדול ולתוכו מערך של מצביעים לטובת יציבות השרת שכתבתי. בכל מקרה, קוד שכתבתי בג´אווה דרש ממני הרבה הרבה פחות דיבוג מאשר ב-C או CPP, ורק לסבר לך את האוזן, אני לא רוצה להתרברב אבל אני מעולה במציאת באגים. בכל זאת נהניתי מהעובדה שלא בזבזתי יותר מ-5 דקות על איזשהו באג...
אלי נ.ב. בקשר ל-VB, אל תתחיל! אני שונא את השפה המפגרת הזאת. ד"א, באותה קלות אפשר לכתוב דברים בג´אווה וכמעט באותה קלות אפשר לכתוב דברים עם ה-WIZARD של VCPP ו-MFC.