4 ሚሊዮን የፓይዘን ኮድ መስመሮችን ለመተየብ ዱካ። ክፍል 3

ለፓይዘን ኮድ አይነት የፍተሻ ስርዓት ሲተገበር Dropbox ስለወሰደው መንገድ የቁስ የትርጉም ሶስተኛውን ክፍል ለእርስዎ እናቀርባለን።

4 ሚሊዮን የፓይዘን ኮድ መስመሮችን ለመተየብ ዱካ። ክፍል 3

→ ቀዳሚ ክፍሎች፡- መጀመሪያ። и ሰከንድ

የተተየበው ኮድ 4 ሚሊዮን መስመሮች ላይ ደርሷል

ሌላው ትልቅ ፈተና (እና በውስጥ ጥናት ከተደረጉት መካከል ሁለተኛው በጣም የተለመደው አሳሳቢ ጉዳይ) በ Dropbox ውስጥ በአይነት ቼኮች የተሸፈነውን ኮድ መጨመር ነበር. ይህንን ችግር ለመፍታት ብዙ አቀራረቦችን ሞክረናል፣ በተፈጥሮ የተተየበው ኮድ ቤዝ መጠን ከማደግ ጀምሮ የ mypy ቡድን ጥረቶች በማይለዋወጥ እና በተለዋዋጭ አውቶሜትድ አይነት ላይ በማተኮር። በመጨረሻ፣ ቀላል የማሸነፍ ስትራቴጂ ያለ ይመስል ነበር፣ ነገር ግን ብዙ አቀራረቦችን በማጣመር በተብራራ ኮድ መጠን ፈጣን እድገት ማግኘት ችለናል።

በውጤቱም፣ የእኛ ትልቁ የፓይዘን ማከማቻ (ከጀርባ ኮድ ጋር) ወደ 4 ሚሊዮን የሚጠጉ የተብራራ ኮድ መስመሮች አሉት። በስታቲክ ኮድ ትየባ ላይ ያለው ሥራ በሦስት ዓመታት ውስጥ ተጠናቅቋል። Mypy አሁን የትየባ ሂደትን ለመቆጣጠር ቀላል የሚያደርጉ የተለያዩ አይነት የኮድ ሽፋን ዘገባዎችን ይደግፋል። በተለይም በኮዱ ላይ ሪፖርቶችን ማመንጨት እንችላለን በአይነት ውስጥ አሻሚዎች ለምሳሌ ለምሳሌ በግልፅ የአንድን አይነት አጠቃቀም Any ሊረጋገጡ በማይችሉ ማብራሪያዎች፣ ወይም የዓይነት ማብራሪያ የሌላቸው የሶስተኛ ወገን ቤተ-መጻሕፍት ማስመጣት ባሉ ነገሮች። በ Dropbox ውስጥ ያለውን የዓይነት ፍተሻ ትክክለኛነት ለማሻሻል እንደ አንድ የፕሮጀክት አካል ለአንዳንድ ታዋቂ ክፍት ምንጭ ቤተ-መጻሕፍት በማእከላዊ የፓይዘን ማከማቻ ውስጥ የዓይነት ፍቺዎችን (ስቱብ ፋይሎች የሚባሉትን) ለማሻሻል አስተዋፅኦ አበርክተናል የተተየበው.

ለአንዳንድ የተወሰኑ የፓይዘን ቅጦች የበለጠ ትክክለኛ ዓይነቶችን የሚፈቅዱ የስርዓቱን ዓይነት አዲስ ባህሪያትን ተግባራዊ አድርገናል (እና በሚቀጥሉት PEPs ደረጃውን የጠበቀ)። ለዚህ ጥሩ ምሳሌ ነው። TypeDictቋሚ የሕብረቁምፊ ቁልፎች ያሏቸው JSON ለሚመስሉ መዝገበ ቃላት ዓይነቶች ያቀርባል፣ እያንዳንዱም የራሱ የሆነ ዋጋ አለው። የዓይነት ስርዓቱን ማስፋፋቱን እንቀጥላለን. ቀጣዩ እርምጃችን ለ Python የቁጥር ችሎታዎች ድጋፍን ማሻሻል ሊሆን ይችላል።

4 ሚሊዮን የፓይዘን ኮድ መስመሮችን ለመተየብ ዱካ። ክፍል 3
የተብራራ ኮድ መስመሮች ብዛት: አገልጋይ

4 ሚሊዮን የፓይዘን ኮድ መስመሮችን ለመተየብ ዱካ። ክፍል 3
የተብራራ ኮድ መስመሮች ብዛት: ደንበኛ

4 ሚሊዮን የፓይዘን ኮድ መስመሮችን ለመተየብ ዱካ። ክፍል 3
የተብራራ ኮድ ጠቅላላ የመስመሮች ብዛት

