Python කේතයේ පේළි මිලියන 4ක් ටයිප් කිරීමේ මාර්ගය. 3 කොටස

Python කේතය සඳහා වර්ග පිරික්සුම් පද්ධතියක් ක්‍රියාත්මක කිරීමේදී Dropbox ගත් මාර්ගය පිළිබඳ ද්‍රව්‍ය පරිවර්තනයේ තුන්වන කොටස අපි ඔබේ අවධානයට ඉදිරිපත් කරමු.

Python කේතයේ පේළි මිලියන 4ක් ටයිප් කිරීමේ මාර්ගය. 3 කොටස

→ පෙර කොටස්: පළමුව и දෙවැන්න

ටයිප් කළ කේතයේ පේළි මිලියන 4කට ළඟා වීම

තවත් ප්‍රධාන අභියෝගයක් (සහ අභ්‍යන්තරව සමීක්‍ෂණය කරන ලද අය අතර දෙවන වඩාත් පොදු සැලකිල්ල) ඩ්‍රොප්බොක්ස් හි වර්ග චෙක්පත් මගින් ආවරණය වන කේත ප්‍රමාණය වැඩි කිරීමයි. අපි ටයිප් කළ කේත පදනමේ ප්‍රමාණය ස්වභාවිකව වර්ධනය කිරීමේ සිට mypy කණ්ඩායමේ උත්සාහයන් ස්ථිතික සහ ගතික ස්වයංක්‍රීය ආකාරයේ අනුමානයන් වෙත යොමු කිරීම දක්වා මෙම ගැටලුව විසඳීමට ප්‍රවේශයන් කිහිපයක් උත්සාහ කර ඇත. අවසානයේදී, සරල ජයග්‍රාහී උපාය මාර්ගයක් නොමැති බව පෙනෙන්නට තිබුණත්, බොහෝ ප්‍රවේශයන් ඒකාබද්ධ කිරීමෙන් විවරණ කේත පරිමාවේ වේගවත් වර්ධනයක් ලබා ගැනීමට අපට හැකි විය.

එහි ප්‍රතිඵලයක් වශයෙන්, අපගේ විශාලතම පයිතන් ගබඩාවේ (පසුපෙළ කේතය සහිත) විවරණ කේත පේළි මිලියන 4කට ආසන්න ප්‍රමාණයක් ඇත. ස්ථිතික කේත ටයිප් කිරීමේ කාර්යය ආසන්න වශයෙන් වසර තුනකින් අවසන් විය. Mypy දැන් ටයිප් කිරීමේ ප්‍රගතිය නිරීක්ෂණය කිරීම පහසු කරන විවිධ වර්ගයේ කේත ආවරණ වාර්තා සඳහා සහය දක්වයි. විශේෂයෙන්, අපට වර්ගවල අපැහැදිලි සහිත කේතය පිළිබඳ වාර්තා ජනනය කළ හැකිය, උදාහරණයක් ලෙස, වර්ගයක පැහැදිලි භාවිතය වැනි Any සත්‍යාපනය කළ නොහැකි අනුසටහන් තුළ, හෝ වර්ග විවරණ නොමැති තුන්වන පාර්ශ්ව පුස්තකාල ආයාත කිරීම වැනි දේවල් සමඟ. Dropbox හි වර්ග පරීක්ෂා කිරීමේ නිරවද්‍යතාවය වැඩිදියුණු කිරීමේ ව්‍යාපෘතියක කොටසක් ලෙස, මධ්‍යගත Python ගබඩාවක ඇති ජනප්‍රිය විවෘත මූලාශ්‍ර පුස්තකාල කිහිපයක් සඳහා වර්ග නිර්වචන (ඊනියා stub ගොනු) වැඩිදියුණු කිරීමට අපි දායක විය. යතුරු ලියනය.

