4 ویژگی کلیدی که شما در زبان برنامه نویسی پایتون نخواهید دید

شنبه 31 اردیبهشت 1401

زبان برنامه نویسی پایتون احتمالا برخی از ویژگی ها را تا چندسال نخواهد داشت، در این مطلب بیشتر درباره این ویژگی ها در زبان برنامه نویسی پایتون صحبت میکنیم

 4 ویژگی کلیدی که شما در زبان برنامه نویسی پایتون نخواهید دید

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

یک نسخه statically typed و کامپایل شده از زبان برنامه نویسی پایتون

برخی از توسعه دهندگان رویای نسخه ای از زبان برنامه نویسی پایتون را می بینند که از statically typed برای کامپایل کردن به کدهای ماشین نیتیو استفاده می کند. به هر حال قابلیت typing منعطف منشا بسیاری از کدهایی است که به زبان برنامه نویسی پایتون نوشته می شوند و statically typed می تواند به این موضوع پایان دهد. علاوه بر این باید دقت داشته باشید که قابلیت statically typed می تواند به توسعه دهندگان اجازه دهد تا گارانتی های بهتری را در کدهای خود قرار دهند. پس موضوع چیست که این ویژگی به پایتون اضافه نمی شود؟

با وجود این که زبان پایتون دارای قابلیت های زیادی در حوزه typing است اما این ویژگی ها به شکلی طراحی شده اند که زبان را برای تجزیه و تحلیل استاتیک در زمان ویرایش کدها و با استفاده از ابزارهای linting سازگارتر کنند. تنها پروژه های شخص ثالث مانند pydantic از ابزارهای typing در زمان اجرا استفاده می کنند. دقت داشته باشید که ران تایم زبان پایتون به خودی خود از این ابزارها بهره ای نمی برد.

تبدیل کردن پایتون به نسخه کامپایل شده

یکی از اهداف صریحی که در PEP 484 نیز بیان شده است پیشنهاد ارتقای پایتون به نسخه type hinting است که البته در این نسخه همواره استفاده از قابلیت های type hinting به صورت اختیاری خواهد بود. دقت داشته باشید که این زبان همچنان یک زبان dynamically typed باقی خواهد ماند و نویسندگان و سازندگان این زبان نیز علاقه ای به اجباری کردن قابلیت type hinting در این زبان ندارند. توسعه دهندگانی که واقعا یک نسخه statically-typed از این زبان را می خواهند می توانند از Cython یا mypyc استفاده کنند اما حتی در این پروژه ها نیز مشکلات و چالش هایی را تجربه خواهند کرد. در خصوص Cython باید بدانید بیشترین میزان افزایش عملکرد ناشی آن از استفاده از انواع و ساختارهای C و کاهش استفاده از ران تایم زبان پایتون است. به زبان ساده می توان گفت کامپایل کردن سریع زبان برنامه نویسی پایتون بدون به خطر انداختن پویایی آن کاری بسیار دشوار خواهد بود. البته باید دقت داشته باشید برداشتن بخش هایی که نیازی به داینامیک بودن ندارند، جداسازی و سرعت بخشیدن به این بخش ها می تواند بسیار ساده و راحت باشد.

lambdaهایی که در چند خط بتوان از آنها استفاده کرد

عبارت های lambda که در زبان برنامه نویسی پایتون مورد استفاده قرار می گیرند یا توابع anonymous به صورت عمدی در این زبان محدود شده اند. آنها تنها به شما اجازه می دهند تا یک عبارت خاص را به عنوان بدنه تابع خود تعریف کنید( دقت داشته باشید که در این جا منظور از یک عبارت هر آن چیزی است که در سمت راست علامت اختصاص دهی = قرار می گیرد). توسعه دهندگانی که از زبان هایی مانند جاوا اسکریپت به پایتون می آیند اغلب تقاضا می کنند که قابلیت توابع anonymous چند خطی نیز به این زبان برنامه نویسی اضافه شود.

دلایل عدم اضافه شدن lambdaهای چند خطی

خالق این زبان برنامه نویسی یعنی Guido van Rossum مدت ها پیش این ایده که می توان از لامبداهای چند خطی در این زبان استفاده کرد را کنار گذاشت. او در سال 2006 از طریق یک ایمیل دلیل عدم استفاده از این نوع لامبداها را به شکل زیر توضیح می دهد:

لامبداهایی که در چند خط تعریف می شوند قدرت بسیار کمی را به زبان برنامه نویسی پایتون می افزایند ولی هزینه ای که دارند این است که پایتون را به زبانی که قدرت خوانایی کمتری دارد تبدیل می کنند. در حال حاضر هیچ سینتکس مناسبی برای استفاده در این شرایط ارائه نشده است که به زیبایی با سایر طراحی های سینتکسی این زبان برنامه نویسی سازگار شود. برای تبدیل یک لامبدا چند خطی به یک تابع کامل تلاش بسیار کمی مورد نیاز است که این مسئله نیز ممکن است از دیگر دلایل عدم استفاده از لامبداهای چند خطی باشد. نیازی به توضیح نیست که آینده نه چندان روشنی برای لامبدا های چند خطی در پایتون می توان متصور شد.

