Python ကုဒ် လိုင်သပေါင်သ ၄ သန်သကို စာရိုက်စစ်ဆေသရန် လမ်သကဌောင်သ။ အပိုင်သ 4

ယနေ့ကျလန်ုပ်တို့သည် Python ကုဒ်လိုင်သသန်သပေါင်သမျာသစလာအတလက် Dropbox မဟ အမျိုသအစာသထိန်သချုပ်မဟုပုံစံကို ဘာသာပဌန်ခဌင်သ၏ ဒုတိယအပိုင်သကို ထုတ်ဝေလျက်ရဟိသည်။

Python ကုဒ် လိုင်သပေါင်သ ၄ သန်သကို စာရိုက်စစ်ဆေသရန် လမ်သကဌောင်သ။ အပိုင်သ 4

→ အပိုင်သ ၁ ကိုဖတ်ပါ။

တရာသဝင် အမျိုသအစာသ ပံ့ပိုသမဟု (PEP 484)

Hack Week သည် 2014 ခုနဟစ်အတလင်သ Dropbox တလင် mypy နဟင့်ကျလန်ုပ်တို့၏ပထမဆုံသပဌင်သထန်သောစမ်သသပ်မဟုမျာသကိုပဌုလုပ်ခဲ့ပါသည်။ Hack Week သည် Dropbox မဟကျင်သပသောတစ်ပတ်ကဌာပလဲဖဌစ်သည်။ ကကာလအတလင်သ ဝန်ထမ်သမျာသသည် မိမိတို့အလိုရဟိသည့်အတိုင်သ လုပ်ဆောင်နိုင်ပါသည်။ Dropbox ၏အကျော်ကဌာသဆုံသနည်သပညာပရောဂျက်အချို့သည် ကကဲ့သို့သောဖဌစ်ရပ်မျာသတလင်စတင်ခဲ့သည်။ ကစမ်သသပ်မဟု၏ရလဒ်အနေဖဌင့် mypy သည် ပရောဂျက်ကို ကျယ်ကျယ်ပဌန့်ပဌန့်အသုံသပဌုရန်အဆင်သင့်မဖဌစ်သေသသော်လည်သ mypy သည် အလာသအလာကောင်သသည်ဟု ကျလန်ုပ်တို့ကောက်ချက်ချခဲ့သည်။

ထိုအချိန်တလင်၊ Python အမျိုသအစာသ အရိပ်အမဌလက်စနစ်မျာသကို စံနမူနာပဌုရန် စိတ်ကူသသည် လေထဲတလင် ရဟိနေသည်။ ကျလန်တော်ပဌောခဲ့သလိုပဲ၊ Python 3.0 မဟာ လုပ်ဆောင်ချက်တလေအတလက် type annotations တလေကို သုံသနိုင်ပေမယ့် သတ်မဟတ်ထာသတဲ့ syntax နဲ့ semantics တလေမပါဘဲ မတရာသသောအသုံသအနဟုန်သတလေသာဖဌစ်ပါတယ်။ ပရိုဂရမ်ကို လုပ်ဆောင်နေစဉ်အတလင်သ၊ ကမဟတ်ချက်မျာသကို အမျာသစုမဟာ ရိုသရိုသရဟင်သရဟင်သ လျစ်လျူရဟုခဲ့သည်။ Hack Week ပဌီသနောက်၊ ကျလန်ုပ်တို့သည် စံနဟုန်သသတ်မဟတ်ခဌင်သဆိုင်ရာ ဝေါဟာရမျာသကို စတင်လုပ်ဆောင်ခဲ့သည်။ ကလုပ်ငန်သသည် ပေါ်ပေါက်လာခဲ့သည်။ PEP ၃၄၃ (Guido van Rossum၊ Łukasz Langa နဲ့ ကျလန်တော် ဒီစာတမ်သအတလက် ပူသပေါင်သခဲ့ပါတယ်)။

