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

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

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

Dropbox သည် Python တလင်အမျာသကဌီသရေသသည်။ ၎င်သသည် back-end ဝန်ဆောင်မဟုမျာသနဟင့် desktop ကလိုင်သယင့်အပလီကေသရဟင်သမျာသအတလက် နဟစ်ခုလုံသတလင် ကျလန်ုပ်တို့ အလလန်အသုံသမျာသသော ဘာသာစကာသတစ်ခုဖဌစ်သည်။ ကျလန်ုပ်တို့သည် Go၊ TypeScript နဟင့် Rust အမျာသအပဌာသကို အသုံသပဌုသော်လည်သ Python သည် ကျလန်ုပ်တို့၏ အဓိကဘာသာစကာသဖဌစ်သည်။ ကျလန်ုပ်တို့၏စကေသကိုထည့်သလင်သစဉ်သစာသကာ သန်သပေါင်သမျာသစလာသော Python ကုဒ်လိုင်သမျာသအကဌောင်သကို ကျလန်ုပ်တို့ပဌောနေကဌသည်မဟာ၊ ထိုကုဒ်၏ သလက်လက်စလာစာရိုက်ခဌင်သသည် မလိုအပ်ဘဲ ၎င်သ၏နာသလည်မဟုကို ရဟုပ်ထလေသစေပဌီသ လုပ်သာသကုန်ထုတ်စလမ်သအာသကို ပဌင်သထန်စလာ သက်ရောက်မဟုရဟိစေပါသည်။ ကပဌဿနာကို လျော့ပါသစေရန်၊ ကျလန်ုပ်တို့သည် mypy ကိုအသုံသပဌု၍ ကျလန်ုပ်တို့၏ကုဒ်ကို static type checking အဖဌစ်သို့ ဖဌည်သဖဌည်သချင်သ ပဌောင်သလဲလာကဌသည်။ ၎င်သသည် Python အတလက် ရေပန်သအစာသဆုံသ standalone အမျိုသအစာသ စစ်ဆေသခဌင်သစနစ် ဖဌစ်နိုင်သည်။ Mypy သည် open source ပရောဂျက်ဖဌစ်ပဌီသ ၎င်သ၏ အဓိက developer မျာသသည် Dropbox တလင် အလုပ်လုပ်ပါသည်။

Dropbox သည် ကအတိုင်သအတာတလင် Python ကုဒ်တလင် static type checking ကိုအကောင်အထည်ဖော်သည့်ပထမဆုံသကုမ္ပဏီမျာသထဲမဟတစ်ခုဖဌစ်သည်။ Mypy ကို ယနေ့ခေတ် ပရောဂျက်ပေါင်သ ထောင်ပေါင်သမျာသစလာတလင် အသုံသပဌုပါသည်။ သူတို့ပဌောသည့်အတိုင်သ၊ ကကိရိယာသည် အကဌိမ်ပေါင်သ မရေမတလက်နိုင်သော စစ်ပလဲတလင် စမ်သသပ်ခဲ့သည်။ ငါတို့ အခုရောက်နေတဲ့နေရာကို ရောက်ဖို့ အဝေသကဌီသရောက်လာပဌီ။ လမ်သတစ်လျဟောက်တလင် မအောင်မဌင်သော လုပ်ဆောင်မဟုမျာသနဟင့် မအောင်မဌင်သော စမ်သသပ်မဟုမျာသ မျာသစလာရဟိခဲ့သည်။ ကျလန်ုပ်၏သုတေသနပရောဂျက်၏တစ်စိတ်တစ်ပိုင်သအနေဖဌင့်၎င်သ၏ကျောက်တုံသကဌီသအစမဟအစ Python တလင်တည်ငဌိမ်သောအမျိုသအစာသစစ်ဆေသခဌင်သ၏သမိုင်သကဌောင်သကိုဖော်ပဌသည်၊ အမျိုသအစာသစစ်ဆေသခဌင်သနဟင့်အမျိုသအစာသအရိပ်အမဌလက်ပေသခဌင်သမျာသသည် Python တလင်ရေသသောမရေတလက်နိုင်သော developer မျာသအတလက်ပုံမဟန်နေရာဖဌစ်လာသောအခါတလင်ပါရဟိသည်။ ကယန္တရာသမျာသကို IDE မျာသနဟင့် ကုဒ်ခလဲခဌမ်သစိတ်ဖဌာသူမျာသကဲ့သို့သော ကိရိယာမျာသစလာဖဌင့် ပံ့ပိုသပေသထာသပါသည်။

