பைதான் குறியீட்டின் 4 மில்லியன் வரிகளை தட்டச்சு செய்வதற்கான பாதை. பகுதி 1

பைதான் குறியீட்டின் வகைக் கட்டுப்பாட்டை டிராப்பாக்ஸ் எவ்வாறு கையாள்கிறது என்பது குறித்த பொருளின் மொழிபெயர்ப்பின் முதல் பகுதியை இன்று உங்கள் கவனத்திற்குக் கொண்டு வருகிறோம்.

பைதான் குறியீட்டின் 4 மில்லியன் வரிகளை தட்டச்சு செய்வதற்கான பாதை. பகுதி 1

டிராப்பாக்ஸ் பைத்தானில் நிறைய எழுதுகிறது. பின்-இறுதிச் சேவைகள் மற்றும் டெஸ்க்டாப் கிளையன்ட் பயன்பாடுகள் ஆகிய இரண்டிலும் நாங்கள் மிகவும் பரவலாகப் பயன்படுத்தும் மொழி இது. நாங்கள் Go, TypeScript மற்றும் Rust போன்றவற்றையும் அதிகம் பயன்படுத்துகிறோம், ஆனால் Python தான் எங்களின் முக்கிய மொழி. எங்கள் அளவைக் கருத்தில் கொண்டு, மில்லியன் கணக்கான பைதான் குறியீட்டைப் பற்றி நாங்கள் பேசுகிறோம், அத்தகைய குறியீட்டின் டைனமிக் தட்டச்சு அதன் புரிதலை தேவையில்லாமல் சிக்கலாக்கியது மற்றும் தொழிலாளர் உற்பத்தித்திறனை கடுமையாக பாதிக்கத் தொடங்கியது. இந்தச் சிக்கலைத் தணிக்க, mypyஐப் பயன்படுத்தி நிலையான வகைச் சரிபார்ப்பிற்கு எங்கள் குறியீட்டை படிப்படியாக மாற்றத் தொடங்கியுள்ளோம். இது பைத்தானுக்கான மிகவும் பிரபலமான தனித்த வகை சோதனை அமைப்பாகும். Mypy என்பது ஒரு திறந்த மூல திட்டமாகும், அதன் முக்கிய டெவலப்பர்கள் Dropbox இல் பணிபுரிகின்றனர்.

இந்த அளவில் பைதான் குறியீட்டில் நிலையான வகை சரிபார்ப்பை செயல்படுத்திய முதல் நிறுவனங்களில் டிராப்பாக்ஸ் ஒன்றாகும். இந்த நாட்களில் ஆயிரக்கணக்கான திட்டங்களில் Mypy பயன்படுத்தப்படுகிறது. இந்த கருவி எண்ணற்ற முறை, அவர்கள் சொல்வது போல், "போரில் சோதிக்கப்பட்டது." நாம் இப்போது இருக்கும் இடத்திற்கு வெகுதூரம் வந்துவிட்டோம். வழியில், பல தோல்வியுற்ற முயற்சிகள் மற்றும் தோல்வியுற்ற சோதனைகள் இருந்தன. பைத்தானில் எழுதும் எண்ணற்ற டெவலப்பர்களுக்கு டைப் செக்கிங் மற்றும் டைப் ஹிண்டிங் சர்வசாதாரணமாகிவிட்ட இன்றைய நாள் வரை, என்னுடைய ஆராய்ச்சித் திட்டத்தின் ஒரு பகுதியாக, பைத்தானில் நிலையான வகைச் சரிபார்ப்பின் வரலாற்றை இந்தப் பதிவு உள்ளடக்கியது. இந்த வழிமுறைகள் இப்போது IDEகள் மற்றும் குறியீடு பகுப்பாய்விகள் போன்ற பல கருவிகளால் ஆதரிக்கப்படுகின்றன.

இரண்டாம் பாகத்தைப் படியுங்கள்

வகை சரிபார்ப்பு ஏன் அவசியம்?