සමහර විශේෂිත පයිතන් රටා සඳහා වඩාත් නිවැරදි වර්ගවලට ඉඩ සලසන ආකාරයේ පද්ධතියේ නව විශේෂාංග අපි ක්‍රියාත්මක කළෙමු (සහ පසුව PEPs තුළ ප්‍රමිතිගත කර ඇත). මේ සඳහා කැපී පෙනෙන උදාහරණයක් TypeDict, එය JSON වැනි ශබ්ද කෝෂ සඳහා වර්ග සපයන අතර ඒවා ස්ථාවර තන්තු යතුරු කට්ටලයක් ඇති අතර, ඒ සෑම එකක්ම තමන්ගේම ආකාරයේ අගයක් ඇත. අපි දිගටම ටයිප් පද්ධතිය පුළුල් කරන්නෙමු. අපගේ මීළඟ පියවර වනුයේ Python හි සංඛ්‍යාත්මක හැකියාවන් සඳහා වන සහාය වැඩිදියුණු කිරීමයි.

Python කේතයේ පේළි මිලියන 4ක් ටයිප් කිරීමේ මාර්ගය. 3 කොටස
විවරණ කේතයේ පේළි ගණන: සේවාදායකය

Python කේතයේ පේළි මිලියන 4ක් ටයිප් කිරීමේ මාර්ගය. 3 කොටස
විවරණ කේතයේ පේළි ගණන: සේවාලාභියා

Python කේතයේ පේළි මිලියන 4ක් ටයිප් කිරීමේ මාර්ගය. 3 කොටස
විවරණ කේතයේ මුළු පේළි ගණන

Dropbox හි විවරණ කේත ප්‍රමාණය වැඩි කිරීමට අප කළ දේවල ප්‍රධාන විශේෂාංග පිළිබඳ දළ විශ්ලේෂණයක් මෙන්න:

විවරණ දැඩි බව. නව කේතයක් සටහන් කිරීමේ දැඩි බව සඳහා අවශ්‍යතා අපි ක්‍රමයෙන් වැඩි කළෙමු. අපි ආරම්භ කළේ දැනටමත් සමහර අනුසටහන් ඇති ගොනුවලට අනුසටහන් එක් කිරීමට යෝජනා කළ ලින්ටර් ඉඟි සමඟිනි. අපට දැන් නව Python ගොනු වල සහ පවතින බොහෝ ගොනු වල ටයිප් අනුසටහන් අවශ්‍ය වේ.

ටයිප් කිරීමේ වාර්තා. අපි කණ්ඩායම්වලට ඔවුන්ගේ කේතය ටයිප් කිරීමේ මට්ටම පිළිබඳ සතිපතා වාර්තා යවන අතර පළමුව සටහන් කළ යුතු දේ පිළිබඳ උපදෙස් ලබා දෙන්නෙමු.

mypy ජනප්‍රිය කිරීම. අපි සිදුවීම් වලදී mypy ගැන කතා කරන අතර කණ්ඩායම් විවරණ සමඟින් ආරම්භ කිරීමට ඔවුන්ට උදවු කිරීමට කතා කරමු.

ඡන්ද විමසීම්. ප්‍රධාන ගැටළු හඳුනා ගැනීම සඳහා අපි වරින් වර පරිශීලක සමීක්ෂණ පවත්වමු. මෙම ගැටළු විසඳීම සඳහා බොහෝ දුර යාමට අපි සූදානම් (mypy වේගවත් කිරීම සඳහා නව භාෂාවක් නිර්මාණය කිරීම පවා!).

කාර්ය සාධනය. අපි ඩීමන් සහ මයිපික් භාවිතා කරමින් mypy කාර්ය සාධනය බෙහෙවින් වැඩි දියුණු කර ඇත. විවරණ ක්‍රියාවලියේදී ඇතිවන අපහසුතා සමනය කිරීමට සහ විශාල කේත ප්‍රමාණයකින් වැඩ කිරීමට හැකිවීම සඳහා මෙය සිදු කරන ලදී.

සංස්කාරකවරුන් සමඟ ඒකාබද්ධ වීම. අපි Dropbox හි ජනප්‍රිය සංස්කාරකවල mypy ධාවනය කිරීමට සහාය වීමට මෙවලම් ගොඩනගා ඇත. මෙයට PyCharm, Vim සහ VS කේතය ඇතුළත් වේ. මෙය කේතය විවරණය කිරීමේ සහ එහි ක්‍රියාකාරීත්වය පරීක්ෂා කිරීමේ ක්‍රියාවලිය බෙහෙවින් සරල කළේය. පවතින කේතය විවරණ කිරීමේදී මෙවැනි ක්‍රියා බහුලව සිදුවේ.

