“Actor” in Swift 5.5 (in Burmese)
WWDC21 မှာ Apple က Swift 5.5 ကို တရားဝင် မိတ်ဆက်ခဲ့ပါတယ်။အဲ့ထဲကမှ ဒီတစ်ခေါက်မှာ Actor အကြောင်းကို ကျွန်တော်သိသလောက် ပြောပြပေးသွားပါမယ်။
ပထမဆုံး Actor အကြောင်းမပြောခင် Swift 5.5 အကြောင်းကို အရင် ပြောပြချင်ပါတယ်။ Swift 5.5 မှာတော့ asynchronous code တွေနဲ့ concurrent code တွေအတွက်ကို language အနေနဲ့ built-in support လုပ်လာပါတယ်။ ဒီအခါမှာ parallel အလုပ်လုပ်နေတဲ့ code တွေ asynchronous ဖြစ်တဲ့ code တွေကို library author တွေ developer တွေက အလွယ်တကူ ရေးလာကြတော့မှာအသေအချာပါဘဲ။ Actor ဆိုတာ class တွေလိုဘဲ reference type တစ်ခုဖြစ်ပါတယ်။ အရင်ဆုံး Actor ဆိုတာမရှိရင် ဘယ်လိုပြသနာဖြစ်နိုင်လဲဆိုတာကို အရင် လေ့လာကြည့်ရအောင်ပါ။
ဘာကြောင့် Actor ဆိုတာ ပေါ်လာရတာလဲ?
ကျွန်တော်တို့မှာ AppleStore ဆိုတဲ့ class တစ်ခုရှိတယ်ဆိုကြပါစို့။
ဒီနေရာမှာ instock ဆိုတာကို အပြင်ကနေ set လုပ်လို့မရအောင် private နဲ့ တားထားပါတယ်။ Swift 5.5 မတိုင်ခင်ကတော့ ဘာမှပြသနာမရှိပေမယ့် အခုလို concurrent code တွေ ရေးလို့ရလာတဲ့အခါမျိုးမှာ buy(qty:) ကို asynchronously execute လုပ်လိုက်မယ်ဆိုရင် instock state က အမြဲမှန်နေမယ်လို့ ဘယ်သူမှအာမမခံနိုင်တော့ပါဘူး။ State(instock in our case) တစ်ခုကို တစ်ပြိုင်နက်တည်း client နှစ်ခု သုံးခုလောက်က update လုပ်နေတာမျိုးဖြစ်လာနိုင်ပါတယ်။ ဒီလိုအခြေအနေကို handle လုပ်ဖို့အတွက် Actor ဆိုတဲ့ reference type တစ်ခု ပေါ်ပေါက်လာရတာဖြစ်ပါတယ်။
Actor Type တစ်ခု ဘယ်လိုရေးမလဲ?
Class type တစ်ခု create လုပ်သလိုဘဲ Actor type ကိုလည်း ‘actor’ ဆိုတဲ့ keyword နဲ့ create လုပ်ရပါတယ်။
Actor ဖြစ်သွားရင် ဘာတွေကောင်းသွားလဲ?
အပေါ်ကဉပမာမှာဆိုရင် အဓိကပြသနာက state တစ်ခုကို task တွေအများကြီးကနေ access လုပ်လို့ရနေလို့ပါဘဲ။ အဲ့အတွက် actor က သူ့ရဲ့ mutable state တွေကို isolate လုပ်လိုက်ပြီး တစ်ချိန်မှာ task တစ်ခုကဘဲ ခေါ်သုံးလို့ရပြီး နောက် task တွေက လက်ရှိ task ပြီးတဲ့အထိစောင့်ရတဲ့ (suspend လုပ်လိုက်တဲ့) ပုံစံနဲ့ handle လုပ်သွားပါတယ်။
Unlike classes, actors allow only one task to access their mutable state at a time
အဲ့တာကြောင့်မို့လို့ actor ထဲက mutable property တွေဟာ တစ်ချိန်တည်းတစ်ပြိုင်တည်းခေါ်သုံးမိရင် suspension point ဖြစ်နိုင်တာမို့ “await” keyword ခံပြီးတော့ asynchronous context ထဲကနေဘဲ ခေါ်သုံးရပါတယ်။ ဒါ့အပြင် func တွေအကုန်လုံးကလည်း အလိုလို async function တွေဖြစ်သွားပါတယ်။
Actor ကိုဘယ်အချိန်မှာသုံးသင့်သလဲ?
ကျွန်တော်ဆိုရင်တော့ ကိုယ့် class ရဲ့ state က asynchronously update ဖြစ်နိုင်တဲ့ use case မျိုးမှာ actor ကို သုံးဖြစ်မယ်လို့ထင်ပါတယ်။ ထွက်တာ မကြာသေးဘူးဆိုတော့ တစ်ခြားသူတွေရော ဘယ်လိုသုံးနေကြလဲဆိုတာ မတွေ့ရသေးပါဘူး။
Conclusion
ဘာဘဲဖြစ်ဖြစ် actor က swift specific feature တစ်ခုဖြစ်ပြီး ဒီနှစ်မှာ Swift language ထဲကို စိတ်ဝင်စားစရာကောင်းတဲ့ use case မျိုးတွေ ယူဆောင်လာပေးမယ်လို့ ယုံကြည်ပါတယ်။ ပိုပြီး သိချင်ရင် ဖတ်လို့ရအောင် အောက်မှာ link လေးတွေပါ ထည့်ပေးထားပါတယ်။ ကျွန်တော့်ရဲ့ article တွေကို သဘောကျနှစ်သက်တယ်ဆိုရင် ကျွန်တော့်ရဲ့ နောက်ထပ်လာမယ့် content တွေမလွတ်သွားအောင် follow လုပ်ထားပေးကြပါခင်ဗျာ။