8.2 - קיבוע כתובת והבטחת ההשמדה - תרגול
תרגול כתובת חוזה והשמדה¶
תרגיל ראשון¶
הוסיפו לדוגמת ההרצאה פונקציה שמקבלת Pin<Box<AddressChecked>> ומחזירה אותו מתוך Vec לאחר העברה לשתי פונקציות נוספות. בדקו שהכתובת נשמרת ושמתרחשת השמדה אחת. הסבירו איזה אובייקט זז בכל שלב ואיזה אובייקט נשאר במקומו.
תרגיל שני¶
ממשו טיפוס חדש שמחזיק מספר ושדה PhantomPinned, ומדפיס את המספר בזמן השמדה. צרו ערך מוצמד, החליפו אותו באמצעות Pin::set ואז השמידו את המעטפת. חזו את סדר ההדפסות והסבירו מדוע אין כאן חילוץ של הערך הישן.
תרגיל שלישי¶
בדקו הצעת ממשק למבנה שמחזיק שדה עתיד מוצמד. המתודה הראשונה מחזירה Pin<&mut F>, והמתודה השנייה מחזירה &mut F בלי לדרוש Unpin. הסבירו מדוע אי אפשר להצדיק את שתי המתודות כבטוחות עבור עתיד כללי. הציעו שני תיקונים שונים, וכתבו איזה כוח הממשק מאבד בכל אחד מהם.