پایتون ۳، پایتون را نابود می کند.

سلام

Python 3 is killing Python
The Python community should fork Python 2
اجتماع پایتون باید پایتون ۲ را انشعاب دهد...

دیروز پادکستی از رادیوبوت رو گوش می دادم که در اون، از مقاله ای به قلم آقای Stephen A. Goss می گفتند که مربوط به صحبت ها و بحث هایی می شد که مربوط به چالش های بین پایتون ۲ و ۳ بود. معمولا برای خیلی ها که تازه دنبال یادگیری پایتون اند این موضوع سواله که چرا با توجه به انتشار نسخه ی جدید پایتون (پایتون ۳) هنوز خیلی از برنامه نویس ها از پایتون ۲ استفاده می کنند و ... به نظرم این مقاله، نوشته ی خوبی اومد و اون رو ترجمه کردم. البته من در پایتون صاحب نظر نیستم و یادتون باشه که این نظر شخصی یکی از برنامه نویسان پایتون است و ممکن است خیلی جنبه های دیگر هم وجود داشته باشد که در این مقاله به اون ها اشاره نشده باشد:

خلاصه ی مقاله برای آن هایی که وقت خواندن ندارند:
//خلاصه توسط خودم انجام شده و ممکن است کامل نباشد.

  1. پایتون ۳ بلایی خانمان سوز بود و جلوی رشد پایتون ۲ را نیز گرفت.
  2. مزیت پایتون به داشتن کتابخانه های مختلفی است که برای آن -یعنی پایتون ۲- نوشته شده است. امکان انتقال تمام کتابخانه های پایتون ۳ وجود ندارد و به جز کتابخانه های اصلی بقیه ی کتابخانه ها در پایتون ۳ وجود ندارند.
  3. برای سازگار کردن نرم افزاری که به زبان پایتون ۲ نوشته شده با نسخه ی پایتون ۳ نیازمند هزینه ی بالایی هستیم و این کار برای شرکت ها صرفه نخواهد داشت و ممکن است به صورت کامل به زبان برنامه نویسی دیگری نقل مکان کنند.
  4. استفاده از کتابخانه های عمومی تفاوتی نمی کند و از جذابیت پایتون می کاهد.
  5. با به وجود آمدن پایتون ۳، پایتون ۲ مطرود شده است. پایتون ۳ ویژگی خاصی را به پایتون اضافه نکرده است اما کار انتقال را سخت و کتابخانه ها را محدود کرده است و این موضوع باعث مهاجرت برنامه نویسان به زبان های برنامه نویسی دیگر می شود.
  6. یکی از راه حل های این است که پایتون ۳ را فراموش کنیم و انشعاب جدیدی از پایتون ۲ با نام پایتون ۲.۸ را منتشر کنیم.
  7. پایتون ۲ را باید از نو احیاء کنیم و این کار باید توسط اجتماع پایتون صورت پذیرد. در غیر این صورت پایتون نابود می شود.

 

python 3 is killing python

مقاله به صورت کامل:

پایتون ۳ بدترین بلایی بود که ممکن بود سر جامعه ی پایتون کارها بیاید. آن گونه که به یاد می آورم اولین استفاده ی من از پایتون، بر می گردد به زمانی که مدت زیادی را در ++C صرف می کردم و استفاده از پایتون مثل یک وحی بود. به راحتی توانستم یک ویرایشگر متن باز کنم و برنامه ی من ظرف چند ثانیه یا چند دقیقه - و نه چند ساعت یا چند روز- شروع به کار کرد. زمانی که پایتون ۲.۵ همراه ویژگی های یک زبانی جدید شسته‌رفته و تمیز آمد را به خاطر دارم. من عاشق پایتون ام، اگرچه که متوجه وجود ضعف ها و مشکلات آن نیز هستم اما همه چیز خوب است چون سایر زبان های برنامه نویسی نیز مشکلات خود را دارند. نقطه قوت پایتون چیزی است که آن را جذاب می کند. زمانی که پایتون ۳ تازه آمده بود، رشد پایتون ۲ به صورت تدریجی شود و در پایتون ۳ بسیاری از نقاط قوت پایتون ۲ از دست رفت.