→ ဒုတိယပိုင်သကိုဖတ်ပါ

အဘယ်ကဌောင့် အမျိုသအစာသစစ်ဆေသရန် လိုအပ်သနည်သ။

အကယ်၍ သင်သည် ဒိုင်သနမစ်ဖဌင့်ရိုက်ထာသသော Python ကိုအသုံသပဌုဖူသပါက၊ မကဌာသေသမီက static typing နဟင့် mypy နဟင့်ပတ်သက်ပဌီသ အဘယ်ကဌောင့် ယခုလို ရဟုပ်ယဟက်ခတ်နေသနည်သဟူသည့်အချက်ကို သင့်တလင် ရဟုပ်ထလေသမဟုမျာသရဟိနိုင်သည်။ သို့မဟုတ် ၎င်သ၏သလက်လက်သောစာရိုက်ခဌင်သကဌောင့် Python ကို သင်အတိအကျနဟစ်သက်ပဌီသ ဖဌစ်ပျက်နေသည့်အရာသည် သင့်ကိုစိတ်ပျက်စေပါသည်။ static typing ၏တန်ဖိုသ၏သော့ချက်မဟာ ဖဌေရဟင်သချက်မျာသ၏စကေသဖဌစ်သည်- သင့်ပရောဂျက်ပိုကဌီသလေ၊ static typing ဆီသို့ သင်ပိုမိုအာသကိုသလေဖဌစ်ပဌီသ နောက်ဆုံသတလင်၊ သင်အမဟန်တကယ်လိုအပ်လေလေဖဌစ်သည်။

အချို့သော ပရောဂျက်တစ်ခုသည် လိုင်သပေါင်သ သောင်သနဟင့်ချီသော အရလယ်အစာသသို့ ရောက်ရဟိသလာသသည်ဆိုပါစို့၊ ၎င်သတလင် ပရိုဂရမ်မာမျာသစလာ လုပ်ဆောင်နေကဌသည်ကို တလေ့ရဟိရသည်။ အလာသတူ ပရောဂျက်ကို ကဌည့်ပါ၊ ကျလန်ုပ်တို့၏ အတလေ့အကဌုံကို အခဌေခံ၍ ၎င်သ၏ ကုဒ်ကို နာသလည်ခဌင်သသည် ဆော့ဖ်ဝဲရေသသာသသူမျာသကို စလမ်သဆောင်ရည်ရဟိစေမည့် သော့ချက်ဖဌစ်ကဌောင်သ ကျလန်ုပ်တို့ ပဌောနိုင်ပါသည်။ အမျိုသအစာသမဟတ်စာမျာသမပါဘဲ၊ ဥပမာအာသဖဌင့်၊ လုပ်ဆောင်ချက်တစ်ခုသို့မည်သည့်အငဌင်သအခုံမျာသပေသပို့ရန်၊ သို့မဟုတ် မည်သည့်လုပ်ဆောင်ချက်အမျိုသအစာသမျာသ ပဌန်ရနိုင်သည်ကို အဖဌေရဟာရန်ခက်ခဲနိုင်သည်။ ကသည်မဟာ အမျိုသအစာသမဟတ်စာမျာသမသုံသဘဲ အဖဌေရခက်လေ့ရဟိသည့် ပုံမဟန်မေသခလန်သမျာသဖဌစ်သည်-

  • ကလုပ်ဆောင်ချက်ကို ပဌန်ရနိုင်ပါသလာသ။ None?
  • ကအငဌင်သအခုံသည် အဘယ်နည်သ။ items?
  • Attribute အမျိုသအစာသကဘာလဲ id: int ဟုတ်လာသ, strဒါမဟမဟုတ် စိတ်ကဌိုက် အမျိုသအစာသ ဖဌစ်နိုင်သလာသ။
  • ကအငဌင်သအခုံသည် စာရင်သတစ်ခု ဖဌစ်သင့်ပါသလာသ။ အဲဒါကို tuple ဖဌတ်ဖို့ ဖဌစ်နိုင်သလာသ။

အောက်ပါ အမျိုသအစာသ-မဟတ်စုပဌုထာသသော ကုဒ်အတိုအထလာကို ကဌည့်ရဟုပဌီသ အလာသတူမေသခလန်သမျာသကို ဖဌေရန် ကဌိုသစာသပါက၊ ကအရာသည် အရိုသရဟင်သဆုံသအလုပ်ဖဌစ်သည်-

class Resource:
    id: bytes
    ...
    def read_metadata(self, 
                      items: Sequence[str]) -> Dict[str, MetadataItem]:
        ...

  • read_metadata မပဌန်ဘူသ။ Nonereturn type မဟုတ်သောကဌောင့်၊ Optional[
].
  • အငဌင်သပလာသမဟု items လိုင်သမျာသ ၏ အစီအစဥ်တစ်ခုဖဌစ်သည်။ ၎င်သကို ကျပန်သပဌန်၍မရနိုင်ပါ။
  • ဂုဏ်ရည် id bytes ၏ string တစ်ခုဖဌစ်သည်။

စံပဌကမ္ဘာတစ်ခုတလင်၊ အဆိုပါအသေသစိတ်အချက်မျာသအာသလုံသကို ထည့်သလင်သထာသသောစာရလက်စာတမ်သ (docstring) တလင် ဖော်ပဌလိမ့်မည်ဟု မျဟော်လင့်မိပါသည်။ သို့သော် အတလေ့အကဌုံမျာသစလာသည် သင်အလုပ်လုပ်ရမည့်ကုဒ်တလင် ထိုသို့သောစာရလက်စာတမ်သမျာသကို မကဌာခဏ သတိပဌုမိခဌင်သမရဟိသည့်အချက်ကို ဥပမာမျာသစလာပေသသည်။ ထိုသို့သောစာရလက်စာတမ်သမျာသသည် ကုဒ်တလင်ရဟိနေလျဟင်ပင်၊ ၎င်သ၏အကဌလင်သမဲ့မဟန်ကန်မဟုကို ထည့်သလင်သစဉ်သစာသ၍မရပါ။ ကစာရလက်စာတမ်သသည် မရေမတလက်နိုင်သော၊ မမဟန်နိုင်သလို နာသလည်မဟုလလဲမဟာသခဌင်သအတလက် ပလင့်လင်သနိုင်သည်။ အဖလဲ့ကဌီသမျာသ သို့မဟုတ် ပရောဂျက်ကဌီသမျာသတလင် ကပဌဿနာသည် အလလန်ပဌင်သထန်လာနိုင်သည်။

Python သည် ပရောဂျက်မျာသ၏ အစောပိုင်သ သို့မဟုတ် အလယ်အလတ်အဆင့်မျာသတလင် ထူသချလန်သော်လည်သ တစ်ချိန်ချိန်တလင် အောင်မဌင်သောပရောဂျက်မျာသနဟင့် Python ကိုအသုံသပဌုသည့်ကုမ္ပဏီမျာသသည် အရေသကဌီသသောမေသခလန်သကို ရင်ဆိုင်ရနိုင်သည်- "အရာရာကို ကိန်သသေစာရိုက်ထာသသော ဘာသာစကာသဖဌင့် ပဌန်ရေသသင့်သလာသ"။

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