நீங்கள் எப்போதாவது டைனமிக் டைப் செய்யப்பட்ட பைத்தானைப் பயன்படுத்தியிருந்தால், ஸ்டேடிக் டைப்பிங் மற்றும் மைபியில் சமீபகாலமாக ஏன் இவ்வளவு வம்பு ஏற்பட்டது என்பதில் உங்களுக்கு சில குழப்பங்கள் இருக்கலாம். அல்லது பைத்தானை அதன் டைனமிக் டைப்பிங் காரணமாக நீங்கள் துல்லியமாக விரும்பலாம், மேலும் என்ன நடக்கிறது என்பது உங்களை வருத்தப்படுத்துகிறது. நிலையான தட்டச்சு மதிப்புக்கான திறவுகோல் தீர்வுகளின் அளவாகும்: உங்கள் திட்டம் எவ்வளவு பெரிதாக இருக்கிறதோ, அவ்வளவு அதிகமாக நிலையான தட்டச்சுக்கு நீங்கள் சாய்ந்து கொள்கிறீர்கள், இறுதியில், உங்களுக்கு இது மிகவும் தேவை.

ஒரு குறிப்பிட்ட திட்டம் பல்லாயிரக்கணக்கான வரிகளின் அளவை எட்டியுள்ளது என்று வைத்துக்கொள்வோம், மேலும் பல புரோகிராமர்கள் அதில் வேலை செய்கிறார்கள் என்று மாறியது. இதேபோன்ற திட்டத்தைப் பார்க்கும்போது, ​​​​எங்கள் அனுபவத்தின் அடிப்படையில், அதன் குறியீட்டைப் புரிந்துகொள்வது டெவலப்பர்களை உற்பத்தி செய்யும் திறவுகோலாக இருக்கும் என்று கூறலாம். வகை சிறுகுறிப்புகள் இல்லாமல், ஒரு செயல்பாட்டிற்கு என்ன வாதங்களை அனுப்ப வேண்டும் அல்லது எந்த வகையான செயல்பாடு திரும்பும் என்பதைக் கண்டுபிடிப்பது கடினம். வகை சிறுகுறிப்புகளைப் பயன்படுத்தாமல் பதிலளிக்க கடினமாக இருக்கும் பொதுவான கேள்விகள் இங்கே:

  • இந்த செயல்பாடு திரும்ப முடியுமா None?
  • இந்த வாதம் என்னவாக இருக்க வேண்டும்? items?
  • பண்பு வகை என்ன id: int அப்படியா, str, அல்லது ஏதேனும் தனிப்பயன் வகை இருக்கலாம்?
  • இந்த வாதம் ஒரு பட்டியலாக இருக்க வேண்டுமா? அதற்கு ஒரு டூப்பிள் அனுப்ப முடியுமா?

பின்வரும் வகை-குறிப்புக் குறியீடு துணுக்கைப் பார்த்து, இதே போன்ற கேள்விகளுக்கு பதிலளிக்க முயற்சித்தால், இது எளிமையான பணி என்று மாறிவிடும்:

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

  • read_metadata திரும்புவதில்லை None, திரும்பும் வகை இல்லை என்பதால் Optional[…].
  • வாதம் items என்பது வரிகளின் வரிசை. அதை தற்செயலாக மீண்டும் செய்ய முடியாது.
  • பண்பு id பைட்டுகளின் சரம்.

ஒரு சிறந்த உலகில், இதுபோன்ற அனைத்து நுணுக்கங்களும் உள்ளமைக்கப்பட்ட ஆவணத்தில் (டாக்ஸ்ட்ரிங்) விவரிக்கப்படும் என்று ஒருவர் எதிர்பார்க்கலாம். ஆனால் நீங்கள் வேலை செய்ய வேண்டிய குறியீட்டில் இதுபோன்ற ஆவணங்கள் பெரும்பாலும் கவனிக்கப்படுவதில்லை என்பதற்கு அனுபவம் நிறைய எடுத்துக்காட்டுகளைத் தருகிறது. அத்தகைய ஆவணங்கள் குறியீட்டில் இருந்தாலும், அதன் முழுமையான சரியான தன்மையை ஒருவர் நம்ப முடியாது. இந்த ஆவணங்கள் தெளிவற்றதாகவும், துல்லியமற்றதாகவும், தவறான புரிதல்களுக்குத் திறந்ததாகவும் இருக்கலாம். பெரிய அணிகள் அல்லது பெரிய திட்டங்களில், இந்த சிக்கல் மிகவும் கடுமையானதாக மாறும்.