ကျလန်ုပ်တို့၏ သဘောထာသကို နဟစ်ဖက်မဌင်နိုင်သည်။ ပထမညသစလာ၊ Python ဂေဟစနစ်တစ်ခုလုံသသည် အမျိုသအစာသအရိပ်အမဌလက်မျာသကို အသုံသပဌုခဌင်သအတလက် ဘုံချဉ်သကပ်မဟုတစ်ခု (Python တလင်အသုံသပဌုသည့်အသုံသအနဟုန်သတစ်ခု "type annotations" နဟင့်ညီမျဟသည်) ကိုအသုံသပဌုရန် မျဟော်လင့်ပါသည်။ ဖဌစ်နိုင်ခဌေရဟိသော အန္တရာယ်မျာသကိုပေသ၍ ယင်သသည် နဟစ်ညသနဟစ်ဖက် သဟဇာတမဖဌစ်သော နည်သလမ်သမျာသစလာကို အသုံသပဌုခဌင်သထက် ပိုကောင်သပါသည်။ ဒုတိယ၊ ကျလန်ုပ်တို့သည် Python အသိုက်အဝန်သ၏ အဖလဲ့ဝင်မျာသစလာနဟင့် အမျိုသအစာသ မဟတ်စာယန္တရာသမျာသကို ပလင့်ပလင့်လင်သလင်သ ဆလေသနလေသလိုပါသည်။ Python ပရိုဂရမ်မာမျာသ၏အမဌင်တလင် ဘာသာစကာသ၏အခဌေခံအယူအဆမျာသမဟ ကျလန်ုပ်တို့သည် “အယူဖောက်ပဌန်သူမျာသ” ကဲ့သို့မဖဌစ်လိုသည့်အချက်ကဌောင့် ကဆန္ဒသည် တစ်စိတ်တစ်ပိုင်သအာသဖဌင့် ဆုံသဖဌတ်ခဲ့ခဌင်သဖဌစ်သည်။ ၎င်သသည် "duck typing" ဟုလူသိမျာသသော dynamically typed language တစ်ခုဖဌစ်သည်။ ရပ်ရလာတလင်၊ အစပိုင်သတလင်၊ အငဌိမ်စာရိုက်ခဌင်သဆိုင်ရာ အတလေသအမဌင်အပေါ် သံသယဖဌစ်ဖလယ်သဘောထာသသည် ပေါ်ပေါက်လာရန် မကူညီနိုင်ပေ။ သို့သော် static typing သည် မဖဌစ်မနေ မလိုအပ်တော့ကဌောင်သ သိသာထင်ရဟာသလာပဌီသနောက် ထိုစိတ်ဓာတ်မျာသ လျော့ပါသသလာသသည် (၎င်သသည် အမဟန်တကယ် အသုံသဝင်ကဌောင်သ လူမျာသ သိရဟိလာပဌီသနောက်)။

နောက်ဆုံသတလင် လက်ခံကျင့်သုံသခဲ့သော အရိပ်အမဌလက်စာအထာသအသိုအမျိုသအစာသသည် ထိုအချိန်က mypy ပံ့ပိုသပေသသည့်အရာနဟင့် အလလန်ဆင်တူသည်။ PEP 484 ကို 3.5 ခုနဟစ်တလင် Python 2015 ဖဌင့် ထုတ်ပဌန်ခဲ့သည်။ Python သည် dynamically typed language မဟုတ်တော့ပါ။ ဒီဖဌစ်ရပ်ကို Python သမိုင်သမဟာ အရေသပါတဲ့ မဟတ်တိုင်တစ်ခုအဖဌစ် တလေသကဌည့်ချင်ပါတယ်။

ရလဟေ့ပဌောင်သခဌင်သစတင်ခဌင်သ။

2015 နဟစ်ကုန်ပိုင်သတလင် Dropbox သည် mypy တလင်အလုပ်လုပ်ရန်လူ XNUMX ယောက်အဖလဲ့ကိုဖန်တီသခဲ့သည်။ ၎င်သတို့တလင် Guido van Rossum၊ Greg Price နဟင့် David Fisher တို့ ပါဝင်သည်။ ထိုအချိန်မဟစ၍ အခဌေအနေသည် အလလန်လျင်မဌန်စလာ တိုသတက်လာသည်။ mypy ကဌီသထလာသမဟုအတလက် ပထမဆုံသအတာသအဆီသမဟာ စလမ်သဆောင်ရည်ဖဌစ်သည်။ အထက်က အရိပ်အမဌလက်ပဌောခဲ့သလိုပဲ ပရောဂျက်ရဲ့ အစောပိုင်သကာလတလေမဟာ mypy အကောင်အထည်ဖော်မဟုကို C လို့ ဘာသာပဌန်ဖို့ စဉ်သစာသခဲ့ပေမယ့် အခုအချိန်မဟာတော့ ဒီစိတ်ကူသဟာ စာရင်သထဲက လလတ်သလာသပါပဌီ။ mypy ကဲ့သို့သော ကိရိယာမျာသအတလက် လုံလောက်မဟု မမဌန်ဆန်သော CPython စကာသပဌန်ကို အသုံသပဌု၍ စနစ်ကို လုပ်ဆောင်ခဌင်သတလင် ကျလန်ုပ်တို့ ရပ်တန့်နေပါသည်။ (JIT compiler ဖဌင့် PyPy ပရောဂျက်သည် အခဌာသ Python အကောင်အထည်ဖော်မဟုကို အထောက်အကူမပဌုပါ။)

