بررسی عملکرد مفسر زبان پایتون

«زبان برنامه‌نویسی پایتون» (Python Programming Language)، یک زبان برنامه‌نویسی «مفسری» (Interpreted) محسوب می‌شود. مفسر زبان پایتون دستورالعمل‌ها را خط به خط و بر اساس ترتیب آن‌ها (در مجموعه کدهای نوشته شده توسط برنامه‌‌نویس)، می‌خواند، ارزیابی می‌کند و خروجی‌های حاصل از اجرای دستورات را در خروجی نمایش می‌دهد. تمام این کارها توسط «مفسر» (Interpreter) انجام می‌شود. یکی از سؤالاتی که برنامه‌نویسان در طول توسعه برنامه‌های کاربردی با آن دست و پنجه نرم می‌کنند این است که کدام نسخه از مفسر پایتون برای کد نویسی برنامه مد نظر آن‌ها مناسب است.چنین رویه‌ای در اجرای کدهای برنامه‌ها، برخلاف نحوه اجرای برنامه‌ها توسط زبان‌های «کامپایلری» (Compiler) است؛ در زبان‌های کامپایلری، تمامی کدها وارد کامپایلر می‌شوند و یک «واحد ترجمه» (Translation Unit)، کدهای نوشته شده به یک زبان برنامه‌نویسی کامپایلری را به دستورالعمل‌های خاصی ترجمه می‌کند و دستورالعمل‌های خاص قابل اجرا توسط ماشین را خروجی می‌دهد.مفسر یک برنامه کامپیوتری است که برای اجرای مستقیم دستورات برنامه‌ها مورد استفاده قرار می‌گیرد. بیشتر زبان‌هایی که از مفسر برای اجرای دستورات خود استفاده می‌کنند، «زبان‌های برنامه‌نویسی سطح بالا» (High-Level Programming Languages) هستند. مفسر، برنامه‌های نوشته شده به زبان‌های سطح بالا را به یک زبان «میانجی» (Intermediate) ترجمه و سپس اجرا می‌کند. همچنین، برخی از مفسرها، «کدهای منبع» (Source Code) سطح بالا را «تجزیه و تحلیل» (Parse) و سپس، دستورات را به طور مستقیم اجرا می‌کنند؛ اجرای دستورات، به صورت خط به خط یا دستور به دستور انجام می‌شود.تفاوت کامپایلر و مفسرزبان‌های برنامه‌نویسی معمولا به دو شیوه پیاده‌سازی می‌شوند؛ زبان‌های برنامه‌نویسی کامپایلری و زبان‌های برنامه‌نویسی مفسری.کامپایلر، یک برنامه کامپیوتری ویژه است که دستورات (کد‌ها یا دستورالعمل‌ها) نوشته شده به یک زبان برنامه‌نویسی خاص را پردازش و آن‌ها را به «زبان ماشین» (Machine Language) یا کدهایی که توسط «پردازنده» (Processor) کامپیوتر قابل اجرا باشد تبدیل می‌کند. معمولا، پس از اینکه برنامه‌نویس کدهای مرتبط با برنامه خود را می‌نویسد (کدهای منبع)، در زمان اجرای این کدها، کامپایلر ابتدا تمامی دستورات نوشته شده را خط به خط، از لحاظ نحوی (Syntactically) تجزیه و تحلیل می‌کند. سپس، در یک یا چند مرحله متوالی (که به آن‌ها Pass گفته می‌شود) کد خروجی نهایی را تولید می‌کند.در این چند مرحله متوالی، کامپایلر اطمینان حاصل می‌کند که پیوستگی کدها در خروجی نهایی حفظ شده است. معمولا به خروجی مرحله کامپایل کردن کدها، «کد شیء» (Object Code) یا «ماژول شیء» (Object Module) گفته می‌شود (شیء نامبرده شده در این اصطلاحات، با مفهوم شیء در «برنامه‌نویسی شیءگرا» (Object Oriented Programming) متفاوت است). کد شیء (Object Code) یا ماژول شیء (Object Module)، کد ماشینی است که پردازنده‌‌های سیستم‌های کامپیوتری قادر به اجرای خط به خط آن‌ها هستند.همانطور که از نام آن‌ها مشخص است، مفسر در زبان‌های برنامه‌نویسی، کد برنامه‌نویسی سطح بالا را به کدی که توسط ماشین قابل فهم باشد (کد ماشین) تفسیر یا تبدیل می‌کند. همچنین، این امکان وجود دارد که مفسر، کد برنامه‌نویسی سطح بالا را به کدهای یک زبان میانجی، که به راحتی توسط ماشین قابل اجرا است، تفسیر یا تبدیل کند. مفسر، هر یک از دستورات موجود در کدهای برنامه را خوانده و به طور مستقیم تبدیل یا اجرا می‌کند.بنابراین تفاوت مهم میان کامپایلر و مفسر این است که کامپایلر، یک کد منبع سطح بالا را به کد محلی کامپایل شده تبدیل می‌کند؛ کدی که به طور مستقیم توسط «سیستم عامل» (Operating System) قابل اجرا است. این در حالی است که مفسر، کد برنامه‌نویسی سطح بالا را به کدی که توسط ماشین قابل فهم باشد یا کدهای یک زبان میانجی، تفسیر یا تبدیل می‌کند. از همه مهم‌تر، کدهای نوشته شده در زبان‌های برنامه‌نویسی کامپایلری، به طور کامل پردازش و در نهایت اجرا می‌شود، ولی کدهای نوشته شده توسط زبان‌های مفسری، خط به خط یا دستور به دستور اجرا می‌شوند.در بیشتر موارد، از آنجایی که خروجی‌های کامپایلر نسبت به تفسیر خط به خط کدها توسط مفسر، سریع‌تر اجرا می‌شوند، مطلوب‌تر هستند. با این حال، از آن‌جایی که در زبان‌های برنامه‌نویسی مفسری، تفسیر کدهای برنامه به صورت خط به خط یا دستور به دستور انجام می‌شود، این قابلیت برای برنامه‌نویسان و توسعه‌دهندگان وجود دارد تا تفسیر کدهای برنامه را در میانه اجرا متوقف کنند تا بتوانند کدها را تغییر یا اشکال‌زدایی کنند.انتخاب مفسر مناسب برای پایتونزمانی که نوبت به انتخاب مفسر مناسب برای اجرای یک برنامه نوشته شده به زبان پایتون می‌رسد، سؤالی که ناخودآگاه، ذهن برنامه‌نویسان و توسعه‌دهندگان را به خود معطوف می‌کند این است که «آیا باید مفسر پایتون برای نسخه 2.7 انتخاب شود یا نسخه 3.7؟». پیش از اینکه معیارهای لازم برای انتخاب مفسر نسخه 2.7 یا نسخه 3.7 برای اجرای برنامه‌های نوشته شده به زبان برنامه‌نویسی پایتون مورد بررسی قرار بگیرد، ذکر نکات زیر خالی از لطف نیست:هنوز بخش قابل توجهی از برنامه‌های کاربردی و کتابخانه‌های برنامه‌نویسی که توسط زبان پایتون نوشته شده‌اند و توسط جامعه برنامه‌نویسان و توسعه‌دهندگان مورد استفاده قرار می‌گیرند، از نسخه 2.7 پایتون استفاده می‌کنند. پس از عرضه نسخه 3 پایتون، مهاجرت این دسته از برنامه‌های کاربردی و کتابخانه‌های برنامه‌نویسی به سمت استفاده از نسخه 3 پایتون آغاز شده است. با این حال، از آنجایی که لیست برنامه‌های کاربردی و کتابخانه‌های برنامه‌نویسی نوشته شده توسط نسخه 2.7 پایتون بسیار گسترده است، این فرایند کمی زمان‌بر خواهد بود.بنیاد نرم‌افزاری پایتون (Python Software Foundation) تنها تا سال 2020 از نسخه 2.7 پایتون پشتیبانی و بسته‌های امنیتی برای آن منتشر می‌کند.برند تجاری پایتون، هر دو نسخه 2.7 و 3.7 زبان برنامه‌نویسی پایتون را شامل می‌شود.مفسر پیشنهادی برای اجرای برنامه‌های پایتونبه طور کلی، استفاده از مفسر نسخه 3.7 پایتون برای اجرای برنامه‌ها، ارجحیت به مراتب بیشتری نسبت به استفاده از مفسر نسخه 2.7 پایتون دارد. بنابراین به کاربران، برنامه‌نویسان و توسعه‌دهندگان برنامه‌های کاربردی توصیه می‌شود، در صورتی که هنوز از مفسر نسخه 2.7 پایتون استفاده می‌کنند، سریعا نسبت به به‌روزرسانی مفسر پایتون به نسخه 3.7 اقدام کنند. در ادامه، برخی از توصیه‌های مهم در مورد استفاده از نسخه‌های مختلف (نسخه 2.7 یا نسخه 3.7) مفسر پایتون ارائه شده است:اکیدا توصیه می‌شود که از نسخه 3.7 مفسر پایتون برای کد نویسی برنامه‌های کاربردی جدید استفاده شود.به کاربران یا برنامه‌نویسان مبتدی که به دنبال یادگیری زبان برنامه‌نویسی پایتون هستند، توصیه می‌شود که برنامه‌نویسی به وسیله قواعد دستوری و قابلیت‌های نسخه 3.7 پایتون را یاد بگیرند و حتما از نسخه 3.7 مفسر پایتون برای اجرای برنامه‌ها استفاده کنند؛ با این حال، آشنا شدن با قواعد دستوری و قابلیت‌های نسخه 2.7 پایتون می‌تواند مفید باشد و دانش برنامه‌نویس از قواعد کد نویسی پایتون را بالا ببرد.اگر از نرم‌افزاری استفاده می‌کنید که پیش از عرضه نسخه 3 مفسر پایتون عرضه شده است، این نرم‌افزار بدون شک از نسخه 2.7 مفسر پایتون برای اجرای دستورات و کدهای برنامه استفاده می‌کند؛ بنابراین، در صورتی که به روز رسانی جدیدی از نرم‌افزار ارائه نشده باشد (نسخه‌ای از نرم‌افزار که با نسخه 3.7 مفسر پایتون برنامه‌نویسی شده باشد)، بهتر است که از نسخه 2.7 مفسر پایتون استفاده کنید.یک سیاست منطقی و صحیحی که برنامه‌نویسان و توسعه‌دهندگان حرفه‌ای هنگام توسعه کتابخانه‌های برنامه‌نویسی «منبع باز» (Open Source) اتخاذ می‌کنند این است که همزمان برای نسخه 2.7 و نسخه 3.7 مفسر پایتون کد نویسی انجام می‌دهند. در صورتی که «کتابخانه‌های برنامه‌نویسی» (Libraries) در حال توسعه، تنها برای یکی از نسخه‌های مفسر پایتون کد نویسی شوند، حجم زیادی از کاربران زبان پایتون که از نسخه 2.7 پایتون استفاده می‌کنند، قادر به استفاده از این کتابخانه نخواهند بود. با این حال، طی سال‌های آینده و با همه گیر شدن استفاده از نسخه 3 زبان پایتون به عنوان مفسر پیش‌فرض، برنامه‌نویسان و توسعه‌دهندگان قادر خواهند بود تا کتابخانه‌های خود را تنها برای یکی از نسخه‌های مفسر پایتون توسعه دهند.نسخه 3 مفسر پایتوندر صورتی که کاربر، برنامه‌نویس یا توسعه‌دهنده، جهت توسعه برنامه‌ کاربردی، نیاز به استفاده از زبان برنامه‌نویس پایتون دارد و یا تمایل دارد که از این زبان جهت کد نویسی برنامه کاربردی مد نظر خود استفاده کند، توصیه می‌شود که از نسخه 3 (هم اکنون نسخه 3.7 مفسر پایتون، نسخه پایدار پایتون محسوب می‌شود) مفسر پایتون برای این کار استفاده کنند. دلیل دیگر استفاده از نسخه 3 مفسر پایتون، به‌روز رسانی ویژگی‌های امنیتی، از بین بردن باگ‌ها و اشکالات منطقی و ارتقاء عملکرد کتابخانه‌های استاندارد زبان پایتون در به‌روزرسانی‌های متوالی است. همچنین، به‌روزرسانی و پشتیبانی امنیتی از نسخه 2 مفسر پایتون، تنها تا سال 2020 ادامه پیدا می‌کند.بنابراین، تنها در صورتی به سراغ استفاده از نسخه 2.7 مفسر پایتون (جهت کد نویسی برنامه‌های کاربردی) بروید که یکی از شرایط زیر برقرار باشد:برای کد نویسی برنامه‌های کاربردی، از منابع، کدها و کتابخانه‌هایی استفاده شده است که از نسخه 2.7 مفسر پایتون به عنوان «پاید کد» (Code-Base) استفاده می‌کنند.برخی از کتابخانه‌های معروف زبان پایتون، تنها از نسخه 2 مفسر پایتون پشتیبانی می‌کنند. در صورتی که برای کد نویسی برنامه کاربردی، نیاز به استفاده از چنین کتابخانه‌هایی وجود داشته باشد، استفاده از نسخه 2 مفسر پایتون ضروری می‌شود.در صورتی که برنامه‌نویس، تسلط کافی روی کد نویسی به زبان پایتون در نسخه‌ 2 داشته باشد، ممکن است ترجیح دهد تا از مفسر این نسخه از پایتون برای توسعه برنامه‌های کاربردی استفاده کند. با این حال، توصیه می‌شود که آشنایی کافی با نسخه 3 مفسر پایتون ایجاد شود تا فرایند مهاجرت از نسخه 2 به نسخه 3 پایتون به راحتی انجام بپذیرد.سؤالی که در اینجا ممکن است مطرح شود این است که آیا می‌توان کدی در زبان پایتون نوشت که توسط نسخه‌های مختلف مفسر پایتون قابل اجرا باشد. پاسخ این سؤال، بستگی به نوع برنامه کاربردی دارد. همچنین، بسته به نوع برنامه کاربردی که قرار است در پایتون تولید شود، نوشتن کدی که در نسخه‌های مختلف مفسر پایتون قابل استفاده باشد، کار بسیار سخت یا حتی آسانی خواهد بود.با این حال، به برنامه‌نویسان مبتدی توصیه نمی‌شود که به دنبال نوشتن کدهایی باشند که در نسخه‌های مختلف پایتون قابل اجرا باشند. به طور کلی، در صورتی که برنامه‌نویس، بر اساس مفاد قرارداد استخدامی، جهت کد نویسی در نسخه 2 پایتون استخدام نشده باشد، توصیه می‌شود که برای توسعه برنامه‌های کاربردی، از نسخه 3 زبان پایتون و مفسر آن استفاده شود.پیاد‌ه‌سازی‌های مختلف از زبان برنامه‌نویسی پایتونوقتی که مردم از زبان پایتون صحبت می‌کنند، علاوه بر این که منظورشان زبان برنامه‌نویسی پایتون است، پیاده‌سازی خاصی از زبان پایتون به نام CPython را نیز مد نظر دارند. پایتون در واقع مشخصات یک زبان برنامه‌نویسی را تعریف می‌کند که می‌تواند در پلتفرم‌ها و محیط‌های مختلف و به شیوه‌های گوناگونی پیاده‌سازی شود. ?پیاده‌سازی CPythonپیاده‌سازی CPython، پیاده‌سازی مرجع و رسمی از پایتون محسوب می‌شود که به وسیله زبان C نوشته شده است. ویژگی مهم پیاده‌سازی CPython این است که ابتدا کدهای پایتون نوشته شده را به «بایت‌‎کد میانجی» (Intermediate ByteCode) تبدیل می‌کند. در مرحله بعد، بایت‌کدهای میانجی تولید شده توسط یک «ماشین مجازی» (Virtual Machine) تفسیر می‌‌شود. پیاده‌سازی CPython، بالاترین سطح مطابقت ممکن را با بسته‌های برنامه‌نویسی پایتون و ماژول‌های پایتون نوشته شده به زبان C دارد.در صورتی که برنامه‌نویس یا توسعه‌دهنده قصد داشته باشد تا از کدهای منبع باز پایتون برای کد نویسی برنامه‌های کاربردی استفاده کند، به گونه‌ای که کاربران زیادی بتوانند از کدهای نوشته شده استفاده کنند، اکیدا توصیه می‌شود که از پیاده‌سازی CPython برای چنین کاری استفاده شود. همچنین، بسیاری از بسته‌های نرم‌افزاری ارائه شده برای زبان پایتون، وابسته به پیاده‌سازی پیاده‌سازی CPython هستند. به آن دسته از کاربران، برنامه‌نویسان یا توسعه‌دهندگانی که جهت توسعه برنامه‌های کاربردی به این مجموعه ار بسته‌های نرم‌افزار نیارد دارند، توصیه می‌شود که حتما از پیاده‌سازی CPython استفاده کنند.تمامی نسخه‌های زبان برنامه‌نویسی و مفسر پایتون در زبان C پیاده‌سازی شده‌اند، زیرا CPython، پیاده‌سازی مرجع زبان برنامه‌نویسی پایتون محسوب می‌شود.