بهترین مفسر پایتون برای برنامه نویسی – راهنمای کاربردی


«زبان برنامهنویسی پایتون» (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 زبان برنامهنویسی پایتون را شامل میشود.
پیش از اینکه قادر به توسعه برنامههای کاربردی در زبان پایتون باشید، لازم است تا ابتدا زبان پایتون را روی سیستم عامل مقصد خود نصب کنید. کاربران و مخاطبان این مطلب میتوانند آموزش جامع نصب پایتون در سیستمهای عامل مختلف را در اینجا مطالعه کنند. همچنین، مجموعهای از آموزشهای مرتبط با یادگیری پایتون و نصب نسخه 2 و 3 پایتون در سیستمهای عامل ویندوز، لینوکس و مک نیز در اینجا گردآوری شده است. البته در صورتی که تمایلی به نصب پایتون نداشته باشید یا به دلایل مختلف امکان نصب پایتون بر روی کامپیوتر شما وجود نداشته باشد، میتوانید از محیطهای برنامه نویسی آنلاین نیز پایتون استفاده کنید.
مفسر پیشنهادی برای اجرای برنامههای پایتون
به طور کلی، استفاده از مفسر نسخه 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، پیادهسازی مرجع زبان برنامهنویسی پایتون محسوب میشود. در ادامه، نمونهای از پیادهسازیهای انجام شده برای برخی ار توابع ریاضی، در پیادهسازی CPython نمایش داده شده است. برای پیادهسازی این توابع ریاضی از زبان C استفاده شده است.
پیادهسازی PyPy
پیادهسازی PyPy، یک مفسر برای زبان پایتون محسوب میشود. برای پیادهسازی این مفسر، از یک زیر مجموعه خاصی از زبان پایتون به نام RPython استفاده شده است. این زبان، از نوع زبانهای Statically-Typed است؛ یعنی، نوعدادهای متغیرها باید به طور صریح مشخص شده باشد (به عبارت دیگر، در زمان بررسی کدها و نه در زمان اجرا، نوع ددهای متغیرها مشخص میشود). این مفسر پایتون از ویژگی مشخصهای به نام کامپایلر Just-in-Time یا JIT استفاده میکند.
در کامپایل کردن Just-in-Time کدها، عمل کامپایل کردن کدهای نوشته شده، به جای اینکه پیش از اجرای برنامه انجام شود، در «زمان اجرا» (Run-Time) انجام میشود. مفسر PyPy برای کامپایل کردن Just-in-Time کدها، از Back-End های مختلفی نظیر C ،CLI و «ماشین مجازی جاوا» (Java Virtual Machine | JVM) پشتیبانی میکند.
هدف از توسعه مفسر PyPy، ایجاد مطابقت حداکثری با پیادهسازی CPython زبان برنامهنویسی پایتون و ارتقاء عملکرد مفسر پایتون هنگام اجرای کدها است. در صورتی کاربر، برنامهنویس یا توسعهدهنده به دنبال افزایش عملکرد کدهای پایتون در زمان اجرا باشد، استفاده از مفسر PyPy یکی از بهترین گزینههای ممکن خواهد بود. با توجه به معیارهای مختلف ارزیابی عملکرد کدها، سرعت اجرای کدها در مفسر PyPy چیزی حدود پنج برابر بیشتر از مفسر CPython است. مفسر PyPy از نسخه 2.7 مفسر پایتون پشتیبانی میکند و مفسر PyPy3 برای پشتیبانی از نسخه 3 پایتون توسعه داده شده است.
در ادامه، نمونهای از پیادهسازیهای انجام شده برای برخی ار توابع ریاضی، در مفسر PyPy نمایش داده شده است. برای پیادهسازی این توابع ریاضی از زبان RPython استفاده شده است.
پیادهسازی Jython
پیادهسازی Jython، یک پیادهسازی ارائه شده از مفسر پایتون محسوب میشود که کدهای پایتون را به «بایتکدهای» (ByteCodes) جاوا تبدیل میکند. سپس، بایتکدهای تولید شده توسط ماشین مجازی جاوا اجرا میشوند. همچنین، این امکان در مفسر Jython فراهم شده است تا کلاسهای جاوا را مانند ماژولهای پایتون Import کرد و مورد استفاده قرار داد.
در صورتی که برنامهنویس یا توسعهدهنده تمایل داشته باشد جهت کد نویسی برنامههای کاربردی از زبان پایتون استفاده کند، ولی منابع و کتابخانههایی باید استفاده شوند که از کدهای نوشته شده به زبان جاوا به عنوان پاید کد استفاده میکنند، بهترین راه استفاده از مفسر Jython است. مفسر Jython تا نسخه 2.7 زبان پایتون را پشتیبانی میکند. با این حال، مفسر Jython پشتیبانی کننده از نسخه 3 پایتون در حال توسعه است و در مرحله بتا قرار دارد.
در ادامه، نمونهای از پیادهسازیهای انجام شده برای برخی ار توابع ریاضی، در مفسر Jython نمایش داده شده است. برای پیادهسازی این توابع ریاضی از زبان جاوا استفاده شده است.
پیادهسازی IronPython
پیادهسازی IronPython، پیادهسازی مفسر پایتون برای محیط یا پلتفرم NET. محسوب میشود. مفسر IronPython به برنامهنویس و توسعهدهنده اجازه میدهد تا از کتابخانههای پایتون و NET. در برنامههای خود استفاده کنند. همچنین، IronPython امکان دسترسی به کدهای تمامی زبانهای موجود در پلتفرم NET. را به توسعهدهندگان و برنامهنویسان پایتون میدهد.
ابزار Python Tools for Visual Studio، پیادهسازی IronPython از زبان پایتون را با محیط توسعه «ویژوال استودیو» (Visual Studio) یکپارچه میکند. چنین ابزاری برای کسانی که به دنبال استفاده از پایتون برای توسعه برنامههای ویندوز در محیط ویژوال استودیو هستند، بسیار ایدهآل است. مفسر IronPython از نسخه 2.7 زبان پایتون پشتیبانی میکند. همچنین، ، مفسر IronPython پشتیبانی کننده از نسخه 3 پایتون در حال توسعه است و در مرحله بتا قرار دارد.
در ادامه، نمونهای از پیادهسازیهای انجام شده برای برخی ار توابع ریاضی، در مفسر IronPython نمایش داده شده است. برای پیادهسازی این توابع ریاضی از زبان سیشارپ (یا دیگر زبانهای NET.) استفاده شده است.
پیادهسازی PythonNet
ابزار PythonNet (که مخفف Python for .NET است)، عکس رویکرد IronPython را جهت استفاده از پایتون در محیط NET. اتخاذ کرده است. این ابزار به برنامهنویسان و توسعهدهندگان وب اجازه میدهد تا مفسر پایتون نصب شده در سیستم را با مؤلفه ماشین مجازی محیط NET. (که به آن، مؤلفه CLR یا Common Language Runtime گفته میشود) یکپارچه کنند.
با ترکیب ابزار PythonNet با Mono (پلتفرم نرمافزاری که به برنامهنویسان اجازه میدهد برنامههای کاربردی چندسکویی (Cross-Platform) را به راحتی توسعه دهند)، این امکان فراهم میشود تا مفسر پایتون نصب شده در سیستمهای عامل غیر ویندوز نظیر لینوکس و مک، بتواند با محیط NET. تعامل داشته باشد و درون آن فعالیت کند. یکی از مزیتهای مهم ابزار PythonNet، پشتیبانی از نسخههای 2.6 تا 3.5 مفسر پایتون است.
مجموعه آموزشهای مرتبط با زبان برنامهنویسی پایتون که در مجله فرادرس تهیه شدهاند و برای عموم مخاطبان و خوانندگان در دسترس قرار گرفتهاند، در اینجا گردآوری شدهاند.
در صورتی که تمایل دارید با زبان برنامهنویسی پایتون و نحوه کدنویسی در این زبان آشنا شوید، توصیه میشود که آموزشهای ارائه شده در این مطلب را مطالعه کنید. در اینجا به پایان مطلب برنامه نویسی اندروید با پایتون میرسیم.
اگر نوشته بالا برای شما مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای برنامهنویسی پایتون Python
- گنجینه آموزشهای برنامه نویسی پایتون (Python)
- مجموعه آموزشهای برنامهنویسی
- زبان برنامه نویسی پایتون (Python) — از صفر تا صد
- ترفندهای برنامهنویسی در پایتون — از صفر تا صد
- نصب پایتون — از صفر تا صد
- آموزش پایتون (Python) — مجموعه مقالات جامع وبلاگ فرادرس
- بهترین IDE برای پایتون — معرفی و مقایسه محیط های توسعه پایتون
^^