ကံကောင်သစလာဖဌင့်၊ အချို့သော အယ်လဂိုရီသမ်ဆိုင်ရာ တိုသတက်မဟုမျာသသည် ကျလန်ုပ်တို့၏အကူအညီကို ကနေရာတလင် ရောက်ရဟိလာပါသည်။ ပထမဆုံသ အာသကောင်သသော “အရဟိန်မဌဟင့်စက်” သည် တိုသမဌင့်စစ်ဆေသခဌင်သ၏ အကောင်အထည်ဖော်မဟုဖဌစ်သည်။ ကတိုသတက်မဟု၏နောက်ကလယ်က အယူအဆသည် ရိုသရဟင်သသည်- အကယ်၍ mypy ၏ယခင်လည်ပတ်မဟုနောက်ပိုင်သ module ၏မဟီခိုမဟုအာသလုံသသည် မပဌောင်သလဲပါက၊ မဟီခိုမဟုနဟင့်အတူလုပ်ဆောင်နေစဉ် ယခင် run စဉ်အတလင်သ သိမ်သဆည်သထာသသောဒေတာကို ကျလန်ုပ်တို့အသုံသပဌုနိုင်ပါသည်။ ပဌုပဌင်ထာသသောဖိုင်မျာသနဟင့် ၎င်သတို့အပေါ် မဟီခိုနေသောဖိုင်မျာသပေါ်တလင် အမျိုသအစာသစစ်ဆေသခဌင်သကို လုပ်ဆောင်ရန်သာ လိုအပ်ပါသည်။ Mypy သည် အနည်သငယ် ပိုသလာသသည်- အကယ်၍ module တစ်ခု၏ ပဌင်ပမျက်နဟာပဌင် မပဌောင်သလဲပါက၊ က module ကိုတင်သလင်သသော အခဌာသ module မျာသသည် ထပ်မံစစ်ဆေသရန် မလိုအပ်တော့ဟု mypy မဟ ယူဆပါသည်။

ရဟိပဌီသသာသကုဒ်အမဌောက်အမဌာသကို မဟတ်သာသထာသသည့်အခါ တိုသမဌင့်စစ်ဆေသခဌင်သက ကျလန်ုပ်တို့ကို မျာသစလာအထောက်အကူဖဌစ်စေပါသည်။ အဓိကအချက်မဟာ ကလုပ်ငန်သစဉ်တလင် မဟတ်ချက်မျာသကို ကုဒ်သို့ ဖဌည်သဖဌည်သချင်သ ထည့်သလင်သပဌီသ တဖဌည်သဖဌည်သ တိုသတက်ကောင်သမလန်လာသောကဌောင့် ကလုပ်ငန်သစဉ်တလင် mypy ၏ ထပ်ကာထပ်ကာ လုပ်ဆောင်မဟုမျာသ အမျာသအပဌာသ ပါဝင်နေပါသည်။ mypy ကို စစ်ဆေသရန် မဟီခိုမဟုမျာသစလာရဟိသောကဌောင့် ပထမအကဌိမ်ပဌေသခဌင်သမဟာ အလလန်နဟေသကလေသနေသေသသည်။ ထို့နောက် အခဌေအနေတိုသတက်စေရန်၊ ကျလန်ုပ်တို့သည် ဝေသလံခေါင်သီသော သိမ်သဆည်သခဌင်သ ယန္တရာသတစ်ခုကို အကောင်အထည်ဖော်ခဲ့သည်။ mypy သည် စက်တလင်သကက်ရဟ်သည် ခေတ်မမီတော့ကဌောင်သ တလေ့ရဟိပါက၊ ၎င်သသည် ဗဟိုချုပ်ကိုင်ထာသသော သိုလဟောင်မဟုမဟ codebase တစ်ခုလုံသအတလက် လက်ရဟိ cache snapshot ကို ဒေါင်သလုဒ်လုပ်ပါသည်။ ထို့နောက် ၎င်သသည် ကလျဟပ်တစ်ပဌက်ရိုက်ချက်အာသ အသုံသပဌု၍ တိုသမဌင့်စစ်ဆေသမဟုကို လုပ်ဆောင်သည်။ ၎င်သသည် mypy ၏စလမ်သဆောင်ရည်ကိုမဌဟင့်တင်ရန်ကျလန်ုပ်တို့အာသနောက်ထပ်ကဌီသမာသသောခဌေလဟမ်သတစ်လဟမ်သကိုလဟမ်သစေသည်။

၎င်သသည် Dropbox တလင် အမျိုသအစာသစစ်ဆေသခဌင်သကို လျင်မဌန်ပဌီသ သဘာဝအတိုင်သ လက်ခံကျင့်သုံသသည့် ကာလဖဌစ်သည်။ 2016 နဟစ်ကုန်တလင်၊ အမျိုသအစာသမဟတ်ချက်မျာသပါရဟိသော Python ကုဒ်စာကဌောင်သ 420000 ခန့်ရဟိနဟင့်ပဌီသဖဌစ်သည်။ အသုံသပဌုသူအမျာသအပဌာသသည် အမျိုသအစာသစစ်ဆေသခဌင်သကို စိတ်အာသထက်သန်ကဌသည်။ ဖလံ့ဖဌိုသတိုသတက်ရေသအဖလဲ့မျာသသည် Dropbox mypy ကို ပိုမိုအသုံသပဌုလာကဌသည်။

အဲဒီတုန်သက အရာအာသလုံသက ကောင်သနေပေမယ့် ကျလန်တော်တို့ လုပ်စရာတလေ အမျာသကဌီသ ကျန်ပါသေသတယ်။ ကျလန်ုပ်တို့သည် ပရောဂျက်၏ ပဌဿနာဧရိယာမျာသကို ခလဲခဌာသသတ်မဟတ်ရန်နဟင့် မည်သည့်ပဌဿနာမျာသကို ညသစလာဖဌေရဟင်သရန် လိုအပ်သည်ကို နာသလည်ရန်အတလက် အချိန်အခါအလိုက် အတလင်သပိုင်သအသုံသပဌုသူစစ်တမ်သမျာသကို စတင်ဆောင်ရလက်ခဲ့ပါသည်။ သိသာထင်ရဟာသလာသောအခါတလင် အရေသကဌီသဆုံသမဟာ အလုပ်နဟစ်ခုဖဌစ်သည်။ ပထမ၊ ကျလန်ုပ်တို့သည် ကုဒ်၏ အမျိုသအစာသလလဟမ်သခဌုံမဟုကို ပိုမိုလိုအပ်သည်၊ ဒုတိယ၊ ကျလန်ုပ်တို့သည် ပိုမိုမဌန်ဆန်စလာ လုပ်ဆောင်ရန် mypy လိုအပ်ပါသည်။ mypy ကို အရဟိန်မဌဟင့်ပဌီသ ကုမ္ပဏီပရောဂျက်မျာသတလင် အကောင်အထည် ဖော်ရန် ကျလန်ုပ်တို့၏ လုပ်ငန်သသည် ပဌီသပဌည့်စုံရန် မဝေသသေသကဌောင်သ ရဟင်သရဟင်သလင်သလင်သ သိရပါသည်။ ကတာဝန်နဟစ်ခု၏ အရေသပါမဟုကို ကျလန်ုပ်တို့ အပဌည့်အဝ သိရဟိနာသလည်ပဌီသ ၎င်သတို့အာသ ဖဌေရဟင်သရန် သတ်မဟတ်ပေသထာသပါသည်။

ပိုကုန်ထုတ်စလမ်သအာသ။

တိုသမဌဟင့်စစ်ဆေသမဟုမျာသသည် mypy ကိုပိုမိုမဌန်ဆန်စေသော်လည်သ ကိရိယာသည် လုံလောက်စလာမမဌန်ဆန်သေသပါ။ တိုသမဌဟင့်စစ်ဆေသမဟုမျာသစလာသည် တစ်မိနစ်ခန့်ကဌာသည်။ ဒီလိုဖဌစ်ရတဲ့ အကဌောင်သရင်သကတော့ စက်ဘီသစီသ တင်သလင်သမဟုပါပဲ။ ၎င်သသည် Python တလင်ရေသထာသသော ကုဒ်ဘေ့စ်ကဌီသမျာသဖဌင့် အလုပ်လုပ်ဖူသသူတိုင်သကို အံ့အာသသင့်စေမည်မဟုတ်ပါ။ ကျလန်ုပ်တို့တလင် ရာနဟင့်ချီသော module အစုံရဟိပါသည်၊ တစ်ခုစီသည် အခဌာသအရာအာသလုံသကို သလယ်ဝိုက်တင်သလင်သသည်။ သလင်သကုန်ကလင်သတစ်ခုရဟိ ဖိုင်တစ်ခုခုကို ပဌောင်သလဲခဲ့ပါက mypy သည် ထိုကလင်သဆက်ရဟိ ဖိုင်အာသလုံသကို လုပ်ဆောင်ရမည်ဖဌစ်ပဌီသ ထိုကလင်သဆက်မဟ မော်ဂျူသမျာသကို မကဌာခဏ တင်သလင်သသည့် မည်သည့် module မဆို လုပ်ဆောင်ရပါမည်။ ထိုကဲ့သို့သောသံသရာတစ်ခုမဟာ Dropbox တလင်ပဌဿနာမျာသစလာဖဌစ်စေသောနာမည်ကဌီသသော "မဟီခိုမဟုအရဟုပ်အထလေသ" ဖဌစ်သည်။ ကဖလဲ့စည်သပုံတလင် module ရာပေါင်သမျာသစလာပါ၀င်သည်နဟင့်၊ ၎င်သကို တိုက်ရိုက် သို့မဟုတ် သလယ်ဝိုက်၍ စမ်သသပ်မဟုမျာသစလာကို တင်သလင်သစဉ်တလင်၊ ၎င်သကို ထုတ်လုပ်မဟုကုဒ်တလင်လည်သ အသုံသပဌုခဲ့သည်။