یکی از بزرگ ترین نقاط قوت پایتون ۲ مجموعه کتابخانه های برنامه نویسی ای بود که برای کارهای مختلف به آن اضافه شده بود. پایتون ۳ این مورد را ندارد. درست است که تعداد زیادی از کتابخانه ها به پایتون ۳ منتقل شده اند اما ده ها برابر این تعداد، منتقل نشده است و این موضوع در کتابخانه های کوچک به وفور یافت می شود. برای مثال، زمانی که احتیاج دارید X را پارس و ارسال کنید و X از نوع رایجی مثل YAML یا JSON نیست به مشکل خواهید خورد. شانس زیادی در پایتون ۲ وجود داشت که از قبل برای این کار کتابخانه ای نوشته شده باشد؛ کتابخانه ای که به پایتون ۳ انتقال پیدا نکرده است. علاوه بر آن، تفاوت بنیادی بین رشته-بایت ها در پایتون ۲ (str) و رشته بایت ها در پایتون ۳ (bytes) کار انتقال و مهاجرت به پایتون ۳ را سخت می کند، تبدیل بسیار سخت خواهد بود و در حقیقت برای داشتن سازگاری بین پایتون ۲ و پایتون ۳ نیازمند استفاده از ترفندهای مختلفی خواهیم بود. بنابراین انتخاب شما محدود خواهد بود، یا باید برنامه خود را با استفاده از پایتون ۲ (که یک زبان مطرود است) بنویسید و کتابخانه های آن (همراه با تمام متعلقات آن) را تبدیل کنید که به ده ها برابر زمان احتیاج است یا از زبان دیگری استفاده کنید که آن زبان نیز مجموعه ی غنی ای از کتابخانه ها را داشته باشد اما دچار مشکلاتی که بین پایتون ۲ و ۳ است، نباشد. انتخاب #۲  راهی است که مسلما مورد قبول جامعه قرار نگرفته است. چون اگر غیر از این بود باید محصولات زیادی بر مبنای پایتون ۳ می داشتیم و کتابخانه های زیادی از پایتون ۲ منتقل و تبدیل می شدند. هیچ کدام از این ها اتفاق نیفتاده و تعداد زیادی از مردم یا برنامه های خود را با همان پایتون ۲ می نویسند یا به زبان برنامه نویسی دیگری که باعث کشته شدن آن ها نشود(!) روی آورده اند.

نقطه قوت دیگر پایتون۲ این بود که معمولا برنامه های نوشته شده به خوبی در نسخه های بعدی پایتون و بدون نیاز به تغییر زیادی کار می کرد. اگر شرکت شما برنامه ی خود را با پایتون ۲ نوشته باشد ( که خیلی ها این کار را می کنند) برای تبدیل آن به پایتون ۳ نیازمند هزینه ی بالایی خواهید بود. چرا که احتمالا نیازمندی های شما با توجه به تعداد زیادی از کتابخانه هایی که منتقل نشده اند، بسیار زیاد خواهد شد. هیچ دلیل تجاری عقلانی ای برای از دست دادن هزاران یا حتی میلیون ها دلار برای اختصاص زمانی جهت مهاجرت به پایتون ۳ وجود ندارد. ممکن است هزینه ی اینکه از کسی بخواهید که تمام کدهای شما را به زبان برنامه نویسی روبی ببرد،‌ ارزان تر تمام شود. در این شرایط حتی اگر بخواهید برنامه ی خود را به شیوه ی دیگری بازنویسی کنید، آیا انتخاب شما پایتون ۳ خواهد بود؟ خیر.

کتابخانه های محبوبی که در پایتون ۲ و ۳ پشتیبانی می شوند معمولا در زیرمجموعه ای از زبان ها (language subset) نوشته شده اند که روی هر دو پلتفرم قابل اجرا باشند. مثل یکی از کتابخانه های مورد علاقه ی من در پایتون به نام SQLAlchemy. در خصوص جنگو نیز تا حدودی به همین شکل است.استفاده از این زیرمجموعه ی زبان ها -که من آن ها را پایتون X می نامم- خیلی جالب نخواهد بود و عموما قدرت آن ها از پایتون ۲ یا پایتون ۳ کمتر است. چه جذابیتی در انتقال کتابخانه های پایتون ۲ به پایتون X وجود دارد؟ اصلا در آن هیچ سرگرمی و جذابیتی وجود ندارد و این موضوع آن را غم انگیز می کند، چرا که چیزی که پایتون را بسیار دوست داشتنی می کرد،‌ جنبه سرگرمی آن بود.