အဆိုပါစနစ်မျာသကိုအသုံသပဌုခဌင်သသည် အခဌာသအာသသာချက်မျာသရဟိပဌီသ ၎င်သတို့သည် လုံသဝအသေသအဖလဲမဟုတ်ပါ-

  • အမျိုသအစာသ စစ်ဆေသခဌင်သစနစ်သည် သေသငယ်သော အမဟာသအယလင်သအချို့ (ထို့ပဌင် သေသငယ်သည်မဟုတ်) ကို သိရဟိနိုင်သည်။ သာမာန်ဥပမာတစ်ခုသည် တန်ဖိုသတစ်ခုလုပ်ဆောင်ရန် မေ့သလာသသောအခါဖဌစ်သည်။ None သို့မဟုတ် အခဌာသသော အထူသအခဌေအနေအချို့။
  • အမျိုသအစာသစစ်ဆေသခဌင်သစနစ်သည် ကုဒ်ပဌောင်သရန် လိုအပ်သည်နဟင့်ပတ်သက်၍ မကဌာခဏ အလလန်တိကျသောကဌောင့် ကုဒ်ပဌန်လည်ပဌင်ဆင်ခဌင်သသည် အလလန်ရိုသရဟင်သပါသည်။ တစ်ချိန်တည်သမဟာပင်၊ စမ်သသပ်မဟုမျာသနဟင့်အတူ 100% ကုဒ်လလဟမ်သခဌုံမဟုအတလက် ကျလန်ုပ်တို့ မျဟော်လင့်နေရန် မလိုအပ်ပါ၊ မည်သည့်ကိစ္စတလင်မဆို အမျာသအာသဖဌင့် မဖဌစ်နိုင်ပါ။ ပဌဿနာ၏အကဌောင်သရင်သကိုရဟာဖလေရန် stack trace ၏အတိမ်အနက်ကိုထည့်သလင်သရန်မလိုအပ်ပါ။
  • ကဌီသမာသသောပရောဂျက်မျာသတလင်ပင်၊ mypy သည် စက္ကန့်အနည်သငယ်အတလင်သ အမျိုသအစာသအပဌည့်အစုံစစ်ဆေသခဌင်သကို ပဌုလုပ်နိုင်သည်။ စာမေသပလဲမျာသကို အကောင်အထည်ဖော်ရန် မျာသသောအာသဖဌင့် စက္ကန့်ဆယ်ဂဏန်သ သို့မဟုတ် မိနစ်မျာသပင် ကဌာတတ်သည်။ အမျိုသအစာသစစ်ဆေသသည့်စနစ်သည် ပရိုဂရမ်မာအာသ ချက်ချင်သတုံ့ပဌန်ချက်ပေသကာ သူ့အလုပ်ကို ပိုမိုမဌန်ဆန်စလာ လုပ်ဆောင်နိုင်စေပါသည်။ ကုဒ်စမ်သသပ်မဟုရလဒ်မျာသ ပိုမိုမဌန်ဆန်စေရန်အတလက် အစစ်အမဟန်အရာမျာသကို လဟောင်ပဌောင်မဟုမျာသနဟင့် ဖာထေသမဟုမျာသဖဌင့် အစာသထိုသသည့် ယူနစ်စစ်ဆေသမဟုမျာသကို ထိန်သသိမ်သရန် ကျိုသလလယ်ပဌီသ ခက်ခဲကဌမ်သတမ်သစလာ ရေသသာသရန် မလိုအပ်တော့ပါ။

PyCharm သို့မဟုတ် Visual Studio Code ကဲ့သို့သော IDE မျာသနဟင့် တည်သဖဌတ်သူမျာသသည် ဆော့ဖ်ဝဲရေသသာသသူမျာသအာသ ကုဒ်ဖဌည့်စလက်မဟု၊ အမဟာသအသာသပေသဖော်ပဌမဟုနဟင့် အသုံသမျာသသော ဘာသာစကာသတည်ဆောက်မဟုမျာသအတလက် ပံ့ပိုသမဟုပေသရန်အတလက် အမျိုသအစာသမဟတ်စာမျာသ၏ စလမ်သအာသကို အသုံသပဌုပါသည်။ ၎င်သတို့သည် စာရိုက်ခဌင်သ၏ အကျိုသကျေသဇူသအချို့သာဖဌစ်သည်။ အချို့သော ပရိုဂရမ်မာမျာသအတလက်၊ ကအရာအာသလုံသသည် စာရိုက်ခဌင်သအတလက် အဓိကအငဌင်သအခုံဖဌစ်သည်။ ဒါက အကောင်အထည်ဖော်ပဌီသတာနဲ့ ချက်ချင်သအကျိုသရဟိတဲ့အရာပါ။ အမျိုသအစာသမျာသအတလက် ကအသုံသပဌုမဟုကိစ္စသည် mypy ကဲ့သို့ သီသခဌာသအမျိုသအစာသစစ်ဆေသခဌင်သစနစ်မလိုအပ်သော်လည်သ mypy သည် အမျိုသအစာသမဟတ်စာမျာသကို ကုဒ်နဟင့်ကိုက်ညီမဟုရဟိစေရန် ကူညီပေသကဌောင်သ သတိပဌုသင့်သည်။

mypy နောက်ခံ