ස්ථිතික විශ්ලේෂණය. අපි ස්ථිතික විශ්ලේෂණ මෙවලම් භාවිතයෙන් ශ්‍රිත අත්සන් අනුමාන කිරීමට මෙවලමක් නිර්මාණය කළෙමු. මෙම මෙවලම ක්‍රියා කළ හැක්කේ සාපේක්ෂව සරල අවස්ථාවන්හිදී පමණි, නමුත් එය වැඩි උත්සාහයකින් තොරව අපගේ කේත වර්ග ආවරණය වැඩි කිරීමට උපකාරී විය.

තෙවන පාර්ශවීය පුස්තකාල සඳහා සහාය. අපගේ බොහෝ ව්‍යාපෘති SQLAlchemy මෙවලම් කට්ටලය භාවිතා කරයි. PEP 484 වර්ග වලට සෘජුව ආකෘතිගත කිරීමට නොහැකි වීම Python හි ගතික හැකියාවන්ගෙන් ප්‍රයෝජන ගනී. අපි, PEP 561 ට අනුකූලව, අදාළ stub ගොනුව නිර්මාණය කර mypy සඳහා ප්ලගිනයක් ලිව්වා (විවෘත මූලාශ්රය), එය SQLAlchemy සහාය වැඩි දියුණු කරයි.

අපි මුහුණ දුන් දුෂ්කරතා

ටයිප් කළ කේත පේළි මිලියන 4කට යන මාර්ගය සැමවිටම අපට පහසු වී නැත. මේ ගමනේදී අපට වළවල් රාශියක් හමු වූ අතර වැරදි කිහිපයක් සිදු විය. මේ අප මුහුණ දුන් ගැටලු කිහිපයකි. ඔවුන් ගැන පැවසීම අන් අයට සමාන ගැටළු මඟහරවා ගැනීමට උපකාරී වනු ඇතැයි අපි බලාපොරොත්තු වෙමු.

ගොනු අතුරුදහන්. අපි අපේ වැඩේ පටන් ගත්තේ ෆයිල් ටික විතරක් චෙක් කරලා. මෙම ගොනුවල ඇතුළත් කර නැති කිසිවක් පරීක්ෂා කර නැත. පළමු අනුසටහන් ඒවායේ දිස් වූ විට ස්කෑන් කිරීමේ ලැයිස්තුවට ගොනු එක් කරන ලදී. සත්‍යාපනය කිරීමේ විෂය පථයෙන් පිටත පිහිටා ඇති මොඩියුලයකින් යමක් ආනයනය කර ඇත්නම්, අපි කතා කළේ වැනි අගයන් සමඟ වැඩ කිරීම ගැන ය. Any, කිසිසේත්ම පරීක්ෂාවට ලක් නොකළ. විශේෂයෙන්ම සංක්‍රමණයේ මුල් අවධියේදී ටයිප් කිරීමේ නිරවද්‍යතාවයේ සැලකිය යුතු අලාභයක් මෙයට හේතු විය. මෙම ප්‍රවේශය මෙතෙක් පුදුම සහගත ලෙස ක්‍රියාත්මක වී ඇත, සාමාන්‍ය තත්වයක් නම් සමාලෝචනයේ විෂය පථයට ගොනු එකතු කිරීම කේත පදනමේ අනෙකුත් කොටස්වල ගැටළු හෙළි කරයි. නරකම අවස්ථාවක, හුදකලා වූ කේත ප්‍රදේශ දෙකක් ඒකාබද්ධ කළ විට, එකිනෙකින් ස්වාධීනව, වර්ග දැනටමත් පරීක්ෂා කර ඇති විට, මෙම ප්‍රදේශ වල වර්ග එකිනෙකට නොගැලපෙන බව පෙනී ගියේය. මෙය විවරණවල බොහෝ වෙනස්කම් කිරීමට අවශ්‍ය විය. දැන් ආපසු හැරී බලන විට, අපි mypy ගේ වර්ග පරීක්ෂා කිරීමේ ප්‍රදේශයට මූලික පුස්තකාල මොඩියුල එකතු කළ යුතු බව අපට වැටහෙනවා. මෙය අපගේ කාර්යය වඩාත් පුරෝකථනය කළ හැකි වනු ඇත.