திட்டங்களின் ஆரம்ப அல்லது இடைநிலை நிலைகளில் பைதான் சிறந்து விளங்கும் போது, ​​சில சமயங்களில் வெற்றிகரமான திட்டங்கள் மற்றும் பைத்தானைப் பயன்படுத்தும் நிறுவனங்கள் முக்கியமான கேள்வியை எதிர்கொள்ளலாம்: "எல்லாவற்றையும் நிலையான முறையில் தட்டச்சு செய்யப்பட்ட மொழியில் மீண்டும் எழுத வேண்டுமா?".

mypy போன்ற வகைச் சரிபார்ப்பு அமைப்புகள் டெவலப்பருக்கு வகைகளை விவரிப்பதற்கான முறையான மொழியை வழங்குவதன் மூலம் மேலே உள்ள சிக்கலைத் தீர்க்கின்றன, மேலும் அந்த வகை அறிவிப்புகள் நிரல் செயல்படுத்தலுடன் பொருந்துகின்றன என்பதைச் சரிபார்ப்பதன் மூலம் (மற்றும், விருப்பமாக, அவற்றின் இருப்பைச் சரிபார்ப்பதன் மூலம்). பொதுவாக, இந்த அமைப்புகள் கவனமாக சரிபார்க்கப்பட்ட ஆவணங்கள் போன்றவற்றை நம் வசம் வைக்கின்றன என்று சொல்லலாம்.

அத்தகைய அமைப்புகளின் பயன்பாடு மற்ற நன்மைகளைக் கொண்டுள்ளது, மேலும் அவை ஏற்கனவே முற்றிலும் அற்பமானவை அல்ல:

  • வகை சரிபார்ப்பு அமைப்பு சில சிறிய (மற்றும் சிறியதாக இல்லை) பிழைகளைக் கண்டறிய முடியும். ஒரு மதிப்பை செயலாக்க அவர்கள் மறந்துவிடுவது ஒரு பொதுவான எடுத்துக்காட்டு None அல்லது வேறு சில சிறப்பு நிலை.
  • குறியீடு மறுசீரமைப்பு மிகவும் எளிமைப்படுத்தப்பட்டுள்ளது, ஏனெனில் வகை சரிபார்ப்பு அமைப்பு பெரும்பாலும் எந்த குறியீட்டை மாற்ற வேண்டும் என்பதில் மிகவும் துல்லியமாக இருக்கும். அதே நேரத்தில், சோதனைகளுடன் 100% குறியீடு கவரேஜை நாங்கள் நம்ப வேண்டியதில்லை, இது பொதுவாக சாத்தியமில்லை. சிக்கலின் காரணத்தைக் கண்டறிய ஸ்டாக் ட்ரேஸின் ஆழத்தை நாம் ஆராய வேண்டியதில்லை.
  • பெரிய திட்டங்களில் கூட, mypy ஆனது ஒரு நொடியில் ஒரு பகுதியிலேயே முழு வகை சரிபார்ப்பைச் செய்ய முடியும். சோதனைகளை நிறைவேற்றுவது பொதுவாக பத்து வினாடிகள் அல்லது நிமிடங்கள் கூட ஆகும். வகை சரிபார்ப்பு அமைப்பு புரோகிராமருக்கு உடனடி கருத்துகளை அளிக்கிறது மற்றும் அவரது வேலையை விரைவாகச் செய்ய அனுமதிக்கிறது. குறியீடு சோதனை முடிவுகளை விரைவாகப் பெற, உண்மையான நிறுவனங்களுக்குப் பதிலாக மோக்ஸ் மற்றும் பேட்ச்கள் மூலம் யூனிட் சோதனைகளை அவர் பலவீனமாகவும் பராமரிக்க கடினமாகவும் எழுத வேண்டியதில்லை.