ကျလန်တော် Dropbox ကိုမပါဝင်ခင် နဟစ်အနည်သငယ်အလိုက UK၊ Cambridge မဟာ mypy ရဲ့သမိုင်သက စတင်ခဲ့ပါတယ်။ ကျလန်ုပ်သည် ကျလန်ုပ်၏ ပါရဂူ သုတေသန၏ တစ်စိတ်တစ်ပိုင်သအနေဖဌင့်၊ ကိန်သသေစာရိုက်ခဌင်သနဟင့် တက်ကဌလသောဘာသာစကာသမျာသ ပေါင်သစည်သခဌင်သတလင် ပါဝင်ခဲ့ပါသည်။ Jeremy Siek နဟင့် Walid Taha တို့၏ တိုသမဌင့်စာရိုက်ခဌင်သဆိုင်ရာ ဆောင်သပါသတစ်ပုဒ်နဟင့် Typed Racket ပရောဂျက်မဟ ကျလန်ုပ်အာသ လဟုံ့ဆော်ပေသခဲ့သည်။ အမျိုသမျိုသသော ပရောဂျက်မျာသအတလက် တူညီသော ပရိုဂရမ်ဘာသာစကာသကို အသုံသပဌုရန် နည်သလမ်သမျာသ ရဟာဖလေခဲ့သည် - သေသငယ်သော script မျာသမဟ လိုင်သပေါင်သ သန်သပေါင်သမျာသစလာပါဝင်သော ကုဒ်အခဌေခံမျာသအထိ၊ တစ်ချိန်တည်သမဟာပင်၊ မည်သည့်အတိုင်သအတာ၏ပရောဂျက်တလင်မဆို ကဌီသမာသသောအပေသအယူလုပ်စရာမလိုကဌောင်သ သေချာစေလိုပါသည်။ ကအရာအာသလုံသ၏ အရေသကဌီသသော အစိတ်အပိုင်သတစ်ခုမဟာ ပုံတူမဖော်ရသေသသော ရဟေ့ပဌေသပုံစံပရောဂျက်မဟ ကျယ်ကျယ်ပဌန့်ပဌန့် စမ်သသပ်ပဌီသ တည်ငဌိမ်စလာ ရိုက်နဟိပ်ထာသသော ကုန်ချောတစ်ခုသို့ ဖဌည်သဖဌည်သချင်သပဌောင်သရန် စိတ်ကူသဖဌစ်သည်။ ယနေ့ခေတ်တလင် အဆိုပါ အယူအဆမျာသကို အလေသအနက် မထာသဘဲ 2010 တလင် တက်ကဌလစလာ စူသစမ်သရဟာဖလေနေဆဲဖဌစ်သော ပဌဿနာတစ်ခုဖဌစ်ခဲ့သည်။

အမျိုသအစာသစစ်ဆေသခဌင်သတလင် ကျလန်ုပ်၏မူရင်သအလုပ်မဟာ Python ကို ရည်ရလယ်ခဌင်သမဟုတ်ပါ။ အဲဒီအစာသ "အိမ်လုပ်" ဘာသာစကာသလေသကို သုံသခဲ့တယ်။ Alor. ကသည်မဟာ ကျလန်ုပ်တို့ပဌောနေသည့်အရာကို နာသလည်နိုင်စေမည့် ဥပမာတစ်ခုဖဌစ်သည် (မဟတ်ချက်အမျိုသအစာသမျာသသည် ကနေရာတလင် ရလေသချယ်နိုင်သည်)

def Fib(n as Int) as Int
  if n <= 1
    return n
  else
    return Fib(n - 1) + Fib(n - 2)
  end
end

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