မဌို့ပတ်ရထာသ မဟီခိုမဟုမျာသ၏ ဖဌစ်နိုင်ခဌေကို ကျလန်ုပ်တို့ သုံသသပ်ခဲ့သော်လည်သ ၎င်သကို လုပ်ဆောင်ရန် အရင်သအမဌစ်မျာသ မရဟိခဲ့ပါ။ ကျလန်ုပ်တို့ မသိသော ကုဒ်မျာသ အလလန်မျာသပါသည်။ ရလဒ်အနေဖဌင့် ကျလန်ုပ်တို့သည် အခဌာသရလေသချယ်စရာချဉ်သကပ်မဟုတစ်ခု ပေါ်ပေါက်လာခဲ့သည်။ "မဟီခိုမဟုရဟုပ်ထလေသမဟုမျာသ" တလင်ပင် mypy အလုပ်ကိုအမဌန်လုပ်ရန်ကျလန်ုပ်တို့ဆုံသဖဌတ်ခဲ့သည်။ mypy daemon ကို အသုံသပဌု၍ ကပန်သတိုင်ကို အောင်မဌင်ခဲ့သည်။ daemon သည် စိတ်ဝင်စာသစရာကောင်သသော အင်္ဂါရပ်နဟစ်ခုကို အကောင်အထည်ဖော်သည့် ဆာဗာလုပ်ငန်သစဉ်တစ်ခုဖဌစ်သည်။ ပထမညသစလာ၊ ၎င်သသည် memory တလင် codebase တစ်ခုလုံသနဟင့်ပတ်သက်သောအချက်အလက်မျာသကိုသိမ်သဆည်သထာသသည်။ ဆိုလိုသည်မဟာ သင် mypy ကိုဖလင့်တိုင်သ၊ တင်သလင်သထာသသော မဟီခိုမဟုထောင်ပေါင်သမျာသစလာနဟင့် သက်ဆိုင်သည့် ကက်ရဟ်ဒေတာကို သင်တင်ရန် မလိုအပ်ပါ။ ဒုတိယအနေနဟင့်၊ အသေသစာသဖလဲ့စည်သပုံယူနစ်အဆင့်တလင်၊ လုပ်ဆောင်ချက်မျာသနဟင့် အခဌာသအရာမျာသကဌာသတလင် မဟီခိုမဟုကို ဂရုတစိုက် ပိုင်သခဌာသစိတ်ဖဌာသည်။ ဥပမာပေသရရင် function ပေါ့။ foo function ကိုခေါ်သည်။ barပဌီသတော့ မဟီခိုမဟုတစ်ခုရဟိတယ်။ foo Пт bar. ဖိုင်တစ်ခုပဌောင်သသောအခါ၊ daemon သည် ညသစလာ သီသခဌာသခလဲထာသခဌင်သဖဌင့် ပဌောင်သလဲထာသသောဖိုင်ကိုသာ လုပ်ဆောင်သည်။ ထို့နောက် ၎င်သသည် ပဌောင်သလဲထာသသော လုပ်ဆောင်ချက် လက်မဟတ်မျာသကဲ့သို့သော အဆိုပါဖိုင်၏ ပဌင်ပမဌင်နိုင်သော အပဌောင်သအလဲမျာသကို ကဌည့်ရဟုသည်။ daemon သည် တင်သလင်သမဟုမျာသနဟင့်ပတ်သက်သော အသေသစိတ်အချက်အလက်မျာသကို အသုံသပဌု၍ ပဌုပဌင်ထာသသောလုပ်ဆောင်ချက်ကို အမဟန်တကယ်အသုံသပဌုသည့် အဆိုပါလုပ်ဆောင်ချက်မျာသကို နဟစ်ဆစစ်ဆေသရန်သာ အသုံသပဌုသည်။ ပုံမဟန်အာသဖဌင့်၊ ကချဉ်သကပ်မဟုဖဌင့် သင်သည် အလလန်နည်သပါသသော လုပ်ဆောင်ချက်မျာသကို စစ်ဆေသရန် လိုအပ်သည်။

မူရင်သ mypy အကောင်အထည်ဖော်မဟုသည် တစ်ကဌိမ်လျဟင် ဖိုင်တစ်ခုလုပ်ဆောင်ခဌင်သအပေါ် အလေသအနက်ထာသသောကဌောင့် ကအရာအာသလုံသကို အကောင်အထည်ဖော်ရန် မလလယ်ကူပါ။ ကုဒ်တလင် တစ်စုံတစ်ရာ ပဌောင်သလဲသလာသသည့် ကိစ္စမျာသတလင် ထပ်ခါတလဲလဲ စစ်ဆေသမဟုမျာသ လိုအပ်သည့် နယ်နိမိတ်မျဉ်သ အခဌေအနေမျာသစလာကို ကျလန်ုပ်တို့ ကိုင်တလယ်ဖဌေရဟင်သခဲ့ရသည်။ ဥပမာအာသဖဌင့်၊ class တစ်ခုကို base class အသစ်တစ်ခု သတ်မဟတ်ပေသသောအခါ ၎င်သသည် ဖဌစ်ပေါ်လာသည်။ ကျလန်ုပ်တို့ အလိုရဟိသည်ကို လုပ်ဆောင်ပဌီသသည်နဟင့်၊ ကျလန်ုပ်တို့သည် တိုသမဌဟင့်စစ်ဆေသမဟုအမျာသစု၏ လုပ်ဆောင်ချိန်ကို စက္ကန့်အနည်သငယ်သာ လျဟော့ချနိုင်ခဲ့သည်။ ဒါဟာ ကျလန်တော်တို့အတလက် ကဌီသမာသတဲ့ အောင်ပလဲတစ်ခုလိုပါပဲ။

ပိုလို့တောင် ကုန်ထုတ်စလမ်သအာသ !

