15-03-2010, 21:31
|
|
|
חבר מתאריך: 30.07.05
הודעות: 949
|
|
שמתי לב שערכת רק אחרי שפרסמתי את ההודעה שלי... (לקח זמן לכתוב את כל זה )
א. כן ולא... כשאתה מחבר int עם double אתה מקבל double בין אם int היה הפרמטר הראשון או השני. מדובר באופרטור שהוא חיצוני למחלקה, בסופו של דבר. יתרה מזאת, מבחינה לוגית המחלקה הזו מייצגת תוצאה של פעולת חשבון. אפשר להתווכח פה אם יש או אין שבירת סמנטיקה, אבל בכל מקרה מדובר על מקרה די מיוחד.
ב. המ... האובייקטים הללו מיועדים לחיים בתוך שורת קוד אחת... שינוי שלהם בתוך אותה שורת קוד אחת מחייב התנהלות בתהליכונים וזה כבר לא באמת משנה איזה מימוש תבחר - אם לא תשתמש במנגנון סנכרון לא תוכל לקבל הבטחה לנכונות החישוב בכל מקרה. הדבר נכון כפליים לגבי המקרה של מחיקת האובייקט לפני סיום החישובים...
ג. מספר החישובים קטן בצורה משמעותית: כל הבניה פה נעשית פחות או יותר בזמן קומפילציה. האובייקט מכיל רפרנסים, לא עותקים. גם בלי אופטימיזציה במקרה הגרוע נוצרים פה מספר אובייקטים ליניארי במספר המחוברים כאשר כל אובייקט מכיל 2 מצביעים לאובייקטים המחוברים. בנוסף, עבור כל אופרנד ניגשים לכל תא שלו רק פעם אחת - זאת בניגוד לכל מקרה אחר בו נוצרים עותקי ביניים שדורשים תוספת ביצועים רצינית.
עותק ביניים -> מוסיף אלמנט כפלי למספר הפעולות
הפתרון הנ"ל -> מוסיף אלמנט חיבורי (לכל היותר) למספר הפעולות. במקרה הטוב שעבור קומפיילר טוב מהווה גם המקרה הממוצע - כל התקורה תבוטל בזמן קומפילציה ותגיע למצב של הפעלת אופרטור [] פעם אחת לכל אופרנד.
ד. כל דבר מחייב זהירות, אבל הפתרון הנ"ל מתאים דווקא למקרים רבים. עד כמה שאני יודע ווריאציות שלו ממומשות בספריות מתמטיות רבות.
_____________________________________
חתימתכם הוסרה כיוון שלא עמדה בחוקי האתר. לפרטים נוספים לחצו כאן. תוכלו לקבל עזרה להתאמת החתימה לחוקים בפורום חתימות וצלמיות.
|