పైథాన్ కోడ్ కోసం టైప్ చెకింగ్ సిస్టమ్ను అమలు చేస్తున్నప్పుడు డ్రాప్బాక్స్ తీసుకున్న మార్గం గురించి మెటీరియల్ అనువాదం యొక్క మూడవ భాగాన్ని మేము మీ దృష్టికి అందిస్తున్నాము.
→ మునుపటి భాగాలు:
టైప్ చేసిన కోడ్ 4 మిలియన్ లైన్లకు చేరుకుంది
మరో ప్రధాన సవాలు (మరియు అంతర్గతంగా సర్వే చేయబడిన వారిలో రెండవ అత్యంత సాధారణ ఆందోళన) డ్రాప్బాక్స్లో టైప్ చెక్ల ద్వారా కవర్ చేయబడిన కోడ్ మొత్తాన్ని పెంచడం. టైప్ చేసిన కోడ్బేస్ యొక్క పరిమాణాన్ని సహజంగా పెంచడం నుండి స్టాటిక్ మరియు డైనమిక్ ఆటోమేటెడ్ టైప్ ఇన్ఫరెన్స్పై mypy బృందం ప్రయత్నాలను కేంద్రీకరించడం వరకు మేము ఈ సమస్యను పరిష్కరించడానికి అనేక విధానాలను ప్రయత్నించాము. చివరికి, సాధారణ విజయ వ్యూహం లేనట్లు అనిపించింది, అయితే మేము అనేక విధానాలను కలపడం ద్వారా ఉల్లేఖన కోడ్ వాల్యూమ్లో వేగవంతమైన వృద్ధిని సాధించగలిగాము.
ఫలితంగా, మా అతిపెద్ద పైథాన్ రిపోజిటరీ (బ్యాకెండ్ కోడ్తో) దాదాపు 4 మిలియన్ లైన్ల ఉల్లేఖన కోడ్ను కలిగి ఉంది. స్టాటిక్ కోడ్ టైపింగ్ పని సుమారు మూడు సంవత్సరాలలో పూర్తయింది. Mypy ఇప్పుడు టైపింగ్ పురోగతిని పర్యవేక్షించడాన్ని సులభతరం చేసే వివిధ రకాల కోడ్ కవరేజ్ నివేదికలకు మద్దతు ఇస్తుంది. ప్రత్యేకించి, మేము రకాల్లో అస్పష్టతలతో కోడ్పై నివేదికలను రూపొందించవచ్చు, ఉదాహరణకు, ఒక రకం యొక్క స్పష్టమైన ఉపయోగం Any
ధృవీకరించబడని ఉల్లేఖనాలలో లేదా రకం ఉల్లేఖనాలు లేని థర్డ్-పార్టీ లైబ్రరీలను దిగుమతి చేసుకోవడం వంటి వాటితో. డ్రాప్బాక్స్లో టైప్ చెకింగ్ యొక్క ఖచ్చితత్వాన్ని మెరుగుపరిచే ప్రాజెక్ట్లో భాగంగా, కేంద్రీకృత పైథాన్ రిపోజిటరీలోని కొన్ని ప్రముఖ ఓపెన్ సోర్స్ లైబ్రరీల కోసం టైప్ డెఫినిషన్లను (స్టబ్ ఫైల్స్ అని పిలవబడేవి) మెరుగుపరచడానికి మేము సహకరించాము.
మేము కొన్ని నిర్దిష్ట పైథాన్ నమూనాల కోసం మరింత ఖచ్చితమైన రకాలను అనుమతించే టైప్ సిస్టమ్ యొక్క కొత్త ఫీచర్లను అమలు చేసాము (మరియు తదుపరి PEPలలో ప్రామాణికం చేసాము). దీనికి చెప్పుకోదగ్గ ఉదాహరణ TypeDict
, ఇది JSON-వంటి నిఘంటువుల కోసం రకాలను అందిస్తుంది, అవి స్థిరమైన స్ట్రింగ్ కీలను కలిగి ఉంటాయి, ఒక్కొక్కటి దాని స్వంత రకం విలువను కలిగి ఉంటాయి. మేము టైప్ సిస్టమ్ని విస్తరించడం కొనసాగిస్తాము. మా తదుపరి దశ పైథాన్ యొక్క సంఖ్యా సామర్థ్యాలకు మద్దతును మెరుగుపరచడం.
ఉల్లేఖన కోడ్ యొక్క లైన్ల సంఖ్య: సర్వర్
ఉల్లేఖన కోడ్ యొక్క లైన్ల సంఖ్య: క్లయింట్
ఉల్లేఖన కోడ్ యొక్క మొత్తం పంక్తుల సంఖ్య
డ్రాప్బాక్స్లో ఉల్లేఖన కోడ్ మొత్తాన్ని పెంచడానికి మేము చేసిన పనుల యొక్క ప్రధాన లక్షణాల యొక్క అవలోకనం ఇక్కడ ఉంది:
ఉల్లేఖన కఠినత. కొత్త కోడ్ను ఉల్లేఖించే కఠినత కోసం మేము క్రమంగా అవసరాలను పెంచాము. మేము ఇప్పటికే కొన్ని ఉల్లేఖనాలను కలిగి ఉన్న ఫైల్లకు ఉల్లేఖనాలను జోడించమని సూచించిన లింటర్ చిట్కాలతో ప్రారంభించాము. మాకు ఇప్పుడు కొత్త పైథాన్ ఫైల్లలో మరియు ఇప్పటికే ఉన్న చాలా ఫైల్లలో టైప్ ఉల్లేఖనాలు అవసరం.
టైపింగ్ నివేదికలు. మేము టీమ్లకు వారి కోడ్లో టైప్ చేసే స్థాయిపై వారంవారీ నివేదికలను పంపుతాము మరియు ముందుగా ఉల్లేఖించాల్సిన వాటిపై సలహాలను అందిస్తాము.
mypy యొక్క ప్రజాదరణ. మేము ఈవెంట్లలో మైపీ గురించి మాట్లాడుతాము మరియు టైప్ ఉల్లేఖనాలతో ప్రారంభించడంలో వారికి సహాయపడటానికి బృందాలతో మాట్లాడుతాము.
పోల్స్. మేము ప్రధాన సమస్యలను గుర్తించడానికి కాలానుగుణ వినియోగదారు సర్వేలను నిర్వహిస్తాము. మేము ఈ సమస్యలను పరిష్కరించడంలో చాలా దూరం వెళ్ళడానికి సిద్ధంగా ఉన్నాము (మైపీని వేగవంతం చేయడానికి కొత్త భాషను కూడా సృష్టించడం కూడా!).
ప్రదర్శన. మేము డెమోన్ మరియు mypycని ఉపయోగించడం ద్వారా mypy పనితీరును బాగా మెరుగుపరిచాము. ఉల్లేఖన ప్రక్రియలో తలెత్తే అసౌకర్యాలను సున్నితంగా చేయడానికి మరియు పెద్ద మొత్తంలో కోడ్తో పని చేయడానికి ఇది జరిగింది.
సంపాదకులతో ఏకీకరణ. డ్రాప్బాక్స్లో జనాదరణ పొందిన ఎడిటర్లలో మైపీని అమలు చేయడం కోసం మేము సాధనాలను రూపొందించాము. ఇందులో PyCharm, Vim మరియు VS కోడ్ ఉన్నాయి. ఇది కోడ్ను ఉల్లేఖించే మరియు దాని కార్యాచరణను తనిఖీ చేసే ప్రక్రియను చాలా సులభతరం చేసింది. ఇప్పటికే ఉన్న కోడ్ను ఉల్లేఖించేటప్పుడు ఈ రకమైన చర్యలు సాధారణం.
స్టాటిక్ విశ్లేషణ. స్టాటిక్ అనాలిసిస్ టూల్స్ ఉపయోగించి ఫంక్షన్ సిగ్నేచర్లను ఊహించడానికి మేము ఒక సాధనాన్ని సృష్టించాము. ఈ సాధనం సాపేక్షంగా సాధారణ పరిస్థితులలో మాత్రమే పని చేస్తుంది, అయితే ఇది ఎక్కువ శ్రమ లేకుండా మా కోడ్ రకం కవరేజీని పెంచడంలో మాకు సహాయపడింది.
మూడవ పార్టీ లైబ్రరీలకు మద్దతు. మా అనేక ప్రాజెక్ట్లు SQLAlchemy టూల్కిట్ను ఉపయోగిస్తాయి. PEP 484 రకాలు నేరుగా మోడల్ చేయలేకపోవడాన్ని ఇది పైథాన్ యొక్క డైనమిక్ సామర్థ్యాల ప్రయోజనాన్ని పొందుతుంది. మేము, PEP 561కి అనుగుణంగా, సంబంధిత స్టబ్ ఫైల్ని సృష్టించాము మరియు mypy కోసం ప్లగ్ఇన్ను వ్రాసాము (
మేము ఎదుర్కొన్న ఇబ్బందులు
టైప్ చేసిన కోడ్ యొక్క 4 మిలియన్ లైన్ల మార్గం మాకు ఎల్లప్పుడూ సులభం కాదు. ఈ మార్గంలో మేము చాలా గుంతలను ఎదుర్కొన్నాము మరియు అనేక తప్పులు చేసాము. మేము ఎదుర్కొన్న కొన్ని సమస్యలు ఇవి. వారి గురించి చెప్పడం ఇతరులకు ఇలాంటి సమస్యలను నివారించడంలో సహాయపడుతుందని మేము ఆశిస్తున్నాము.
ఫైల్లు లేవు. మేము తక్కువ మొత్తంలో ఫైల్లను మాత్రమే తనిఖీ చేయడం ద్వారా మా పనిని ప్రారంభించాము. ఈ ఫైల్లలో చేర్చని ఏదీ తనిఖీ చేయబడలేదు. ఫైల్లలో మొదటి ఉల్లేఖనాలు కనిపించినప్పుడు స్కానింగ్ జాబితాకు జోడించబడ్డాయి. ధృవీకరణ పరిధికి వెలుపల ఉన్న మాడ్యూల్ నుండి ఏదైనా దిగుమతి చేయబడితే, మేము వంటి విలువలతో పని చేయడం గురించి మాట్లాడుతున్నాము Any
, ఇది అస్సలు పరీక్షించబడలేదు. ఇది టైపింగ్ ఖచ్చితత్వం యొక్క గణనీయమైన నష్టానికి దారితీసింది, ముఖ్యంగా వలస యొక్క ప్రారంభ దశలలో. ఈ విధానం ఇప్పటివరకు ఆశ్చర్యకరంగా బాగా పనిచేసింది, అయినప్పటికీ సమీక్ష యొక్క పరిధికి ఫైల్లను జోడించడం కోడ్బేస్లోని ఇతర భాగాలలో సమస్యలను వెల్లడిస్తుంది. చెత్త సందర్భంలో, కోడ్ యొక్క రెండు వివిక్త ప్రాంతాలు విలీనం చేయబడినప్పుడు, దీనిలో, ఒకదానికొకటి స్వతంత్రంగా, రకాలు ఇప్పటికే తనిఖీ చేయబడ్డాయి, ఈ ప్రాంతాల రకాలు ఒకదానికొకటి విరుద్ధంగా ఉన్నాయని తేలింది. దీంతో ఉల్లేఖనాల్లో చాలా మార్పులు చేయాల్సి వచ్చింది. ఇప్పుడు వెనక్కి తిరిగి చూసుకుంటే, మైపీ టైప్ చెకింగ్ ఏరియాకు కోర్ లైబ్రరీ మాడ్యూల్లను మనం త్వరగా జోడించి ఉండాల్సిందని మేము గ్రహించాము. ఇది మా పనిని మరింత ఊహించదగినదిగా చేస్తుంది.
పాత కోడ్ ఉల్లేఖించడం. మేము ప్రారంభించినప్పుడు, మేము ఇప్పటికే ఉన్న పైథాన్ కోడ్ యొక్క 4 మిలియన్ లైన్లను కలిగి ఉన్నాము. ఈ కోడ్ మొత్తాన్ని ఉల్లేఖించడం అంత తేలికైన పని కాదని స్పష్టమైంది. మేము PyAnnotate అనే టూల్ని సృష్టించాము, అది పరీక్షలు జరుగుతున్నప్పుడు టైప్ సమాచారాన్ని సేకరించవచ్చు మరియు సేకరించిన సమాచారం ఆధారంగా మీ కోడ్కి టైప్ ఉల్లేఖనాలను జోడించవచ్చు. అయినప్పటికీ, ఈ సాధనం యొక్క విస్తృతమైన స్వీకరణను మేము గమనించలేదు. రకం సమాచారాన్ని సేకరించడం నెమ్మదిగా ఉంది మరియు స్వయంచాలకంగా రూపొందించబడిన ఉల్లేఖనాలకు తరచుగా అనేక మాన్యువల్ సవరణలు అవసరమవుతాయి. మేము కోడ్ని సమీక్షించిన ప్రతిసారీ ఈ సాధనాన్ని స్వయంచాలకంగా అమలు చేయడం గురించి లేదా వాస్తవ నెట్వర్క్ అభ్యర్థనల యొక్క కొన్ని చిన్న వాల్యూమ్లను విశ్లేషించడం ఆధారంగా టైప్ సమాచారాన్ని సేకరించడం గురించి ఆలోచించాము, కానీ ఈ విధానం చాలా ప్రమాదకరం కాబట్టి చేయకూడదని నిర్ణయించుకున్నాము.
ఫలితంగా, చాలా కోడ్ దాని యజమానులచే మాన్యువల్గా ఉల్లేఖించబడిందని గమనించవచ్చు. ఈ ప్రక్రియను సరైన దిశలో నడిపించడానికి, ఉల్లేఖించాల్సిన ముఖ్యమైన మాడ్యూల్స్ మరియు ఫంక్షన్లపై మేము నివేదికలను సిద్ధం చేస్తాము. ఉదాహరణకు, వందలాది ప్రదేశాలలో ఉపయోగించే లైబ్రరీ మాడ్యూల్ కోసం టైప్ ఉల్లేఖనాలను అందించడం చాలా ముఖ్యం. కానీ కొత్త సేవతో భర్తీ చేయబడే పాత సేవ ఇకపై వ్యాఖ్యానించడం అంత ముఖ్యమైనది కాదు. లెగసీ కోడ్ కోసం టైప్ ఉల్లేఖనాలను రూపొందించడానికి స్టాటిక్ విశ్లేషణను ఉపయోగించడంలో కూడా మేము ప్రయోగాలు చేస్తున్నాము.
చక్రీయ దిగుమతులు. పైన, నేను చక్రీయ దిగుమతులు ("డిపెండెన్సీ టాంగిల్స్") గురించి మాట్లాడాను, వాటి ఉనికి mypyని వేగవంతం చేయడం కష్టతరం చేసింది. ఈ చక్రీయ దిగుమతుల వల్ల కలిగే అన్ని రకాల ఇడియమ్లకు mypy మద్దతునిచ్చేలా చేయడానికి కూడా మేము చాలా కష్టపడాల్సి వచ్చింది. వృత్తాకార దిగుమతులకు సంబంధించి mypy యొక్క చాలా సమస్యలను పరిష్కరించే ప్రధాన సిస్టమ్ రీడిజైన్ ప్రాజెక్ట్ను మేము ఇటీవల పూర్తి చేసాము. ఈ సమస్యలు వాస్తవానికి ప్రాజెక్ట్ ప్రారంభ రోజుల నుండి ఉద్భవించాయి, మైపీ ప్రాజెక్ట్ మొదట దృష్టి సారించిన విద్యా భాష అయిన అలోర్ నుండి. అలోర్ సింటాక్స్ చక్రీయ దిగుమతి ఆదేశాలతో సమస్యలను పరిష్కరించడం సులభం చేస్తుంది. ఆధునిక మైపీ దాని మునుపటి, సరళమైన అమలు (అలోర్కు బాగా సరిపోయేది) నుండి కొన్ని పరిమితులను వారసత్వంగా పొందింది. పైథాన్ వృత్తాకార దిగుమతులతో పని చేయడం కష్టతరం చేస్తుంది, ప్రధానంగా వ్యక్తీకరణలు అస్పష్టంగా ఉంటాయి. ఉదాహరణకు, ఒక అసైన్మెంట్ ఆపరేషన్ నిజానికి ఒక రకం అలియాస్ని నిర్వచించవచ్చు. చాలా వరకు దిగుమతి లూప్ ప్రాసెస్ చేయబడే వరకు Mypy ఎల్లప్పుడూ ఇలాంటి వాటిని గుర్తించదు. ఆలూరులో అలాంటి సందిగ్ధతలు లేవు. సిస్టమ్ డెవలప్మెంట్ యొక్క ప్రారంభ దశలలో తీసుకున్న పేలవమైన నిర్ణయాలు చాలా సంవత్సరాల తరువాత ప్రోగ్రామర్కు అసహ్యకరమైన ఆశ్చర్యాన్ని కలిగిస్తాయి.
ఫలితాలు: 5 మిలియన్ లైన్ల కోడ్ మరియు కొత్త క్షితిజాలకు మార్గం
mypy ప్రాజెక్ట్ చాలా ముందుకు వచ్చింది - ప్రారంభ ప్రోటోటైప్ల నుండి 4 మిలియన్ లైన్ల ఉత్పత్తి కోడ్ రకాలను నియంత్రించే సిస్టమ్ వరకు. మైపీ పరిణామం చెందడంతో, పైథాన్ రకం సూచనలు ప్రామాణికం చేయబడ్డాయి. ఈ రోజుల్లో, పైథాన్ కోడ్ని టైప్ చేయడం చుట్టూ శక్తివంతమైన పర్యావరణ వ్యవస్థ అభివృద్ధి చెందింది. ఇది లైబ్రరీ మద్దతు కోసం ఒక స్థలాన్ని కలిగి ఉంది, ఇది IDEలు మరియు సంపాదకుల కోసం సహాయక సాధనాలను కలిగి ఉంది, ఇది అనేక రకాల నియంత్రణ వ్యవస్థలను కలిగి ఉంది, వీటిలో ప్రతి దాని స్వంత లాభాలు మరియు నష్టాలు ఉన్నాయి.
డ్రాప్బాక్స్లో టైప్ చెకింగ్ ఇప్పటికే ఇవ్వబడినప్పటికీ, మేము ఇంకా పైథాన్ కోడ్ని టైప్ చేసే ప్రారంభ రోజుల్లోనే ఉన్నామని నేను నమ్ముతున్నాను. టైప్ చెకింగ్ టెక్నాలజీలు అభివృద్ధి చెందడం మరియు మెరుగుపరచడం కొనసాగుతుందని నేను భావిస్తున్నాను.
మీరు ఇప్పటికే మీ పెద్ద-స్థాయి పైథాన్ ప్రాజెక్ట్లో టైప్ చెకింగ్ని ఉపయోగించకుంటే, స్టాటిక్ టైపింగ్కు వెళ్లడం ప్రారంభించడానికి ఇప్పుడు చాలా మంచి సమయం అని తెలుసుకోండి. ఇలాంటి పరివర్తన చేసిన వారితో నేను మాట్లాడాను. వారెవరూ పశ్చాత్తాపపడలేదు. టైప్ చెకింగ్ పైథాన్ని "సాధారణ పైథాన్" కంటే పెద్ద ప్రాజెక్ట్లను అభివృద్ధి చేయడానికి బాగా సరిపోయే భాషగా చేస్తుంది.
ప్రియమైన పాఠకులారా! మీరు మీ పైథాన్ ప్రాజెక్ట్లలో టైప్ చెకింగ్ని ఉపయోగిస్తున్నారా?
మూలం: www.habr.com