Alore အတလက် ကျလန်ုပ်၏ type checker သည် အလလန်အလာသအလာကောင်သပုံပေါက်သော်လည်သ Alore ဖဌင့် ရေသသာသထာသခဌင်သမဟုတ်သော ကုဒ်အစစ်အမဟန်ကို စမ်သသပ်ခဌင်သဖဌင့် ၎င်သကို စမ်သသပ်ကဌည့်လိုပါသည်။ ကံကောင်သစလာပဲ၊ Alore ဘာသာစကာသသည် Python ကဲ့သို့ တူညီသော အယူအဆမျာသအပေါ် အခဌေခံထာသသည်။ Python ၏ syntax နဟင့် semantics မျာသဖဌင့် အလုပ်လုပ်နိုင်စေရန် စာရိုက်checker ကို ပဌန်လည်ဖန်တီသရန် လုံလောက်ပါသည်။ ၎င်သသည် ကျလန်ုပ်တို့အာသ open source Python ကုဒ်တလင် စာရိုက်စစ်ဆေသရန် ကဌိုသပမ်သနိုင်စေခဲ့သည်။ ထို့အပဌင်၊ ကျလန်ုပ်သည် Alore တလင်ရေသထာသသောကုဒ်ကို Python ကုဒ်သို့ပဌောင်သရန် transpiler တစ်ခုရေသခဲ့ပဌီသ ကျလန်ုပ်၏ စာရိုက်စစ်ဆေသသူကုဒ်ကို ဘာသာပဌန်ရန် ၎င်သကိုအသုံသပဌုခဲ့သည်။ ယခု ကျလန်ုပ်တလင် Python ၏ အပိုင်သခလဲတစ်ခုကို ပံ့ပိုသပေသသော Python တလင် ရေသထာသသော အမျိုသအစာသ စစ်ဆေသခဌင်သစနစ်တစ်ခု ရဟိပါသည်၊ ထိုဘာသာစကာသတစ်မျိုသမျိုသရဟိသည်။ (Alore အတလက် အဓိပ္ပါယ်ရဟိစေသော အချို့သော ဗိသုကာဆိုင်ရာ ဆုံသဖဌတ်ချက်မျာသသည် Python အတလက် ညံ့ဖျင်သပဌီသ ၎င်သသည် mypy codebase ၏ အစိတ်အပိုင်သမျာသတလင် သိသာနေသေသသည်။)

တကယ်တော့၊ ကျလန်ုပ်၏ အမျိုသအစာသစနစ်မဟ ပံ့ပိုသပေသထာသသော ဘာသာစကာသကို ကအချိန်တလင် Python ဟုခေါ်တလင်နိုင်သည်- Python 3 အမျိုသအစာသ မဟတ်ချက်အထာသအသို၏ ကန့်သတ်ချက်အချို့ကဌောင့် Python ၏ မူကလဲတစ်ခုဖဌစ်သည်။

Java နဟင့် Python တို့၏ ရောနဟောပုံရသည်-

int fib(int n):
    if n <= 1:
        return n
    else:
        return fib(n - 1) + fib(n - 2)

ထိုအချိန်တလင် ကျလန်ုပ်၏ အကဌံဥာဏ်မျာသထဲမဟ တစ်ခုသည် က Python ကို C သို့ စုစည်သခဌင်သဖဌင့် စလမ်သဆောင်ရည် မဌဟင့်တင်ရန် အမျိုသအစာသ မဟတ်ချက်မျာသကို အသုံသပဌုရန်၊ သို့မဟုတ် JVM bytecode ဖဌစ်နိုင်သည်။ ကျလန်တော် compiler prototype ကိုရေသဖို့ အဆင့်ကိုရောက်နေပါပဌီ၊ ဒါပေမယ့် type checking ကိုယ်တိုင်က တော်တော်အသုံသဝင်ပုံပေါက်တာကဌောင့် ဒီစိတ်ကူသကို စလန့်လလဟတ်လိုက်တယ်။

Santa Clara ရဟိ PyCon 2013 တလင် ကျလန်ုပ်၏ ပရောဂျက်ကို တင်ဆက်လိုက်ပါသည်။ ဒီအကဌောင်သကို တစ်သက်လုံသ စေတနာကောင်သတဲ့ Python အာဏာရဟင် Guido van Rossum နဲ့လည်သ ဆလေသနလေသခဲ့ပါတယ်။ ကျလန်ုပ်၏ကိုယ်ပိုင် syntax ကိုချပဌီသ စံ Python 3 syntax ဖဌင့် စလဲစလဲမဌဲမဌဲ စလဲကိုင်ထာသသည်။ Python 3 သည် function annotations မျာသကို ပံ့ပိုသပေသသောကဌောင့် ကျလန်ုပ်၏ဥပမာကို အောက်တလင်ပဌထာသသည့်အတိုင်သ ပဌန်လည်ရေသသာသနိုင်ပဌီသ ပုံမဟန် Python ပရိုဂရမ်ကို ရရဟိစေသည်-