පැරණි කේතය සටහන් කිරීම. අපි ආරම්භ කරන විට, දැනට පවතින පයිතන් කේතයේ පේළි මිලියන 4 ක් පමණ අප සතුව තිබුණි. මේ සියලු කේතයන් සටහන් කිරීම පහසු කාර්යයක් නොවන බව පැහැදිලි විය. අපි PyAnnotate නම් මෙවලමක් නිර්මාණය කර ඇති අතර එය පරීක්ෂණ ක්‍රියාත්මක වන විට වර්ග තොරතුරු රැස් කළ හැකි අතර එකතු කරන ලද තොරතුරු මත පදනම්ව ඔබේ කේතයට වර්ග විවරණ එක් කළ හැක. කෙසේ වෙතත්, මෙම මෙවලම විශේෂයෙන් පුළුල් ලෙස භාවිතා කිරීමක් අපි දැක නැත. වර්ග තොරතුරු රැස් කිරීම මන්දගාමී වූ අතර ස්වයංක්‍රීයව ජනනය කරන ලද අනුසටහන් බොහෝ විට අතින් සංස්කරණය කිරීම් අවශ්‍ය වේ. අපි කේතය සමාලෝචනය කරන සෑම අවස්ථාවකම මෙම මෙවලම ස්වයංක්‍රීයව ක්‍රියාත්මක කිරීම ගැන හෝ සත්‍ය ජාල ඉල්ලීම්වල කුඩා පරිමාවක් විශ්ලේෂණය කිරීම මත පදනම්ව වර්ග තොරතුරු රැස් කිරීම ගැන සිතුවෙමු, නමුත් එක් ප්‍රවේශයක්ම ඉතා අවදානම් වූ බැවින් නොකිරීමට තීරණය කළෙමු.

එහි ප්‍රතිඵලයක් වශයෙන්, බොහෝ කේතය එහි අයිතිකරුවන් විසින් අතින් සටහන් කර ඇති බව සටහන් කළ හැක. මෙම ක්‍රියාවලිය නිවැරදි දිශාවට යොමු කිරීම සඳහා, අපි විශේෂයෙන් වැදගත් මොඩියුල සහ විවරණය කළ යුතු කාර්යයන් පිළිබඳ වාර්තා සකස් කරමු. උදාහරණයක් ලෙස, ස්ථාන සිය ගණනක භාවිතා වන පුස්තකාල මොඩියුලයක් සඳහා වර්ග විවරණ සැපයීම වැදගත් වේ. නමුත් නව සේවාවක් සමඟ ප්‍රතිස්ථාපනය වන පැරණි සේවාවක් තවදුරටත් විවරණය කිරීම එතරම් වැදගත් නොවේ. අපි උරුම කේතය සඳහා වර්ග විවරණ උත්පාදනය කිරීමට ස්ථිතික විශ්ලේෂණය භාවිතා කිරීම ද අත්හදා බලමින් සිටිමු.

