پٿون ڪوڊ جون 4 ملين لائينون ٽائپ چيڪ ڪرڻ جو رستو. حصو 1

اڄ اسان توهان جي ڌيان ۾ آڻيون ٿا مواد جي ترجمي جو پهريون حصو ته ڪيئن ڊراپ باڪس پائٿون ڪوڊ جي ٽائپ ڪنٽرول سان ڊيل ڪندو آهي.

پٿون ڪوڊ جون 4 ملين لائينون ٽائپ چيڪ ڪرڻ جو رستو. حصو 1

Dropbox Python ۾ گهڻو ڪجهه لکي ٿو. اها هڪ ٻولي آهي جيڪا اسان تمام وڏي پيماني تي استعمال ڪريون ٿا، ٻنهي جي پٺتي پيل خدمتن ۽ ڊيسڪ ٽاپ ڪلائنٽ ايپليڪيشنن لاءِ. اسان Go، TypeScript ۽ Rust به تمام گهڻو استعمال ڪندا آهيون، پر Python اسان جي مکيه ٻولي آهي. اسان جي پيماني تي، ۽ اسان پٿون ڪوڊ جي لکين لائينن جي باري ۾ ڳالهائي رهيا آهيون، اهو ظاهر ٿيو ته اهڙي ڪوڊ جي متحرڪ ٽائپنگ غير ضروري طور تي ان جي سمجھ کي پيچيده ڪيو ۽ محنت جي پيداوار کي سنجيده متاثر ڪرڻ شروع ڪيو. ھن مسئلي کي گھٽائڻ لاءِ، اسان پنھنجي ڪوڊ کي بتدريج منتقل ڪرڻ شروع ڪيو آھي جامد قسم جي چڪاس ۾ mypy استعمال ڪندي. اهو شايد سڀ کان وڌيڪ مشهور اسٽينڊل ٽائپ چيڪنگ سسٽم آهي پٿون لاءِ. Mypy هڪ اوپن سورس پروجيڪٽ آهي، ان جا مکيه ڊولپر ڊروپباڪس ۾ ڪم ڪن ٿا.

ڊراپ باڪس پهرين ڪمپنين مان هڪ هئي جنهن هن پيماني تي پائٿون ڪوڊ ۾ جامد قسم جي چڪاس کي لاڳو ڪيو. Mypy انهن ڏينهن ۾ هزارين منصوبن ۾ استعمال ڪيو ويو آهي. هي اوزار بيشمار ڀيرا، جيئن چوندا آهن، "جنگ ۾ آزمايو." اسان هڪ ڊگهو رستو وٺي آيا آهيون جتي اسان هاڻي آهيون. رستي ۾، اتي ڪيترائي ناڪام ۽ ناڪام تجربا هئا. هي پوسٽ پائٿون ۾ جامد قسم جي چڪاس جي تاريخ کي ڍڪيندي آهي، منهنجي تحقيقي منصوبي جي شروعات کان وٺي، اڄ تائين، جڏهن قسم جي چڪاس ۽ ٽائپ اشارن بيشمار ڊولپرز لاءِ عام ٿي چڪا آهن جيڪي پائٿون ۾ لکندا آهن. اهي ميکانيزم هاڻي ڪيترن ئي اوزارن جهڙوڪ IDEs ۽ ڪوڊ اينالائيزر جي مدد سان آهن.

ٻيو حصو پڙهو

ڇو قسم جي چڪاس ضروري آهي؟