ஐடிஇக்கள் மற்றும் பைசார்ம் அல்லது விஷுவல் ஸ்டுடியோ கோட் போன்ற எடிட்டர்கள், டெவலப்பர்களுக்கு குறியீட்டை நிறைவு செய்தல், பிழையை முன்னிலைப்படுத்துதல் மற்றும் பொதுவாகப் பயன்படுத்தப்படும் மொழி கட்டமைப்பிற்கான ஆதரவை வழங்க வகை சிறுகுறிப்புகளின் ஆற்றலைப் பயன்படுத்துகின்றனர். மேலும் இவை தட்டச்சு செய்வதன் சில நன்மைகள் மட்டுமே. சில புரோகிராமர்களுக்கு, இவை அனைத்தும் தட்டச்சு செய்வதற்கு ஆதரவான முக்கிய வாதம். இது நடைமுறைப்படுத்தப்பட்ட உடனேயே பயனளிக்கும் ஒன்று. வகைகளுக்கான இந்த பயன்பாட்டு வழக்குக்கு mypy போன்ற ஒரு தனி வகை சரிபார்ப்பு அமைப்பு தேவையில்லை, இருப்பினும் mypy வகை சிறுகுறிப்புகளை குறியீட்டுடன் சீரானதாக வைத்திருக்க உதவுகிறது என்பதை கவனத்தில் கொள்ள வேண்டும்.

மைபியின் பின்னணி

மைபியின் வரலாறு இங்கிலாந்தில், கேம்பிரிட்ஜில், நான் டிராப்பாக்ஸில் சேருவதற்கு சில ஆண்டுகளுக்கு முன்பு தொடங்கியது. எனது முனைவர் பட்ட ஆய்வின் ஒரு பகுதியாக, நிலையான தட்டச்சு மற்றும் மாறும் மொழிகளை ஒன்றிணைப்பதில் ஈடுபட்டுள்ளேன். ஜெர்மி சீக் மற்றும் வாலிட் தாஹா ஆகியோரின் அதிகரிக்கும் தட்டச்சு பற்றிய கட்டுரை மற்றும் தட்டச்சு ராக்கெட் திட்டத்தால் நான் ஈர்க்கப்பட்டேன். பல்வேறு திட்டங்களுக்கு ஒரே நிரலாக்க மொழியைப் பயன்படுத்துவதற்கான வழிகளைக் கண்டுபிடிக்க முயற்சித்தேன் - சிறிய ஸ்கிரிப்டுகள் முதல் பல மில்லியன் வரிகளைக் கொண்ட குறியீடு தளங்கள் வரை. அதே நேரத்தில், எந்த அளவிலான திட்டத்திலும், ஒருவர் பெரிய அளவில் சமரசம் செய்ய வேண்டியதில்லை என்பதை உறுதிப்படுத்த விரும்பினேன். இவை அனைத்திலும் ஒரு முக்கியமான பகுதியாக, தட்டச்சு செய்யப்படாத முன்மாதிரி திட்டத்தில் இருந்து படிப்படியாக முழுமையாக சோதிக்கப்பட்ட நிலையான தட்டச்சு செய்யப்பட்ட முடிக்கப்பட்ட தயாரிப்புக்கு நகரும் யோசனை. இந்த நாட்களில், இந்த யோசனைகள் பெரும்பாலும் வழங்கப்படுகின்றன, ஆனால் 2010 இல் இது இன்னும் தீவிரமாக ஆராயப்பட்ட ஒரு பிரச்சனை.

வகை சரிபார்ப்பில் எனது அசல் பணி பைத்தானை நோக்கமாகக் கொண்டிருக்கவில்லை. அதற்கு பதிலாக, நான் ஒரு சிறிய "வீட்டில்" மொழியைப் பயன்படுத்தினேன் அலோர். நாங்கள் எதைப் பற்றி பேசுகிறோம் என்பதைப் புரிந்துகொள்ள உதவும் ஒரு எடுத்துக்காட்டு இங்கே உள்ளது (வகை சிறுகுறிப்புகள் இங்கே விருப்பமானது):

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