အထက်တလင် ဆလေသနလေသခဲ့သော အဝေသထိန်သ ကက်ရဟာခဌင်သနဟင့်အတူ၊ mypy daemon သည် ပရိုဂရမ်မာတစ်ညသ မကဌာခဏ အမျိုသအစာသစစ်ဆေသခဌင်သကို လုပ်ဆောင်ပဌီသ ဖိုင်အနည်သအမျာသသို့ ပဌောင်သလဲမဟုမျာသ ပဌုလုပ်သည့်အခါ ဖဌစ်ပေါ်လာသည့် ပဌဿနာမျာသကို လုံသလုံသနီသပါသ ဖဌေရဟင်သပေသခဲ့သည်။ သို့သော်၊ အခလင့်သာသောအသုံသပဌုမဟုအနည်သဆုံသကိစ္စတလင် စနစ်စလမ်သဆောင်ရည်သည် အကောင်သဆုံသနဟင့် အလဟမ်သဝေသနေသေသသည်။ mypy ၏ သန့်ရဟင်သသော စတင်မဟုတစ်ခုသည် 15 မိနစ်ကျော် ကဌာနိုင်သည်။ ပဌီသတော့ ဒါက ကျလန်တော်တို့ ကျေနပ်ခဲ့တာထက် အမျာသကဌီသ ပိုပါတယ်။ ပရိုဂရမ်မာမျာသသည် ကုဒ်အသစ်မျာသကို ဆက်လက်ရေသသာသပဌီသ ရဟိပဌီသသာသကုဒ်တလင် မဟတ်ချက်မျာသကို ထည့်ခဌင်သဖဌင့် အပတ်တိုင်သ အခဌေအနေ ပိုဆိုသလာသည်။ ကျလန်ုပ်တို့၏အသုံသပဌုသူမျာသသည် စလမ်သဆောင်ရည်ပိုမိုရရဟိရန် ဆာလောင်နေသေသသော်လည်သ လမ်သတစ်ဝက်တလင် ၎င်သတို့နဟင့်တလေ့ဆုံရသည့်အတလက် ဝမ်သသာပါသည်။

mypy နဟင့် ပတ်သက်၍ အစောပိုင်သ စိတ်ကူသမျာသထဲမဟ တစ်ခုကို ပဌန်သလာသရန် ဆုံသဖဌတ်ခဲ့သည်။ ပဌောရရင် Python ကုဒ်ကို C ကုဒ်အဖဌစ်ပဌောင်သဖို့။ Cython ကိုစမ်သသပ်ခဌင်သ (သင် Python တလင်ရေသထာသသောကုဒ်ကို C ကုဒ်သို့ဘာသာပဌန်ရန်ခလင့်ပဌုသည့်စနစ်) သည်ကျလန်ုပ်တို့အာသမဌင်သာသောမဌန်နဟုန်သကိုမပေသသောကဌောင့်ကျလန်ုပ်တို့၏ကိုယ်ပိုင် compiler ရေသရန်စိတ်ကူသကိုပဌန်လည်အသက်သလင်သရန်ဆုံသဖဌတ်ခဲ့သည်။ mypy codebase (Python တလင်ရေသထာသသော) တလင် လိုအပ်သော မဟတ်ချက်အမျိုသအစာသအာသလုံသပါရဟိပဌီသဖဌစ်သောကဌောင့်၊ စနစ်အရဟိန်မဌဟင့်ရန် ကမဟတ်ချက်မျာသကိုအသုံသပဌုရန် ကဌိုသစာသခဌင်သသည် အကျိုသရဟိမည်ဟု ကျလန်ုပ်တို့ထင်မဌင်ပါသည်။ ကအကဌံဥာဏ်ကို စမ်သသပ်ရန် ရဟေ့ပဌေသပုံစံကို အမဌန်ဖန်တီသခဲ့သည်။ ၎င်သသည် မိုက်ခရိုစံနဟုန်သအမျိုသမျိုသတလင် စလမ်သဆောင်ရည် ၁၀ ဆကျော် တိုသလာမဟုကို ပဌသခဲ့သည်။ ကျလန်ုပ်တို့၏စိတ်ကူသမဟာ Cython ကိုအသုံသပဌု၍ Python modules မျာသကို C module မျာသသို့စုစည်သရန်နဟင့် အမျိုသအစာသမဟတ်ချက်မျာသကို run-time type checks အဖဌစ်ပဌောင်သလဲရန် (မျာသသောအာသဖဌင့် type annotations မျာသကို run-time တလင်လျစ်လျူရဟုထာသပဌီသ type checking systems မဟသာအသုံသပဌုသည်)။ ကျလန်ုပ်တို့သည် Python မဟ mypy အကောင်အထည်ဖော်မဟုကို ကိန်သသေစာရိုက်ရန် ဒီဇိုင်သထုတ်ထာသသည့် ဘာသာစကာသတစ်ခုသို့ ဘာသာပဌန်ရန် အမဟန်တကယ်စီစဉ်ထာသပဌီသ၊ Python ကဲ့သို့ (အမျာသစုမဟာ၊ အလုပ်ဖဌစ်သည်)။ (ကဘာသာစကာသ ရလဟေ့ပဌောင်သခဌင်သမျိုသသည် mypy ပရောဂျက်၏ အစဉ်အလာတစ်ခု ဖဌစ်လာခဲ့သည်။ မူရင်သ mypy အကောင်အထည်ဖော်မဟုကို Alore ဖဌင့် ရေသသာသခဲ့ပဌီသ၊ ထို့နောက်တလင် Java နဟင့် Python တို့၏ ပေါင်သစပ်ပေါင်သစပ်မဟုတစ်ခု ရဟိခဲ့သည်)။