جيڪڏهن توهان ڪڏهن استعمال ڪيو آهي متحرڪ طور تي ٽائيپ ٿيل پٿون، توهان کي ڪجهه مونجهارو ٿي سگهي ٿو ته آخر ۾ جامد ٽائپنگ ۽ mypy جي چوڌاري اهڙي ڪا پريشاني ڇو ٿي رهي آهي. يا ٿي سگهي ٿو ته توهان Python کي خاص طور تي پسند ڪريو ان جي متحرڪ ٽائپنگ جي ڪري، ۽ جيڪو ڪجهه ٿي رهيو آهي اهو توهان کي پريشان ڪري ٿو. جامد ٽائپنگ جي قدر جي ڪنجي حلن جو پيمانو آهي: توهان جو پروجيڪٽ جيترو وڏو هوندو، اوترو وڌيڪ توهان جامد ٽائپنگ ڏانهن مائل ٿيندا، ۽ آخر ۾، وڌيڪ توهان کي واقعي ان جي ضرورت پوندي.

فرض ڪريو هڪ خاص پروجيڪٽ هزارين لائينن جي سائيز تائين پهچي چڪو آهي، ۽ اهو ظاهر ٿيو ته ڪيترائي پروگرامر ان تي ڪم ڪري رهيا آهن. هڪ جهڙي منصوبي کي ڏسي، اسان جي تجربي جي بنياد تي، اسان اهو چئي سگهون ٿا ته ان جي ڪوڊ کي سمجهڻ ڊولپرز جي پيداوار کي برقرار رکڻ لاء اهم هوندو. قسم جي تشريح کان سواء، اهو ڄاڻڻ ڏکيو ٿي سگهي ٿو، مثال طور، ڪهڙي دليلن کي ڪنهن فنڪشن ڏانهن منتقل ڪرڻ، يا ڪهڙي قسم جو فنڪشن واپس ڪري سگهي ٿو. هتي عام سوال آهن جيڪي اڪثر ڪري جواب ڏيڻ ڏکيو هوندا آهن بغير قسم جي تشريح استعمال ڪرڻ جي:

  • هي فنڪشن واپس ڪري سگهي ٿو 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 بائيٽ جو هڪ تار آهي.

هڪ مثالي دنيا ۾، هڪ اميد رکي ٿو ته اهڙيون سڀئي ذيلي ذخيري تعمير ٿيل دستاويز (ڊاڪٽرنگ) ۾ بيان ڪيا ويندا. پر تجربو ان حقيقت جا ڪيترائي مثال ڏئي ٿو ته اهڙي دستاويز اڪثر ڪري ڪوڊ ۾ نه ڏٺو ويو آهي جنهن سان توهان ڪم ڪرڻو پوندو. جيتوڻيڪ اهڙي دستاويز ڪوڊ ۾ موجود آهي، ڪو به ان جي مڪمل درستگي تي شمار نٿو ڪري سگهي. هي دستاويز مبهم، غلط، ۽ غلط فهمي لاءِ کليل ٿي سگهي ٿو. وڏي ٽيمن يا وڏي منصوبن ۾، هي مسئلو انتهائي تيز ٿي سگهي ٿو.

جڏهن ته Python منصوبن جي شروعاتي يا وچولي مرحلن ۾ اڳتي وڌي ٿو، ڪجهه نقطي تي ڪامياب پراجيڪٽس ۽ ڪمپنيون جيڪي پائٿون استعمال ڪن ٿيون، شايد اهم سوال کي منهن ڏئي سگھن ٿا: "ڇا اسان کي هر شيء کي مستحڪم طور تي ٽائيپ ٿيل ٻولي ۾ لکڻ گهرجي؟".

ٽائيپ چيڪنگ سسٽم جهڙوڪ mypy مٿيون مسئلو حل ڪري ڊولپر کي هڪ رسمي ٻولي مهيا ڪندي قسم جي وضاحت لاءِ، ۽ چيڪ ڪرڻ سان ته قسم جا بيان پروگرام جي عمل سان ملن ٿا (۽ اختياري طور تي، انهن جي وجود جي جانچ ڪندي). عام طور تي، اسان اهو چئي سگهون ٿا ته اهي سسٽم اسان جي اختياري تي رکيا آهن جيئن احتياط سان جانچيل دستاويز.