زبان برنامه نویسی پایتون بدون GIL

قابلیت Global Interpreter Lock که به اختصار GIL نیز نامیده می شود مدت هاست که مشکلات زیادی را برای علاقه مندان به زبان برنامه نویسی پایتون به وجود آورده است و به هیچ وجه باعث جلب رضایت آنها نشده است. GIL ابزاری است که فعالیت های مختلف را در ران تایم پایتون هماهنگ سازی می کند تا دسترسی به اشیا مختلف را برای شما serialize کرده و وضعیت Global را برای شما مدیریت کند. یک نقطه ضعف بسیار مهم GIL این است که ران تایم پایتون را در عمل به صورت یک Thread منحصر به فرد در می آورد. بنابراین اگر به عنوان یک توسعه دهنده قصد دارید موازی سازی واقعی را با Threadها انجام دهید باید نسخه های مختلفی از مفسر پایتون را راه اندازی کنید و Threadهای جداگانه را روی هر یک از آنها اجرا کنید. زبان برنامه نویسی پایتون بدون GIL می تواند موازی سازی بهینه تری را به توسعه دهندگان این زبان ارائه دهد و باعث بهبود عملکرد شود.

چرا برداشتن ویژگی GIL از پایتون بعید به نظر می رسد؟

پیشنهادهای مختلفی برای حذف کردن GIL از زبان برنامه نویسی پایتون ارائه شده است. اکثر این پیشنهادات سازگاری رو به عقب را در زبان برنامه نویسی پایتون از بین می برند یا این که پایتون را برای انجام عملیات هایی با یک Thread کندتر می کنند. یکی از تلاش هایی که در این زمینه صورت گرفته است GILectomy بود که مشکلات عملکردی بسیار زیادی را در این زبان برنامه نویسی به وجود آورد. Python 3.x برای بهبود عملکرد یکپارچه خود GIL را دوباره راه اندازی کرد ولی برای حفظ سازگاری عقب گرد به هیچ وجه اقدام به حذف کردن این ویژگی نکرد.

نکات پایانی درباره GIL

به دلیل نگرانی های زیادی که در این زمینه وجود دارند GIL ممکن است به کار خود در این زبان ادامه دهد اما امکاناتی نیز برای بهبود عملکرد آن باید اضافه شود. یکی از راهکارهایی که برای انجام این کار وجود دارد اجازه دادن به موازی سازی بهتر در ران تایم زبان برنامه نویسی پایتون و اجرای چندین مفسر در یک زمان واحد است. برای تحقق بخشیدن به این پیشنهاد تغییرات قابل توجهی در بخش های داخلی این زبان برنامه نویسی مورد نیاز است که از جمله آنها می توان به بازنگری در بخش هایی از API زبان سی در پایتون اشاره کرد. دقت داشته باشید که بسیاری از ماژول های شخص ثالث در این زبان به API زبان سی وابسته هستند و حتما باید به روز نگه داشته شوند.

پیشنهاد جدیدتری که در این زمینه وجود دارد مربوط به PEP 684 است که ایده چند مفسر را توسعه می دهد تا هر مفسر فرعی بتواند از GIL مربوط به خود استفاده کند.

یک کامپایلر JIT نیتیو زبان برنامه نویسی پایتون

یکی از روش های اثبات شده برای افزایش سرعت زبان برنامه نویسی پایتون در عین حفظ انعطاف پذیری این زبان استفاده از یک کامپایلر  just-in-time است که به اختصار به آن JIT نیز گفته می شود. کامپایل  just-in-time شامل تجزیه و تحلیل کد در زمان اجرا است و کامل آن نیز به صورت اختیاری می باشد. به این معنا که کدهای شما بر اساس رفتاری که در زمان اجرا از خود نشان می دهند کامپایل خواهند شد.

مشکلات کامپایلرهای JIT

کامپایلرهای JIT در حال حاضر نیز در زبان برنامه نویسی پایتون وجود دارند. PyPy رایج ترین و بهترین نمونه توسعه یافته آن است که در ساختار برنامه ها و پروژه های طولانی مدت مورد استفاده قرار می گیرد. این ابزار باعث می شود تا ارتباط با سرور سریع تر شده و عملکرد برنامه شما نیز به میزان زیادی بهینه سازی شود. با این حال JIT هنوز مشکلاتی را در جاوا ایجاد می کند که باعث شده تا پیشنهادات زیادی در این زمینه برسد. یک کامپایلر نیتیو در این زمینه می تواند بسیاری از این مشکلات را حل کند ولی آیا در آینده این اتفاق خواهد افتاد؟ این اتفاقی است که بسیاری از افراد امیدوار به آن هستند. 

 

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان
  • Python
  • 872 بازدید
  • 1 تشکر

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید