تفاوت پیاده‌سازی‌های مختلف پایتون

توجه: این مطلب ترجمه(با اندکی تلخیص) از مطلبی با همین نام در سایت geeksforgeeks است.

وقتی در مورد پایتون صحبت می‌کنیم معمولا فقط در مورد زبان حرف نمی‌زنیم بلکه در مورد پیاده‌سازی هم صحبت می‌کنیم. پایتون درواقع مشخصاتِ یک زبان است که می‌تواند به روش‌های بسیار متعددی پیاده‌سازی شود.

پیش‌زمینه

قبل از جلوتر رفتن اجازه دهید تفاوت بین بایت‌کد(byte code) و کد ماشین(machine code or native code) را درک کنیم.

کد ماشین(machine code or native code)

کد ماشین مجموعه دستورالعمل‌هایی هست که مستقیما توسط پردازنده‌مرکزی(CPU) اجرا می‌شود. هر دستورالعمل، یک کار یکتا انجام می‌دهد، مثل لودِ اطلاعات یا عملیات منطقی روی اطلاعات در حافظه CPU. تقریبا تمام زبان‌های سطح بالا مثل C سورس‌کد را با کمک کامپایلرها، لینکر(linker)ها و لودر(loader)ها به کد قابل‌اجرا برای ماشین ترجمه می‌کنند. هر پردازنده یا خانواده پردازنده مجموعه‌دستورات منحصر به خود را دارد.

بایت‌کد (Byte-code)

بایت‌کد هم نمایش دودویی‌است که توسط ماشین‌مجازی(نه مستقیما توسط CPU) اجرا می‌شود. ماشین مجازی(که برای ماشین‌های متفاوت جدا توسعه داده شده) نمایش دودویی(همان بایت‌کد) را به دستورات خاص ماشین تبدیل می‌کند. یکی از زبان‌هایی که از مفهوم byte-code استفاده می‌کند جاوا است.

کد ماشین بسیار سریع‌تر از بایت‌کد است ولی بایت‌کد قابل‌حمل (portable) و ایمن‌تر از کد ماشین است.

پیاده‌سازی‌های محتلف پایتون

پیاده‌سازی اصلی: Cpython

پیاده‌سازی پیش‌فرض زبان برنامه‌نویسی پایتون، Cpython است. همان طور که از نام آن مشخص است با زبان C نوشته شده‌است. Cpython برنامه‌ی پایتون را به بایت‌کد سطح میانی (intermediate byte-code)کامپایل می‌کند، که توسط ماشین‌مجازی Cpython اجرا می‌شود. Cpython با کتاب‌خانه استاندارد بزرگی که با ترکیب C و python نوشته‌شده است، عرضه می‌شود. Cpython بیش‌ترین سطح سازگاری با پکیج‌های پایتون و ماژول‌های توسعه‌ی سی (C extension modules) دارد. همه‌ی نسخه‌های زبان برنامه‌نویسی پایتون با C پیاده‌سازی می‌شوند چون Cpython پیاده‌سازی مرجع است.

برخی پیاده‌سازی‌های پایتون که بر اساس هسته‌اجرایی(run-time core) Cpython ولی با رفتار‌ها یا قابلیت‌های گسترش‌یافته در برخی‌جنبه عبارت‌اند از Stackless python و wpython و Micropython.

نکته: Stackless python یک نسخه از Cpython است با تمرکز بر concurrency با استفاده‌از tasklet ها و channel‌ها.

پیاده‌سازی‌های دیگر

پیاده‌سازی‌های دیگری از python هم در دسترس هستند. تنها پیاده‌سازی‌هایی که به عنوان سازگار با نسخه‌های مشخص پایتون شناخته شده‌اند عبارت‌اند از:‌IronPython و Jython و PyPy.

اول: Jython

جایتون یک پیاده‌سازی جاوا است که می‌تواند روی بستر جاوا اجرا شود. برنامه‌های جایتون از کلاس‌های جاوا به جای ماژول‌های پایتون استفاده می‌کنند. جایتون به بایت‌کد کامپایل می‌شود که در نهایت توسط ماشین‌مجازی جاوا اجرا شود. جایتون استفاده از کلاس‌های کتاب‌خانه‌ای جاوا(java class libraries)را از برنامه پایتون میسر می‌کند. جایتون در مقایسه با Cpython کند است و با کتاب‌خانه‌های Cpython سازگار نیست.

دو: IronPython

یک پیاده‌سازی پایتون که در زبان سی‌شارپ نوشته شده است و فریمورک .NET از مایکروسافت را هدف قرار داده‌است.. مشابه جایتون، از ماشین مجازی دات‌نت استفاده می‌کند. IronPython می‌تواند از فریم‌ورک دات‌نت و کتاب‌خانه‌های پایتون استفاده کند و دیگر زبان‌های دات‌نت می‌توانند از کد‌های پایتون به طور کارآمد استفاده کنند. IronPython در برنامه‌های پایتون که از thread ها و چندهسته استفاده می‌کنند بهتر عمل می‌کند. ازآنجا که به JIT (کامپایلر در زمان اجرا) مجهز است و همچنین فاقد GIL(قفل مفسر سراسری) است.

سه: PyPy

اگر می‌خواهید کدتان سریع‌تر اجرا شود، شما احتمالا فقط باید از PyPy استفاده کنید. (از خیدو ون روسم سازنده پایتون)

پایتون یک زبان پویاست. گفته می‌شود پایتون کند است چون پیاده‌سازی پیشفرض Cpython سورس‌کد پایتون را به byte-code کامپایل می‌کند که در مقایسه با کد ماشین (machine code or native code) کندتر است. اینجا جایی‌است که PyPy وارد می‌شود.

در واقع PyPy یک پیاده‌سازی از زبان برنامه‌نویسی پایتون است که به زبان Python نوشته شده است. مفسر به زبان RPytohn (یک زیرمجموعه از پایتون) نوشته شده است.

پای‌پای از JIT (کامپایل زمان اجرا) استفاده می‌کند. به زبان ساده JIT از شیوه کامپایل کردن استفاده می‌کند تا سیستم تفسیر کاراتر و سریع شود. به زبان ساده JIT این امکان را می‌دهد که سورس‌کد به زبان ماشین کامپایل شود که آن را بسیار سریع می‌کند.

پای‌پای همچنین به صورت پیش‌فرض با پشتیبانی از Stackless mode عرضه می‌شود که امکان micro-threadها برای هم‌روندی(concurrency)های بزرگ را فراهم می‌کند. گفته می‌شود PyPy هفت و نیم برابر سریع‌تر از Cpython است.

پیاده‌سازی‌های دیگر Python عبارت‌اند از: CLPytohn و Pyston و Psyco و Cython و IPytohn.

منابع:

https://www.geeksforgeeks.org/difference-various-implementations-python/
https://wiki.python.org/moin/PythonImplementations
http://pypy.org/
https://wiki.python.org/moin/IronPython
http://www.jython.org/