اهڙين سسٽم جي استعمال جا ٻيا فائدا آهن، ۽ اهي اڳ ۾ ئي مڪمل طور تي غير معمولي آهن:

  • ٽائيپ چيڪنگ سسٽم ڪجهه ننڍڙن (۽ نه ايترو ننڍڙو) غلطيون ڳولي سگهي ٿو. هڪ عام مثال آهي جڏهن اهي هڪ قدر کي پروسيس ڪرڻ وساريندا آهن None يا ڪي ٻيون خاص حالتون.
  • ڪوڊ ريفيڪٽرنگ تمام گهڻو آسان ڪيو ويو آهي ڇاڪاڻ ته قسم جي چڪاس وارو نظام اڪثر ڪري بلڪل صحيح آهي ته ڪوڊ کي تبديل ڪرڻ جي ضرورت آهي. ساڳئي وقت، اسان کي اميد ڪرڻ جي ضرورت ناهي ته 100٪ ڪوڊ ڪوريج ٽيسٽ سان، جيڪو، ڪنهن به صورت ۾، عام طور تي ممڪن ناهي. اسان کي مسئلي جي سبب کي ڳولڻ لاء اسٽيڪ ٽريس جي کوٽائي ۾ وڃڻ جي ضرورت ناهي.
  • جيتوڻيڪ وڏن منصوبن تي، mypy اڪثر ڪري سگھي ٿو مڪمل قسم جي چڪاس هڪ سيڪنڊ جي هڪ حصي ۾. ۽ ٽيسٽن تي عملدرآمد عام طور تي ڏهن سيڪنڊن يا ان کان به منٽ وٺندو آهي. ٽائيپ چيڪنگ سسٽم پروگرامر کي فوري موٽ ڏئي ٿو ۽ کيس پنهنجي ڪم کي تيزيءَ سان ڪرڻ جي اجازت ڏئي ٿو. هن کي هاڻي يونٽ ٽيسٽ کي برقرار رکڻ لاءِ نازڪ ۽ سخت لکڻ جي ضرورت ناهي جيڪي حقيقي ادارن کي ٺٺوليون ۽ پيچ سان تبديل ڪن ٿا صرف ڪوڊ ٽيسٽ جا نتيجا تيزيءَ سان حاصل ڪرڻ لاءِ.

IDEs ۽ ايڊيٽرن جهڙوڪ PyCharm يا Visual Studio Code ڊولپرز کي ڪوڊ مڪمل ڪرڻ، غلطي کي نمايان ڪرڻ، ۽ عام طور تي استعمال ٿيندڙ ٻوليءَ جي تعميرات لاءِ سپورٽ مهيا ڪرڻ لاءِ قسم جي تشريح جي طاقت استعمال ڪندا آهن. ۽ اھي ٽائپنگ جا ڪجھ فائدا آھن. ڪجھ پروگرامرز لاء، هي سڀ ٽائپنگ جي حق ۾ بنيادي دليل آهي. اهو ڪجهه آهي جيڪو فوري طور تي لاڳو ٿيڻ کان پوء فائدو حاصل ڪري ٿو. هن قسم جي استعمال جي صورت ۾ هڪ الڳ قسم جي چيڪنگ سسٽم جي ضرورت ناهي جهڙوڪ mypy، جيتوڻيڪ اهو ياد رکڻ گهرجي ته 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

هڪ آسان مادري ٻولي استعمال ڪرڻ هڪ عام طريقو آهي جيڪو سائنسي تحقيق ۾ استعمال ٿيندو آهي. اهو ائين آهي، گهٽ ۾ گهٽ نه ڇو ته اهو توهان کي جلدي تجربا ڪرڻ جي اجازت ڏئي ٿو، ۽ انهي حقيقت جي ڪري ته تحقيق سان جيڪو ڪجهه به ناهي، اهو آسانيء سان نظر انداز ڪري سگهجي ٿو. حقيقي دنيا جي پروگرامنگ ٻوليون پيچيده عملن سان گڏ وڏي پيماني تي واقع ٿينديون آهن، ۽ اهو تجربو کي سست ڪري ٿو. تنهن هوندي به، ڪنهن به نتيجن جي بنياد تي هڪ سادي ٻولي ٿورو مشڪوڪ نظر اچن ٿا، ڇاڪاڻ ته انهن نتيجن کي حاصل ڪرڻ ۾ محقق شايد ٻولين جي عملي استعمال لاء اهم خيالات کي قربان ڪيو هجي.