எளிமைப்படுத்தப்பட்ட தாய்மொழியைப் பயன்படுத்துவது அறிவியல் ஆராய்ச்சியில் பயன்படுத்தப்படும் பொதுவான அணுகுமுறையாகும். இது மிகவும் குறைவானது அல்ல, ஏனெனில் இது விரைவாக சோதனைகளை நடத்த உங்களை அனுமதிக்கிறது, மேலும் ஆய்வுக்கு எந்த தொடர்பும் இல்லாததை எளிதில் புறக்கணிக்க முடியும். நிஜ-உலக நிரலாக்க மொழிகள் சிக்கலான செயலாக்கங்களுடன் பெரிய அளவிலான நிகழ்வுகளாக இருக்கின்றன, மேலும் இது பரிசோதனையை மெதுவாக்குகிறது. எவ்வாறாயினும், எளிமைப்படுத்தப்பட்ட மொழியின் அடிப்படையிலான எந்தவொரு முடிவும் சற்று சந்தேகத்திற்குரியதாகத் தோன்றுகிறது, ஏனெனில் இந்த முடிவுகளைப் பெறுவதில், மொழிகளின் நடைமுறை பயன்பாட்டிற்கு முக்கியமான பரிசீலனைகளை ஆராய்ச்சியாளர் தியாகம் செய்திருக்கலாம்.

அலூருக்கான எனது வகை சரிபார்ப்பு மிகவும் நம்பிக்கைக்குரியதாகத் தோன்றியது, ஆனால் உண்மையான குறியீட்டைப் பயன்படுத்தி அதைச் சோதிக்க விரும்பினேன், இது அலூரில் எழுதப்படவில்லை என்று நீங்கள் கூறலாம். எனக்கு அதிர்ஷ்டவசமாக, ஆலோர் மொழி பெரும்பாலும் பைத்தானின் அதே கருத்துக்களை அடிப்படையாகக் கொண்டது. டைப்செக்கரை ரீமேக் செய்வது மிகவும் எளிதானது, இதனால் அது பைத்தானின் தொடரியல் மற்றும் சொற்பொருள்களுடன் வேலை செய்ய முடியும். இது திறந்த மூல பைதான் குறியீட்டில் தட்டச்சுச் சரிபார்ப்பை முயற்சிக்க அனுமதித்தது. கூடுதலாக, அலூரில் எழுதப்பட்ட குறியீட்டை பைதான் குறியீடாக மாற்ற டிரான்ஸ்பைலரை எழுதினேன், மேலும் எனது தட்டச்சுச் சரிபார்ப்பு குறியீட்டை மொழிபெயர்க்க அதைப் பயன்படுத்தினேன். இப்போது பைத்தானில் எழுதப்பட்ட ஒரு வகை சரிபார்ப்பு அமைப்பு இருந்தது, அது பைத்தானின் துணைக்குழுவை ஆதரிக்கிறது, அந்த மொழியின் சில வகை! (அலோருக்கு அர்த்தமுள்ள சில கட்டடக்கலை முடிவுகள் பைத்தானுக்கு மிகவும் பொருத்தமாக இல்லை, மேலும் இது mypy கோட்பேஸின் சில பகுதிகளில் இன்னும் கவனிக்கப்படுகிறது.)

உண்மையில், எனது வகை அமைப்பால் ஆதரிக்கப்படும் மொழியை இந்த கட்டத்தில் பைதான் என்று அழைக்க முடியாது: பைதான் 3 வகை சிறுகுறிப்பு தொடரியல் சில வரம்புகள் காரணமாக இது பைத்தானின் மாறுபாடு ஆகும்.

இது ஜாவா மற்றும் பைத்தானின் கலவையாக இருந்தது:

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

அந்த நேரத்தில் எனது யோசனைகளில் ஒன்று, இந்த வகையான பைத்தானை C அல்லது JVM பைட்கோடுக்கு தொகுப்பதன் மூலம் செயல்திறனை மேம்படுத்த வகை சிறுகுறிப்புகளைப் பயன்படுத்துவதாகும். நான் ஒரு கம்பைலர் முன்மாதிரியை எழுதும் நிலைக்கு வந்தேன், ஆனால் இந்த யோசனையை நான் கைவிட்டேன், ஏனெனில் வகை சரிபார்ப்பு மிகவும் பயனுள்ளதாக இருந்தது.