චක්රීය ආනයනය. ඉහත, මම චක්‍රීය ආනයනයන් ("යැපීම් පැටලුම්") ගැන කතා කළෙමි, එහි පැවැත්ම mypy වේගවත් කිරීම දුෂ්කර විය. මෙම චක්‍රීය ආනයනයන් නිසා ඇති වන සියලුම ආකාරයේ ව්‍යාකූලතා සඳහා mypy සහාය ඇති කිරීමට අපට වෙහෙස මහන්සි වී වැඩ කිරීමටද සිදු විය. චක්‍රලේඛ ආනයනය සම්බන්ධයෙන් mypy හි බොහෝ ගැටලු නිරාකරණය කළ ප්‍රධාන පද්ධති ප්‍රතිනිර්මාණ ව්‍යාපෘතියක් අපි මෑතකදී සම්පූර්ණ කළෙමු. මෙම ගැටළු ඇත්ත වශයෙන්ම ව්‍යාපෘතියේ මුල් දිනවල සිට, mypy ව්‍යාපෘතිය මුලින් අවධානය යොමු කළ අධ්‍යාපනික භාෂාව වන Alore වෙතින් පැන නැඟී ඇත. Alore syntax මඟින් චක්‍රීය ආයාත විධාන සමඟ ගැටලු විසඳීම පහසු කරයි. නවීන mypy එහි පෙර සරල මනසකින් ක්‍රියාත්මක කිරීමෙන් යම් සීමාවන් උරුම කර ගෙන ඇත (එය Alore සඳහා ඉතා සුදුසු විය). Python චක්‍රලේඛ ආයාත සමඟ වැඩ කිරීම දුෂ්කර කරයි, ප්‍රධාන වශයෙන් ප්‍රකාශන අපැහැදිලි බැවින්. උදාහරණයක් ලෙස, පැවරුම් මෙහෙයුමක් ඇත්ත වශයෙන්ම අන්වර්ථ වර්ගයක් අර්ථ දැක්විය හැක. බොහෝ ආයාත ලූපය සකසන තෙක් Mypy හට මෙවැනි දේවල් අනාවරණය කර ගැනීමට සැමවිටම නොහැකි වේ. අලෝරේ එහෙම දෙගිඩියාවන් තිබුණේ නැහැ. පද්ධති සංවර්ධනයේ මුල් අවධියේදී ගන්නා ලද දුර්වල තීරණ වසර ගණනාවකට පසුව වැඩසටහන්කරුට අප්රසන්න පුදුමයක් ඉදිරිපත් කළ හැකිය.

ප්‍රතිඵල: කේත රේඛා මිලියන 5කට මාර්ගය සහ නව ක්ෂිතිජය

mypy ව්‍යාපෘතිය දිගු ගමනක් පැමිණ ඇත - මුල් මූලාකෘතිවල සිට නිෂ්පාදන කේත වර්ග මිලියන 4ක් පාලනය කරන පද්ධතියක් දක්වා. mypy පරිණාමය වූ විට, Python වර්ගයේ ඉඟි සම්මත විය. මේ දිනවල පයිතන් කේතය ටයිප් කිරීම වටා ප්‍රබල පරිසර පද්ධතියක් වර්ධනය වී ඇත. එයට පුස්තකාල සහාය සඳහා ස්ථානයක් ඇත, එහි IDE සහ සංස්කාරක සඳහා සහායක මෙවලම් අඩංගු වේ, එයට වර්ග පාලන පද්ධති කිහිපයක් ඇත, ඒ සෑම එකක්ම තමන්ගේම වාසි සහ අවාසි ඇත.

ඩ්‍රොප්බොක්ස් හි ටයිප් චෙක් කිරීම දැනටමත් ලබා දී ඇතත්, අපි තවමත් පයිතන් කේතය ටයිප් කිරීමේ මුල් දිනවල සිටින බව මම විශ්වාස කරමි. මම හිතන්නේ වර්ග පරීක්ෂා කිරීමේ තාක්ෂණයන් දිගටම පරිණාමය වී වැඩි දියුණු වනු ඇත.

ඔබ දැනටමත් ඔබේ මහා පරිමාණ පයිතන් ව්‍යාපෘතියේ ටයිප් චෙක් කිරීම භාවිතා කර නොමැති නම්, ස්ථිතික ටයිප් කිරීමට පටන් ගැනීමට දැන් ඉතා හොඳ කාලයක් බව දැන ගන්න. මම ඒ හා සමාන සංක්‍රාන්තියක් කළ අය සමඟ කතා කර ඇත්තෙමි. ඔවුන් කිසිවෙක් ඒ ගැන පසුතැවුණේ නැත. "සාමාන්‍ය පයිතන්" වලට වඩා විශාල ව්‍යාපෘති සංවර්ධනය කිරීම සඳහා ටයිප් පරීක්ෂා කිරීම පයිතන් වඩාත් සුදුසු භාෂාවක් බවට පත් කරයි.

හිතවත් පා readers කයින්! ඔබ ඔබේ Python ව්‍යාපෘති වල වර්ගය පරීක්ෂා කිරීම භාවිතා කරනවාද?

Python කේතයේ පේළි මිලියන 4ක් ටයිප් කිරීමේ මාර්ගය. 3 කොටස
Python කේතයේ පේළි මිලියන 4ක් ටයිප් කිරීමේ මාර්ගය. 3 කොටස

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න