በ Dropbox ውስጥ የተብራራውን ኮድ መጠን ለመጨመር ያደረግናቸው ነገሮች ዋና ዋና ባህሪያት አጠቃላይ እይታ ይኸውና፡

የማብራሪያ ጥብቅነት። አዲስ ኮድ ለማብራራት ጥብቅ መስፈርቶችን ቀስ በቀስ ጨምረናል። ቀደም ሲል አንዳንድ ማብራሪያዎች በነበሯቸው ፋይሎች ላይ ማብራሪያዎችን ለመጨመር በሚጠቁሙ በሊንተር ምክሮች ጀመርን። አሁን በአዲስ የፓይዘን ፋይሎች እና በአብዛኛዎቹ ነባር ፋይሎች ውስጥ ማብራሪያዎችን እንፈልጋለን።

ሪፖርቶችን በመተየብ ላይ። ቡድኖችን በኮዳቸው ውስጥ የመተየብ ደረጃን በተመለከተ ሳምንታዊ ሪፖርቶችን እንልካለን እና በመጀመሪያ ምን መገለጽ እንዳለበት ምክር እንሰጣለን ።

የ mypy ታዋቂነት። በክስተቶች ላይ ስለ mypy እንነጋገራለን እና ቡድኖችን በማብራራት እንዲጀምሩ ለመርዳት እንነጋገራለን ።

የሕዝብ አስተያየት መስጫዎች ዋና ዋና ችግሮችን ለመለየት በየጊዜው የተጠቃሚ ዳሰሳዎችን እናደርጋለን። እነዚህን ችግሮች ለመፍታት በጣም ሩቅ ለመሄድ ዝግጁ ነን (አዲስ ቋንቋ ለመፍጠር እንኳን!)።

አፈጻጸም። ዴሞን እና ማይፒክን በመጠቀም የ mypy አፈጻጸምን በእጅጉ አሻሽለናል። ይህ የተደረገው በማብራሪያው ሂደት ውስጥ የሚፈጠሩትን ችግሮች ለማቃለል እና ከፍተኛ መጠን ያለው ኮድ ለመስራት ነው.

ከአርታዒዎች ጋር ውህደት. በ Dropbox ላይ ታዋቂ በሆኑ አርታዒዎች ውስጥ ማይፒን ማሄድን የሚደግፉ መሳሪያዎችን ገንብተናል። ይህ PyCharm፣ Vim እና VS Codeን ያካትታል። ይህም ኮዱን የማብራራት እና ተግባራዊነቱን የመፈተሽ ሂደትን በእጅጉ አቅልሏል። ነባሩን ኮድ ሲያብራሩ እነዚህ አይነት ድርጊቶች የተለመዱ ናቸው።

የማይንቀሳቀስ ትንተና. የማይንቀሳቀስ ትንታኔ መሳሪያዎችን በመጠቀም የተግባር ፊርማዎችን ለመገመት መሳሪያ ፈጠርን። ይህ መሳሪያ በአንፃራዊነት ቀላል በሆኑ ሁኔታዎች ውስጥ ብቻ ነው የሚሰራው፣ ነገር ግን ብዙ ጥረት ሳናደርግ የኮድ አይነት ሽፋናችንን እንድንጨምር ረድቶናል።

ለሶስተኛ ወገን ቤተ-መጻሕፍት ድጋፍ። አብዛኛዎቹ ፕሮጀክቶቻችን የSQLAlchemy Toolkit ይጠቀማሉ። የ PEP 484 ዓይነቶች በቀጥታ መቅረጽ ያልቻሉትን የፓይዘንን ተለዋዋጭ ችሎታዎች ይጠቀማል። እኛ፣ በ PEP 561 መሠረት፣ ተዛማጅውን የስታምፕ ፋይል ፈጠርን እና ለ mypy ፕለጊን ጻፍን።ክፍት ምንጭ), ይህም የ SQLAlchemy ድጋፍን ያሻሽላል።

ያጋጠሙን ችግሮች

ወደ 4 ሚሊዮን መስመር የተተየበው ኮድ የሚወስደው መንገድ ሁልጊዜ ለእኛ ቀላል አልነበረም። በዚህ መንገድ ብዙ ጉድጓዶች አጋጥመውናል እና ብዙ ስህተቶችን ሰርተናል። ያጋጠሙን አንዳንድ ችግሮች ናቸው። ስለእነሱ መንገር ሌሎች ተመሳሳይ ችግሮችን ለማስወገድ እንደሚረዳቸው ተስፋ እናደርጋለን።