الور لاءِ منھنجو ٽائيپ چيڪ ڪندڙ ڏاڍو وڻندڙ ​​لڳو، پر مون ان کي حقيقي ڪوڊ سان آزمايو، جيڪو، توھان چئو، الور ۾ لکيل نه ھو. خوشقسمتيءَ سان مون لاءِ، الور ٻولي گهڻو ڪري پٿون جي ساڳي خيالن تي ٻڌل هئي. ٽائيپ چيڪر کي تبديل ڪرڻ ڪافي آسان هو ته جيئن اهو پٿون جي نحو ۽ اصطلاحن سان ڪم ڪري سگهي. هي اسان کي اجازت ڏني ته ڪوشش ڪرڻ جي ڪوشش ڪريو اوپن سورس پٿون ڪوڊ ۾ چيڪ ڪرڻ. ان کان علاوه، مون Alore ۾ لکيل ڪوڊ کي پائٿون ڪوڊ ۾ تبديل ڪرڻ لاءِ هڪ ٽرانسپائلر لکيو ۽ ان کي استعمال ڪيو منهنجي ٽائپ چيڪر ڪوڊ کي ترجمو ڪرڻ لاءِ. ھاڻي مون وٽ ھڪڙي قسم جي چيڪنگ سسٽم لکيل آھي پٿون ۾ جيڪو پٿون جي ھڪڙي سبسٽ کي سپورٽ ڪري ٿو، ڪنھن قسم جي ٻولي! (ڪجهه آرڪيٽيڪچرل فيصلا جيڪي الور لاءِ سمجهه ۾ آيا هئا اهي پيٿون لاءِ ناقص مناسب هئا، ۽ اهو اڃا تائين mypy ڪوڊ بيس جي حصن ۾ قابل ذڪر آهي.)

حقيقت ۾، منهنجي ٽائيپ سسٽم جي حمايت ڪيل ٻولي هن نقطي تي پٿون نه سڏجي سگهي ٿي: اهو پٿون جو هڪ قسم هو پٿون 3 قسم جي تشريح نحو جي ڪجهه حدن جي ڪري.

اهو جاوا ۽ پٿون جي ميلاپ وانگر نظر آيو:

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

ان وقت منهنجو هڪ خيال اهو هو ته هن قسم جي پٿون کي سي، يا شايد 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، ان وقت جي ٻولي جو سڀ کان تازو ورزن، متغير تشريح جي حمايت نه ڪئي. مون گائيڊو سان بحث ڪيو اي ميل ذريعي اهڙن تشريحن جي نحوي ڊيزائن لاءِ مختلف امڪانن تي. اسان استعمال ڪرڻ جو فيصلو ڪيو قسم جي تبصرن لاءِ متغير. هن مقصد جي خدمت ڪئي، پر ڪجهه حد تائين منجهيل هو (Python 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 ڪهاڻي جو سڀ کان دلچسپ حصو شروع ٿئي ٿو.

جاري رکڻ گهرجي…

پيارا پڙهندڙن! جيڪڏھن توھان Python استعمال ڪندا آھيو، مھرباني ڪري ھن ٻوليءَ ۾ توھان جي ترقي ڪيل منصوبن جي ماپ بابت اسان کي ٻڌايو.

پٿون ڪوڊ جون 4 ملين لائينون ٽائپ چيڪ ڪرڻ جو رستو. حصو 1
پٿون ڪوڊ جون 4 ملين لائينون ٽائپ چيڪ ڪرڻ جو رستو. حصو 1

جو ذريعو: www.habr.com

تبصرو شامل ڪريو