معنای مقداری و COW (Value Semantics & COW)
اینجا درباره «معنای مقداری (Value Semantics)» و «کپی -حین -نوشتن (Copy-on-Write/COW)» حرف می زنیم. معنای مقداری یعنی هر کپی، داده خودش را دارد. COW یعنی کپی تا لحظه تغییر، واقعی نمی شود. مثل وقتی تکالیفت را کپی می کنی اما تا ویرایش نکنی، برگه جدا چاپ نمی شود.
تعریف سریعِ معنای مقداری سویفت
«معنای مقداری» یعنی مقدارِ کپی شده مستقل است. آرایه، مجموعه و دیکشنری در سویفت این گونه اند. وقتی متغیر را کپی می کنی، انتظار رفتار جدا داشته باش. این دید قابل پیش بینی است و باگ ها را کمتر می کند.
نکته: برای مرور دوباره، خود موضوع معنای مقداری سویفت را به عنوان مرجع کوتاه ذخیره کن.
COW در یک نگاه
«کپی -حین -نوشتن (COW)» یعنی حافظه مشترک تا زمان تغییر حفظ می شود. وقتی یکی از کپی ها را تغییر می دهی، همان لحظه یک کپی واقعی ساخته می شود. این کار سرعت و حافظه را بهتر مدیریت می کند.
مثال عملی از COW در کالکشن ها
var a = [1, 2, 3]
var b = a
b.append(4)
print(a)
print(b)
اینجا b اول با a حافظه را شریک است. اما وقتی b.append(4) را می زنی، برای b کپی واقعی ساخته می شود. پس a دست نخورده می ماند.
گام های عملی
- کد بالا را در ادیتور اجرا کن.
- مقدارهای خروجی را با هم مقایسه کن.
- به جای
append، یک تغییر دیگر امتحان کن.
چرا معنای مقداری مفید است؟
با معنای مقداری، رفتار برنامه قابل حدس می شود. هر کپی استقلال دارد. دیباگ راحت تر می شود. در بازی ها هم مشابه است؛ هر کاراکتر کپی شده، جان و امتیاز خودش را دارد.
نکته: اگر دنبال مقایسه های دقیق تری هستی، صفحه Equatable و Comparable را ببین.
ارتباط با چرخه عمر
وقتی کپی ها تمام می شوند، حافظه آزاد می شود. این موضوع کنار نابودگرها به فهم مدیریت منابع کمک می کند. برای آشنایی بیشتر، به مخرب ها (Deinitializers) برو.
جمع بندی سریع
- معنای مقداری: هر کپی مستقل است.
- COW: کپی هنگام تغییر ساخته می شود.
- کالکشن های سویفت از COW استفاده می کنند.
- رفتار پیش بینی پذیر، دیباگ آسان تر.
- بهینه سازی بهترِ حافظه و سرعت.