متاسفانه پایتون ۲ مطرود شده است. پایتون ۳ نامناسب است. تغییرات پایتون ۳، کم است. پایتون ۳ بیشتر از آنچه که به دست آورده، مواردی را از دست داده است. طی چند ماه گذشته برنامه های کاربردی و سرویس هایی را با استفاده از پایتون ۳ ساخته ام و این موضوع اعصاب من را خورد نکرد. این کار بسیار شبیه نوشتن نرم افزار در پایتون ۲ است با این استثناء که تعداد کتابخانه های کمکی فعال، بسیار کمتر است. واقعا هیچ چیز خاص و ویژه ای در آن وجود ندارد. جامعه گسترش دهندگان پایتون فکر می کردند که طی چند سال گذشته مردم به پایتون ۳ مهاجرت خواهند کرد اما مشخصا اتفاقی که افتاد این بود که مردم به جای مهاجرت به نسخه ی جدید پایتون به زبان های جدید دیگری نقل مکان کردند. (یا دوباره به زبان های قدیمی روی آوردند) بعضی از این زبان ها ویژگی های خوب خود را دارند، مثل قدرت آن ها در نوشتن برنامه های سیستمی، انطباق الگوها (pattern matching)، کارآیی بهتر، نخ بندی (threading) و همزمانی بهتر، FFI ساده تر [مترجم: FFI مخفف Foreign Function Interface بوده و مکانیسمی است که وقتی برنامه ای به زبانی نوشته می شود، می تواند روتین هایی را فراخوانی کند و یا از سرویس هایی که به زبان های دیگر نوشته شده استفاده کند، لانداهای زیباتر [مترجم: lambdas] و ...

یکی از راه حل ها این است که انشعاب جدیدی از پایتون ۲.۷ ایجاد شود و به توسعه ی این زبان ادامه دهیم چراکه اضافه کردن ویژگی ها به شیوه ای که با نسخه های قبلی سازگار باشد بسیار سخت و غیر ممکن است (به خاطر محدودیت های مالی) برنامه های پایتون ۲ می توانند به وضعیت تکاملی و رشد خود ادامه دهند و این موضوع برای مردم و شرکت هایی که زمان زیادی را برای توسعه ی آن ها صرف کرده اند بسیار با ارزش خواهد بود. کار درست همین است (در حقیقت، بهترین راه می تواند این باشد که Gudio و سایر رهبران در اجتماع پایتون به جای اینکه مجبور به انشعاب دهی باشند، به صورت رسمی این کار را انجام می دادند.) ما به ویژگی هایی از پایتون ۳ احتیاج داریم که بتوانیم به پایتون ۲ بازگردیم و انتشار پایتون ۲.۸ نیز باید صورت پذیرد. افراد کمی که برای نوشتن نرم افزارهای جدید خود به صورت خالص از پایتون ۳ استفاده کرده اند، می توانند با استفاده از ابزارهایی مثل 3to2 آن را با نسخه ی ۲.۸ سازگار کنند. پایتون ۳ باید از دور خارج شود و این کار به خاطر پشتیبان کننده های کتابخانه های پایتون است و آن ها می توانند از این پس به جای پایتون X تنها از پایتون ۲ استفاده کنند.

راه های دیگری نیز وجود دارد اما بدیهی است که کار درست این است که دوباره پایتون ۲ را احیاء کنند و هیچ راه حلی از این بهتر نیست. احیاء دوباره ی پایتون ۲ به صورت رسمی اتفاق نخواهد افتاد چراکه افرادی که صاحب قدرت هستند به کاربران پایتون ۲ اهانت بزرگی کرده اند. اگر اجتماع پایتون ساکت بماند و پایتون ۲ را دوباره احیاء نکند، بعد از گذشت چند سال، پایتون ۳ به عنوان نسخه ی استاندارد پایتون شناخته می شود و کتابخانه های زیادی به طور کامل به آن مهاجرت خواهند کرد (که مشخصا بیشتر آن ها هرگز این کار را نخواهند کرد) و سرمایه های زیادی از دست خواهد رفت. در آن زمانی اجتماع پایتون از بین خواهد رفت و به صورت غم انگیزی کوچک خواهد شد و درخشش سابق خود را از دست خواهد داد. زبان پرل را ببینید که مردم چگونه از آن خارج شدند.