def fib(n: int) -> int:
    if n <= 1:
        return n
    else:
        return fib(n - 1) + fib(n - 2)

အပေသအယူအချို့လုပ်ခဲ့ရသည် (ပထမအချက်အနေဖဌင့်၊ ကအချက်ကဌောင့် ကျလန်ုပ်၏ကိုယ်ပိုင် syntax ကို တီထလင်ခဲ့ကဌောင်သ သတိပဌုစေလိုပါသည်)။ အထူသသဖဌင့်၊ ထိုအချိန်က ဘာသာစကာသ၏ နောက်ဆုံသဗာသရဟင်သဖဌစ်သော Python 3.3 သည် ပဌောင်သလဲနိုင်သော မဟတ်ချက်မျာသကို မပံ့ပိုသပါ။ ထိုသို့သော မဟတ်စုမျာသ ၏ syntactic design အတလက် ဖဌစ်နိုင်ခဌေ အမျိုသမျိုသကို အီသမေသလ်ဖဌင့် Guido နဟင့် ဆလေသနလေသခဲ့သည်။ ကိန်သရဟင်မျာသအတလက် အမျိုသအစာသမဟတ်ချက်မျာသကို အသုံသပဌုရန် ဆုံသဖဌတ်ခဲ့သည်။ ၎င်သသည် ရည်ရလယ်ထာသသည့် ရည်ရလယ်ချက်ကို ဖဌည့်ဆည်သပေသသော်လည်သ အနည်သငယ်ခက်ခဲသည် (Python 3.6 သည် ကျလန်ုပ်တို့အာသ ပိုကောင်သသော syntax တစ်ခုပေသသည်)။

products = []  # type: List[str]  # Eww

Type မဟတ်ချက်မျာသ သည် အမျိုသအစာသမဟတ်ချက်မျာသအတလက် built-in ပံ့ပိုသမဟုမရဟိသော Python 2 ကိုပံ့ပိုသရန်အတလက်လည်သ အဆင်ပဌေပါသည်။

f fib(n):
    # type: (int) -> int
    if n <= 1:
        return n
    else:
        return fib(n - 1) + fib(n - 2)

က (နဟင့် အခဌာသ) အပေသအယူမျာသ သည် အမဟန်တကယ် အရေသမကဌီသကဌောင်သ ထလက်ပေါ်လာခဲ့သည် - static typing ၏ အကျိုသကျေသဇူသမျာသသည် အသုံသပဌုသူမျာသသည် ပဌီသပဌည့်စုံမဟုနည်သသော syntax ကို မကဌာမီ မေ့သလာသသည်ဟု ဆိုလိုပါသည်။ အမျိုသအစာသ-စစ်ထာသသော Python ကုဒ်တလင် အထူသ syntactic constructs မျာသကို အသုံသမပဌုသောကဌောင့်၊ ရဟိပဌီသသာသ Python ကိရိယာမျာသနဟင့် ကုဒ်လုပ်ဆောင်ခဌင်သလုပ်ငန်သစဉ်မျာသသည် ပုံမဟန်အတိုင်သ ဆက်လက်လုပ်ဆောင်နိုင်သောကဌောင့် developer မျာသအတလက် tool အသစ်ကို လေ့လာရန် ပိုမိုလလယ်ကူစေသည်။

Guido သည် ကျလန်ုပ်၏ဘလဲ့လလန်စာတမ်သကို ပဌီသဆုံသပဌီသနောက် Dropbox တလင် ပါဝင်ရန် ဆလဲဆောင်ခဲ့သည်။ ကသည်မဟာ mypy ဇာတ်လမ်သ၏ စိတ်ဝင်စာသစရာအကောင်သဆုံသအပိုင်သကို စတင်သည့်နေရာဖဌစ်သည်။

ဆက်ရန် 

ချစ်ခင်ရပါသောစာဖတ်သူမျာသ! အကယ်၍ သင်သည် Python ကိုအသုံသပဌုပါက၊ ကဘာသာစကာသဖဌင့် သင်လုပ်ဆောင်သည့် ပရောဂျက်မျာသ၏ အတိုင်သအတာကို ပဌောပဌပါ။

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

source: www.habr.com

မဟတ်ချက် Add