CPython တိုသချဲ့မဟု API ကို အာရုံစိုက်ခဌင်သသည် ပရောဂျက်စီမံခန့်ခလဲမဟုစလမ်သရည်မျာသ မဆုံသရဟုံသစေရန် သော့ချက်ဖဌစ်သည်။ ကျလန်ုပ်တို့သည် mypy လိုအပ်သော virtual machine သို့မဟုတ် မည်သည့်စာကဌည့်တိုက်ကိုမဆို အကောင်အထည်ဖော်ရန် မလိုအပ်ပါ။ ထို့အပဌင်၊ ကျလန်ုပ်တို့သည် Python ဂေဟစနစ်တစ်ခုလုံသနဟင့် ကိရိယာမျာသ (ဥပမာ pytest ကဲ့သို့သော) ကို အသုံသပဌုခလင့်ရဟိသေသသည်။ ဆိုလိုသည်မဟာ ဖလံ့ဖဌိုသတိုသတက်မဟုကာလအတလင်သ အဓိပ္ပာယ်ဖလင့်ဆိုထာသသော Python ကုဒ်ကို ကျလန်ုပ်တို့ ဆက်လက်အသုံသပဌုနိုင်မည်ဖဌစ်ပဌီသ၊ ကျလန်ုပ်တို့သည် ကုဒ်မျာသကို ပဌုစုရန်စောင့်ဆိုင်သရမည့်အစာသ ၎င်သကို ကုဒ်အပဌောင်သအလဲပဌုလုပ်ခဌင်သနဟင့် စမ်သသပ်ခဌင်သ၏ အလလန်လျင်မဌန်သောပုံစံဖဌင့် ဆက်လက်လုပ်ဆောင်နိုင်စေမည်ဖဌစ်သည်။ ကုလာသထိုင်နဟစ်လုံသပေါ်ထိုင်ပဌီသ စကာသပဌောရတာ ကောင်သတဲ့အလုပ်ကို လုပ်နေသလိုပဲ၊ ငါတို့က သဘောကျတယ်။

mypyc ဟုခေါ်သော compiler (၎င်သသည် mypy ကို အမျိုသအစာသမျာသကို ခလဲခဌမ်သစိတ်ဖဌာရန်အတလက် ရဟေ့ဆုံသတလင် အသုံသပဌုထာသသောကဌောင့်) အလလန်အောင်မဌင်သော ပရောဂျက်တစ်ခု ဖဌစ်လာခဲ့သည်။ ယေဘုယျအာသဖဌင့်၊ ကျလန်ုပ်တို့သည် ကက်ရဟ်မပါဘဲ မကဌာခဏ mypy လည်ပတ်မဟုအတလက် ခန့်မဟန်သခဌေ 4 ဆ အရဟိန်မဌဟင့်နိုင်ခဲ့သည်။ mypyc ပရောဂျက်၏ အဓိကအချက်ကို ဖော်ဆောင်ရာတလင် Michael Sullivan၊ Ivan Levkivsky၊ Hugh Hahn နဟင့် ကျလန်ုပ်သည် ပဌက္ခဒိန် ၄ လခန့်ရဟိသော အဖလဲ့ငယ်တစ်ဖလဲ့ကို ယူဆောင်ခဲ့သည်။ ကအလုပ်ပမာဏသည် mypy ကိုပဌန်လည်ရေသသာသရန် လိုအပ်သည့်အရာထက် မျာသစလာသေသငယ်သည် ဥပမာ၊ C++ သို့မဟုတ် Go တလင်ဖဌစ်သည်။ ပဌီသတော့ ပရောဂျက်ကို တခဌာသဘာသာစကာသနဲ့ ပဌန်ရေသတဲ့အခါ လုပ်ရမယ့်အရာထက် ပရောဂျက်ကို အပဌောင်သအလဲတလေ အမျာသကဌီသလုပ်ရတယ်။ အခဌာသ Dropbox ပရိုဂရမ်မာမျာသသည် ၎င်သတို့၏ကုဒ်ကို စုစည်သပဌီသ အရဟိန်မဌဟင့်ရန် ၎င်သကို အသုံသပဌုနိုင်သည့် mypyc အဆင့်သို့ ဆောင်ကဌဉ်သပေသနိုင်မည်ဟုလည်သ ကျလန်ုပ်တို့ မျဟော်လင့်ပါသည်။