சாண்டா கிளாராவில் உள்ள PyCon 2013 இல் எனது திட்டத்தை வழங்குவதை முடித்தேன். வாழ்நாள் முழுவதும் அருளும் பைதான் சர்வாதிகாரியான கைடோ வான் ரோஸுடனும் இதைப் பற்றி பேசினேன். எனது சொந்த தொடரியல் கைவிடவும், நிலையான பைதான் 3 தொடரியல் உடன் ஒட்டிக்கொள்ளவும் அவர் என்னை சமாதானப்படுத்தினார். பைதான் 3 செயல்பாடு சிறுகுறிப்புகளை ஆதரிக்கிறது, எனவே எனது உதாரணத்தை கீழே காட்டப்பட்டுள்ளபடி மீண்டும் எழுதலாம், இதன் விளைவாக ஒரு சாதாரண பைதான் நிரல் கிடைக்கும்:

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

நான் சில சமரசங்களைச் செய்ய வேண்டியிருந்தது (முதலில், இந்த காரணத்திற்காக நான் எனது சொந்த தொடரியல் கண்டுபிடித்தேன் என்பதை நான் கவனிக்க விரும்புகிறேன்). குறிப்பாக, அந்த நேரத்தில் மொழியின் மிகச் சமீபத்திய பதிப்பான பைதான் 3.3, மாறி சிறுகுறிப்புகளை ஆதரிக்கவில்லை. அத்தகைய சிறுகுறிப்புகளின் தொடரியல் வடிவமைப்பிற்கான பல்வேறு சாத்தியக்கூறுகள் பற்றி நான் கைடோவுடன் மின்னஞ்சல் மூலம் விவாதித்தேன். மாறிகளுக்கு வகை கருத்துகளைப் பயன்படுத்த முடிவு செய்தோம். இது உத்தேசிக்கப்பட்ட நோக்கத்தை நிறைவேற்றியது, ஆனால் சற்று சிரமமாக இருந்தது (பைதான் 3.6 எங்களுக்கு ஒரு நல்ல தொடரியல் கொடுத்தது):

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

வகைக் குறிப்புகள் பைதான் 2 ஐ ஆதரிப்பதற்கும் பயனுள்ளதாக இருந்தன, இது வகை சிறுகுறிப்புகளுக்கான உள்ளமைக்கப்பட்ட ஆதரவைக் கொண்டிருக்கவில்லை:

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

இந்த (மற்றும் பிற) வர்த்தக பரிமாற்றங்கள் உண்மையில் முக்கியமில்லை என்று மாறியது - நிலையான தட்டச்சு நன்மைகள் பயனர்கள் இலட்சியத்தை விட குறைவான தொடரியல் பற்றி விரைவில் மறந்துவிட்டனர். வகை-சரிபார்க்கப்பட்ட பைதான் குறியீட்டில் சிறப்பு தொடரியல் கட்டமைப்புகள் பயன்படுத்தப்படாததால், ஏற்கனவே உள்ள பைதான் கருவிகள் மற்றும் குறியீடு செயலாக்க செயல்முறைகள் சாதாரணமாக தொடர்ந்து செயல்படுகின்றன, இது டெவலப்பர்களுக்கு புதிய கருவியைக் கற்றுக்கொள்வதை எளிதாக்குகிறது.

நான் எனது பட்டதாரி ஆய்வறிக்கையை முடித்த பிறகு டிராப்பாக்ஸில் சேருமாறு கைடோ என்னை சமாதானப்படுத்தினார். mypy கதையின் மிகவும் சுவாரஸ்யமான பகுதி இங்குதான் தொடங்குகிறது.

தொடர வேண்டும் ...

அன்புள்ள வாசகர்கள்! நீங்கள் பைத்தானைப் பயன்படுத்தினால், இந்த மொழியில் நீங்கள் உருவாக்கும் திட்டங்களின் அளவைப் பற்றி எங்களிடம் கூறுங்கள்.

பைதான் குறியீட்டின் 4 மில்லியன் வரிகளை தட்டச்சு செய்வதற்கான பாதை. பகுதி 1
பைதான் குறியீட்டின் 4 மில்லியன் வரிகளை தட்டச்சு செய்வதற்கான பாதை. பகுதி 1

ஆதாரம்: www.habr.com

கருத்தைச் சேர்