የጎደሉ ፋይሎች። ስራችንን የጀመርነው ትንሽ መጠን ያላቸው ፋይሎችን በማጣራት ነው። በእነዚህ ፋይሎች ውስጥ ያልተካተተ ማንኛውም ነገር አልተፈተሸም። የመጀመሪያዎቹ ማብራሪያዎች በውስጣቸው ሲታዩ ፋይሎች ወደ መቃኛ ዝርዝር ታክለዋል። አንድ ነገር ከማረጋገጫ ወሰን ውጭ ካለው ሞጁል የመጣ ከሆነ ፣ ከዚያ እያወራን ነበር ከመሳሰሉት እሴቶች ጋር ስለ መሥራት። Any, ጨርሶ ያልተፈተኑ. ይህ በተለይ በመጀመሪያዎቹ የፍልሰት ደረጃዎች ላይ ከፍተኛ የትየባ ትክክለኛነት እንዲጠፋ አድርጓል። ይህ አካሄድ እስካሁን ድረስ በሚያስደንቅ ሁኔታ ሰርቷል፣ ምንም እንኳን የተለመደው ሁኔታ ፋይሎችን በግምገማው ወሰን ላይ ማከል በሌሎች የኮድቤዝ ክፍሎች ላይ ያሉ ችግሮችን ያሳያል። በጣም በከፋ ሁኔታ ውስጥ, ሁለት ገለልተኛ የኮድ ቦታዎች ሲዋሃዱ, እርስ በእርሳቸው ተለይተው, ዓይነቶች ቀድሞውኑ ሲፈተሹ, የእነዚህ አካባቢዎች ዓይነቶች እርስ በርስ የማይጣጣሙ መሆናቸውን ታወቀ. ይህም በማብራሪያዎቹ ላይ ብዙ ለውጦችን ማድረግ አስፈለገ። አሁን ወደ ኋላ መለስ ብለን ስንመለከት፣ በቶሎ ወደ mypy አይነት መፈተሻ ቦታ ዋና የላይብረሪ ሞጁሎችን ማከል እንዳለብን እንገነዘባለን። ይህ የእኛ ስራ የበለጠ ሊተነበይ የሚችል ያደርገዋል።

የድሮ ኮድ በማብራራት ላይ። ስንጀምር ወደ 4 ሚሊዮን የሚጠጉ የፓይዘን ኮድ መስመሮች ነበሩን። ይህን ሁሉ ኮድ ማብራራት ቀላል ስራ እንዳልሆነ ግልጽ ነበር። ሙከራ በሚካሄድበት ጊዜ የአይነት መረጃን የሚሰበስብ እና በተሰበሰበው መረጃ ላይ በመመስረት በኮድዎ ላይ የአይነት ማብራሪያዎችን የሚያክል PyAnnotate የሚባል መሳሪያ ፈጥረናል። ነገር ግን፣ የዚህ መሳሪያ ሰፊ ተቀባይነት አላስተዋልንም። የመሰብሰቢያ አይነት መረጃ ቀርፋፋ ነበር፣ እና በራስ ሰር የመነጩ ማብራሪያዎች ብዙ ጊዜ በእጅ ማስተካከያ ያስፈልጋቸዋል። ኮድ በገመገምን ቁጥር ይህን መሳሪያ በራስ ሰር ስለማስኬድ አስበን ነበር፣ ወይም አንዳንድ አነስተኛ መጠን ያላቸውን ትክክለኛ የአውታረ መረብ ጥያቄዎችን በመተንተን ላይ በመመስረት አይነት መረጃ ለመሰብሰብ አስበን ነበር፣ ነገር ግን የትኛውም አካሄድ በጣም አደገኛ ስለሆነ ላለማድረግ ወስነናል።

በውጤቱም, አብዛኛው ኮድ በባለቤቶቹ በእጅ የተብራራ መሆኑን ልብ ሊባል ይችላል. ይህንን ሂደት በትክክለኛው አቅጣጫ ለመምራት በተለይ አስፈላጊ በሆኑ ሞጁሎች እና ተግባራት ላይ ማብራራት ያለባቸውን ሪፖርቶችን እናዘጋጃለን. ለምሳሌ፣ በመቶዎች በሚቆጠሩ ቦታዎች ላይ ለሚሠራው የቤተ-መጻህፍት ሞጁል ዓይነት ማብራሪያዎችን መስጠት አስፈላጊ ነው። ነገር ግን በአዲስ እየተተካ ያለው አሮጌ አገልግሎት አሁን ለማብራራት በጣም አስፈላጊ አይደለም. ለሌጋሲ ኮድ አይነት ማብራሪያዎችን ለመፍጠር የማይንቀሳቀስ ትንታኔን በመጠቀምም እየሞከርን ነው።