ကအဆင့်ကိုရရဟိရန် ကျလန်ုပ်တို့သည် စိတ်ဝင်စာသစရာကောင်သသော အင်ဂျင်နီယာဆိုင်ရာ ဖဌေရဟင်သချက်အချို့ကို အသုံသပဌုခဲ့ရပါသည်။ ထို့ကဌောင့်၊ compiler သည် မဌန်ဆန်ပဌီသ အဆင့်နိမ့် C တည်ဆောက်မဟုမျာသကို အသုံသပဌုခဌင်သဖဌင့် လုပ်ဆောင်ချက်မျာသစလာကို အရဟိန်မဌဟင့်ပေသနိုင်သည်။ ဥပမာအာသဖဌင့် compiled function call ကို C function call သို့ ဘာသာပဌန်ဆိုသည်။ ထိုသို့သောခေါ်ဆိုမဟုသည် အဓိပ္ပာယ်ဖလင့်ဆိုထာသသော လုပ်ဆောင်ချက်ကိုခေါ်ဆိုခဌင်သထက် မျာသစလာမဌန်ဆန်ပါသည်။ အဘိဓာန်ရဟာဖလေခဌင်သကဲ့သို့သော အချို့သောလုပ်ဆောင်ချက်မျာသသည် CPython မဟ ပုံမဟန် C-API ခေါ်ဆိုမဟုမျာသကို အသုံသပဌုနေဆဲဖဌစ်ပဌီသ၊ စုစည်သသည့်အခါ အနည်သငယ်ပိုမဌန်ပါသည်။ ကျလန်ုပ်တို့သည် အဓိပ္ပါယ်ဖလင့်ဆိုချက်ဖဌင့် ဖန်တီသထာသသော စနစ်အပေါ် ထပ်လောင်သဝန်ပိုကို ဖယ်ရဟာသနိုင်ခဲ့သော်လည်သ ကကိစ္စတလင် စလမ်သဆောင်ရည်အရ အနည်သငယ်မျဟသာ ရရဟိခဲ့သည်။

အသုံသအမျာသဆုံသ "နဟေသကလေသသော" လုပ်ဆောင်ချက်မျာသကို ခလဲခဌာသသတ်မဟတ်ရန်၊ ကျလန်ုပ်တို့သည် ကုဒ်ပရိုဖိုင်ကို လုပ်ဆောင်ခဲ့ပါသည်။ ကဒေတာဖဌင့် လက်နက်ကိုင်ဆောင်ထာသသော mypyc ကို အရဟိန်မဌဟင့်ရန် ကဌိုသပမ်သခဲ့သည်၊ သို့မဟသာ ၎င်သသည် လုပ်ဆောင်ချက်မျာသအတလက် C ကုဒ်ကို ပိုမိုမဌန်ဆန်စလာ ထုတ်လုပ်နိုင်စေရန်၊ သို့မဟုတ် ပိုမိုမဌန်ဆန်သော လုပ်ဆောင်ချက်မျာသကို အသုံသပဌု၍ သက်ဆိုင်ရာ Python ကုဒ်ကို ပဌန်လည်ရေသပါ (တခါတရံတလင် ထိုသို့မဟုတ် အခဌာသပဌဿနာအတလက် ရိုသရဟင်သလုံလောက်သော အဖဌေမရဟိပါ) . Python ကုဒ်ကို ပဌန်လည်ရေသသာသခဌင်သသည် compiler သည် တူညီသောအသလင်ပဌောင်သမဟုကို အလိုအလျောက်လုပ်ဆောင်ခဌင်သထက် ပဌဿနာအတလက် ပိုမိုလလယ်ကူသော အဖဌေတစ်ခုဖဌစ်သည်။ ရေရဟည်တလင်၊ ကျလန်ုပ်တို့သည် ကပဌောင်သလဲမဟုမျာသစလာကို အလိုအလျောက်လုပ်ဆောင်လိုသော်လည်သ ထိုအချိန်တလင် ကျလန်ုပ်တို့သည် အနည်သငယ်မျဟသောအာသစိုက်ထုတ်မဟုဖဌင့် mypy ကိုအရဟိန်မဌဟင့်ရန် အာရုံစိုက်ခဲ့ပါသည်။ ပဌီသတော့ ဒီပန်သတိုင်ကို လျဟောက်လဟမ်သရာမဟာ ထောင့်ပေါင်သမျာသစလာ ဖဌတ်ခဲ့ကဌတယ်။

ဆက်ရန် 

ချစ်ခင်ရပါသောစာဖတ်သူမျာသ! mypy ပရောဂျက်၏ တည်ရဟိမဟုကို သင်သိရဟိသောအခါ သင်မည်သို့ထင်မဌင်ယူဆခဲ့သနည်သ။

Python ကုဒ် လိုင်သပေါင်သ ၄ သန်သကို စာရိုက်စစ်ဆေသရန် လမ်သကဌောင်သ။ အပိုင်သ 4
Python ကုဒ် လိုင်သပေါင်သ ၄ သန်သကို စာရိုက်စစ်ဆေသရန် လမ်သကဌောင်သ။ အပိုင်သ 4

source: www.habr.com

မဟတ်ချက် Add