Python را اغلب با دیگر زبانهای تفسیر شده مانند جاوا، جاوا اسکریپت، پرل، Tcl یا SmalTalk مقایسه میکنند. البته مقایسه با C++ و Common Lisp و یا Schame نیز میتواند کارآمد باشد. در این مطلب قصد داریم Python را با زبانهای نامبرده مقایسه کنیم.
تمرکز این مقایسات فقط بر مسائل مربوط به زبان است، هر چند انتخاب زبان برنامهنویسی، اغلب بستگی به محدودیتهای دنیای واقعی مانند هزینه، موجود بودن، آموزشها، سرمایه یا حتی علاقهی شخصی افراد دارد.
مقایسه Python با جاوا
برنامههای Python عموماً نسبت به برنامههای جاوا کندتر اجرا میشوند، ولی اغلب برای توسعه زمان کمتری نیاز دارند. برنامههای Python، معمولاً سه تا پنج برابر کوتاهتر از برنامههای معادلشان در برنامههای جاوا هستند. این تفاوت میتواند بخاطر انواع دادهای سطح بالای تعبیه شدهی داخلی یا typing داینامیکِ Python باشد.
برای مثال، یک برنامهنویسِ Python برای اعلان انواع آرگومانها یا متغیرها وقت تلف نمیکند و لیست چند ریختی قدرتمندِ Python و انواعِ dictionary، جهت پشتیبانی دستوری قدرتمند، مستقیماً در زبان تعبیه شدهاند و همیشه در برنامههایِ Python استفاده میشوند.
بخاطرِ typing زمان اجرا، run time مربوط به python نسبت به جاوا باید سختتر کار کند. برای مثال زمان ارزیابی عبارتِ a+b، ابتدا run time باید شیءهایِ a و b را بررسی کند تا نوعشان را پیدا کند، این عملیات در زمان کامپایل انجام نمیشوند. سپس عملیات متناسب با جمع، فراخوانی میشود که ممکن است یک متد overload شده توسط کاربر باشد. از طرف دیگر، جاوا، میتواند یک integer کارآمد یا یک نقطه اعشار اضافه را اجرا کند ولی نیاز به اعلان متغیرهایِ a و b دارد و اجازه overload کردن عملگرِ + را برای کلاسهای تعریف شده توسط کاربر، نمیدهد.
به دلایل مذکور، Python بعنوان یک زبانِ "glue" بهتر عمل میکند درحالی که جاوا بیشتر بعنوان یک زبان پیادهسازی سطح پایین شناخته میشود. در واقع، ترکیب این دو زبان با هم فوقالعاده است. کامپوننتها میتوانند در جاوا توسعه یافته و طراحی شوند و در Python با فرمهای برنامه ترکیب شوند؛ همچنین تا زمانیکه طراحی کامپوننتها با پیادهسازیِ جاوا “herdened” شود، میتوان از Python بعنوان نمونهی اولیه استفاده کرد. برای پشتیبانی از چنین روشِ توسعهای، یک پیادهسازی از Python که در حال نوشته شدن با جاوا است، در حال توسعه است و از طریق جاوا و vice versa امکان فراخوانی کدِ Pyhton را فراهم میآورد. در این پیادهسازی، سورسکدِ Python به بایتکدِ جاوا ترجمه میشود (به کمک کتابخانهی run-time برای پشتیبانی از سمانتیکِ داینامیکِ Python).
مقایسه Python با جاوا اسکریپت
زیرمجموعهی "مبتنی بر شیءِ" Python، تقریباً معادل با جاوا اسکریپت است. Python هم مثل جاوا اسکریپت (نه جاوا)، از استایلی از برنامه نویسی پشتیبانی میکند که از توابع و متغیرهای ساده استفاده میکند، بدون اینکه درگیر تعریفِ کلاسها شود. به هرحال، این تمام چیزی است که در مورد جاوا اسکریپت وجود دارد. از طرف دیگر، Python از کدنویسی برنامههای خیلی بزرگ پشتیبانی میکند و از طریق استایل برنامهنویسیِ شیءگرا، که کلاسها و وراثت نقش مهمی در آن بازی میکنند، بخوبی قابلیتِ استفادهی مجدد از کد را فراهم میکند.
مقایسه Python و پِرل (Perl)
Python و پِرل، پیشزمینهی مشابهی دارند (اسکریپتنویسیِ یونیکس، که هر دو رشد خوبی در این زمینه داشتهاند)، و از بسیاری از قابلیتهای مشابه پشتیبانی میکنند ولی فلسفهی آنها با هم فرق میکند. پرل، بر پشتیبانی از اعمال مبتنی بر شیءِ پرکاربرد تأکید دارد، مثلِ داشتن عبارتهای منظمِ تعبیه شده، پویش فایل و قابلیتهای تولید گزارش. Python بر پشتیبانی از روشهای برنامهنویسی پرکاربرد تأکید دارد، مثلِ طراحی ساختار داده و برنامهنویسی شیءگرا، و با ارائهی یک نشانهگذاری زیبا و نه بیشاز حد مرموز، برنامهنویسها را به نوشتن کدهای خوانا (و البته با قابلیت نگهداری) تشویق میکند. در نتیجه، Python مشابه پرل است ولی کمتر در دامنهی برنامهی اصلی استفاده میشود؛ به هر حال Python نسبت به پرل، کاربرد بیشتری دارد.
مقایسه Python و Tcl
Tcl هم مثلِ Python بعنوان یک زبان توسعهی برنامه، بخوبی یک زبان برنامهنویسی مستقل کاربرد دارد. به هر حال، Tcl، که بطور معمول تمام دادهها را بعنوان رشته ذخیره میکند، از نظر ساختارهای دادهای ضعیف است و کدهای معمولی را کندتر از Python اجرا میکند. Tcl، قابلیتهای مورد نیاز برای نوشتن برنامههای بزرگ مثل namespaceهای ماژولار را ندارد. بنابراین، معمولاً وقتی یک برنامهی بزرگِ از Tcl استفاده میکند، extentionهایی دارد که با C یا C++ نوشته شدهاند و مخصوص آن برنامه هستند.
اغلب یک برنامهی معادلِ نوشته شده با Python، میتواند بصورتِ "pure Python" هم نوشته شود. البته، توسعهی pure Python سریعتر از نوشتن و اشکالزداییِ یک کامپوننتِ C یا C++ است. گفته میشود که جبران کیفیت، معادل با ابزارِ TK است. Python، بعنوانِ کتابخانهی کامپوننت رابط کاربری گرافیکی استاندارد، یک رابط (interface) به TK دارد.
Tcl 8.0 با ارائهی کامپایلرِ بایتکد که در پشتیبانی از نوع دادهها و اضافه کردن namespaceها محدودیت دارد، مسائلِ پرسرعت را آدرسدهی میکند. به هر حال، این زبان، هنوز هم یک زبان برنامهنویسی دست و پا گیر است.
مقایسه Python با small talk
شاید بزرگترین تفاوت میان python و smalltalk، این باشد که دستوراتِ Python، بیشتر "mailstream" هستد و این امر باعث میشود که در زمینهی آموزش برنامهنویسی یک سطح بالاتر باشد. Python هم مثلِ Smalltalk دارای typing و اتصال (binding) داینامیک و شی گرایی است. به هر حال، Python انواع شیءهای تعبیه شدهی داخلی را از کلاسهای تعریف شده توسط کاربر متمایز کرده و در حال حاضر اجازهی ارث بری از انواع تعبیه شدهی داخلی را نمیدهد. کتابخانهی استانداردِ کالکشنِ انواع دادهایِ Smalltalk بیشتر اصلاح شده، در حالیکه کتابخانهی Python برای تعامل با اینترنت و حقایقِ WWW مثل ایمیل، HTML و FTP امکانات بیشتری دارد.
Python در مورد محیط توسعه و توزیع کد، فلسفهی متفاوتی دارد. در حالیکه Smalltalk، تصویرِ یکپارچهای از سیستم دارد که شامل هر دو محیط کاربری و برنامهی کاربر میشود، Python هر دو ماژولهای استاندارد و ماژولهای کاربر را در فایلهای منحصر به فردی که در خارج از سیستم به سادگی قابل مرتب شدن و توزیع شدن هستند، ذخیره میکند. نتیجه اینکه برای متصل کردن یک رابط گرافیکی (GUI) به برنامهی Python، بیشتر از یک آپشن مورد نیاز است، در حالیکه GUI داخل سیستم تعبیه نشده است.
مقایسه Python و C++
تقریباً هر چیزی که در مورد جاوا وجود دارد، در C++ هم قابل اعمال است. درحالیکه کدِ Python، سه تا پنج برابر کوتاهتر از کد جاوای معادل آن است، اغلب پنج تا ده برابر کوتاهتر از کد معادل آن در C++ است! شواهد نشان میدهند که یک برنامهنویسِ Python میتواند کاری را در دو ماه تمام کند در حالیکه دو برنامهنویس جاوا نمیتوانند در یک سال هم همان کار را تمام کنند. Python در جایگاه یک زبانِ "glue" میدرخشد و برای ترکیب کامپوننتهای نوشته شده در C++ استفاده میشود.
مقایسه Python و Common Lisp و Scheme
این زبانها از لحاظِ معناگراییِ داینامیک، شبیه به Python هستند، ولی از لحاظ رویکردشان نسبت به دستورات، متفاوت هستند که باعث میشود که مقایسه تقریبا تبدیل به یک آرگومانِ تعصبی شود: حذفِ دستورات از Lips یک مزیت است یا یک عیب؟ باید توجه داشت که قابلیتهای درونیِ Python شبیه به Lips هستند و برنامههای Python میتوانند قطعه برنامهها را بسرعت ساخته و اجرا کنند. معمولاً خواص دنیای واقعی تعیین شده هستند: Common Lips بزرگ (مزیت خیلی خوبی است) است و دنیایِ Scheme بین تعداد زیادی از ورژنهای ناسازگار تقسیم شده، در حالیکه Python یک پیادهسازیِ واحد، مجانی و فشرده دارد.
تگ ها: متن باز / open sourcepython / پایتونjavascriptمقایسه