ሳይክሊካል ማስመጣት። ከዚህ በላይ ስለ ሳይክሊካል ማስመጣት (“ጥገኛነት ታንግልስ”) ተናገርኩኝ፣ የነሱ መኖር ማይፒን ለማፋጠን አስቸጋሪ አድርጎታል። በተጨማሪም በእነዚህ ሳይክሊክ ከውጭ በሚገቡ ምርቶች ምክንያት የሚመጡ ሁሉንም ዓይነት ፈሊጦች mypy እንዲደግፉ ለማድረግ ጠንክረን መሥራት ነበረብን። ከክብ ወደ ሀገር ውስጥ ማስገባትን በሚመለከት አብዛኛዎቹን mypy ጉዳዮች ያስተካክል ዋና የስርአት ዳግም ዲዛይን ፕሮጀክት በቅርቡ አጠናቀናል። እነዚህ ችግሮች የመነጩት ከመጀመሪያዎቹ የፕሮጀክቱ ቀናት፣ ከ Alore፣ mypy ፕሮጀክቱ መጀመሪያ ላይ ያተኮረበት የትምህርት ቋንቋ ነው። Alore syntax በብስክሌት የማስመጣት ትዕዛዞች ችግሮችን ለመፍታት ቀላል ያደርገዋል። ዘመናዊው ማይፒ ቀደም ሲል ከነበረው ቀላል አስተሳሰብ አተገባበር የተወሰኑ ገደቦችን ወርሷል (ይህም ለአሎሬ በጣም ተስማሚ ነበር)። ፓይዘን ከክብ አስመጪዎች ጋር መስራት አስቸጋሪ ያደርገዋል፣በዋነኛነት አገላለጾች አሻሚ ስለሆኑ። ለምሳሌ፣ የምደባ ክዋኔ በትክክል ተለዋጭ ስም ሊገልጽ ይችላል። አብዛኛው የማስመጣት ምልልስ እስካልተሰራ ድረስ Mypy ሁልጊዜ እንደዚህ ያሉ ነገሮችን ማግኘት አይችልም። በአሎሬ ውስጥ እንደዚህ ያሉ አሻሚዎች አልነበሩም። በስርዓት ልማት የመጀመሪያ ደረጃዎች ላይ የተደረጉ ደካማ ውሳኔዎች ከብዙ አመታት በኋላ ለፕሮግራም አውጪው ደስ የማይል ድንገተኛ ነገር ሊያሳዩ ይችላሉ።

ውጤቶች፡ ወደ 5 ሚሊዮን የኮድ መስመሮች እና አዲስ አድማሶች የሚወስደው መንገድ

የ mypy ፕሮጄክት ረጅም መንገድ ተጉዟል - ከቀደምት ፕሮቶታይፕ እስከ 4 ሚሊዮን የምርት ኮድ ዓይነቶችን የሚቆጣጠር ስርዓት። mypy በዝግመተ ለውጥ ሲሄድ፣ የፓይዘን አይነት ፍንጮች ደረጃቸውን የጠበቁ ነበሩ። በእነዚህ ቀናት፣ የፓይዘን ኮድ በመተየብ ዙሪያ ኃይለኛ ምህዳር ተፈጥሯል። ለቤተ-መጻህፍት ድጋፍ ቦታ አለው, ለ IDEs እና ለአርታዒዎች ረዳት መሳሪያዎችን ይዟል, በርካታ አይነት ቁጥጥር ስርዓቶች አሉት, እያንዳንዱም የራሱ ጥቅሞች እና ጉዳቶች አሉት.

ምንም እንኳን የዓይነት ፍተሻ በDropbox የተሰጠ ቢሆንም፣ አሁንም የፓይዘን ኮድ መተየብ ገና በጅማሬ ላይ ነን ብዬ አምናለሁ። የአይነት ፍተሻ ቴክኖሎጂዎች በዝግመተ ለውጥ እና መሻሻል የሚቀጥሉ ይመስለኛል።

በትልቁ የፓይዘን ፕሮጄክትዎ ውስጥ የዓይነት ፍተሻን ካልተጠቀሙ ወደ የማይንቀሳቀስ ትየባ ለመሄድ አሁን በጣም ጥሩ ጊዜ እንደሆነ ይወቁ። ተመሳሳይ ሽግግር ያደረጉትን አነጋግሬአለሁ። አንዳቸውም አልተጸጸቱም. የማረጋገጫ አይነት ፓይዘንን ከ"መደበኛ ፓይዘን" ይልቅ ትላልቅ ፕሮጀክቶችን ለማዳበር በጣም ተስማሚ የሆነ ቋንቋ ያደርገዋል።

ውድ አንባቢዎች! በእርስዎ የፓይዘን ፕሮጄክቶች ውስጥ ዓይነት ማጣራትን ይጠቀማሉ?

4 ሚሊዮን የፓይዘን ኮድ መስመሮችን ለመተየብ ዱካ። ክፍል 3
4 ሚሊዮን የፓይዘን ኮድ መስመሮችን ለመተየብ ዱካ። ክፍል 3

ምንጭ: hab.com

አስተያየት ያክሉ