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

در این‌جا می‌خواهیم کارایی زبان‌های اسکریپتی را مقایسه کنیم. در این مقایسه، زبان‌های مطرح اسکریپتی را با زبان‌های غیر اسکریپتی مانند ++C مقایسه می‌کنیم. این مقایسه‌ها روی یک الگوریتم روی زبان‌های متفاوت روی یک کامپیوتر Intel® Q6600® quad-core 


 با ورودی یکسان اجرا شده است. بناربراین تنها وجه تمایز، زبان پیاده‌سازی است. (طبیعتا اگر غیر از این بود مقایسه از اعتبار ساقط می‌شد.) سیستم عامل این کامپیوتر نیز اوبونتوی x64 است. 
 
اولین الگوریتمی که بررسی می‌کنیم، مربوط است به تحلیل اجسام آسمانی هنگامی که در حال حرکت‌اند. در این تست، همان طور که انتظار می رود ++C سریعتر از بقیه است. در جدول زیر می‌توانیم زبان‌های مهم مورد بحث را ببینیم. در این تست، عملیات اعشاری به کار رفته است.
 
زبان زمان اجرا(ثانیه) حافظه(کیلو بایت) طول کد(بایت) توزیع روی پردازنده‌ها
++C ۱۰.۷۹ ۸۲۴ ۱۷۴۹ ۰٪      ۰٪      ۰٪      ۱۰۰٪
Java ۲۲.۴۹ ۱۷۲۶۰ ۱۴۲۴ ۰٪      ۰٪      ۱۰۰٪   ۰٪
Racket ۵۵.۸۳ ۲۶۵۲۸ ۱۶۸۹ ۰٪      ۰٪      ۰٪      ۱۰۰٪
PHP ۱۱ دقیقه ۳۲۴۸ ‍۱۰۸۲ ۰٪      ۰٪      ۱۰۰٪   ۰٪
Python ۱۶ دقیقه ۶۲۴۸ ۱۱۸۱ ۰٪      ۲۴٪     ۴۶٪    ۳۰٪
Perl ۱۶ دقیقه ۲۶۹۲ ۱۴۰۱ ۰٪      ۰٪      ۱۰۰٪   ۰٪
Ruby ۲۴ دقیقه ۴۸۹۲ ۱۱۳۷ ۰٪      ۰٪      ۰٪      ۱۰۰٪
 
در این جا یک الگوریتم محاسباتی سنگین را می‌بینیم که همان طور که انتظار می‌رود ++C و Java به ترتیب در آن اول و دوم هستند. البته از نظر حافظه، می‌دانیم که جاوا بسیار اسراف کار است که در این جدول نیز مشخص است.

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

زبان زمان اجرا(ثانیه) حافظه(کیلو بایت) طول کد(بایت) توزیع روی پردازنده‌ها
++C ۲.۳۰ ۱۶۴۴ ۶۸۲ ۰٪      ۰٪      ۰٪      ۱۰۰٪
Java ۴.۴۸ ۶۴۸۱۲ ۱۸۲۶ ۷۳٪    ۴۳٪    ۴۰٪   ۷۳٪
Racket  ۲.۳۶ ۲۴۰۸۸ ۱۱۲۲ ۰٪      ۰٪      ۱٪      ۱۰۰٪
PHP ۳.۵۹ ۴۶۶۸ ‍۵۳۷ ۰٪      ۰٪      ۱٪     ۱۰۰٪
Python  ۲.۴۴ ۷۰۲۸ ۲۵۵ ۰٪      ۰٪      ۱۰۰٪    ۱٪
Perl ۴.۴۷ ۴۰۱۲ ۲۶۱ ۰٪      ۰٪      ۵٪     ۹۵٪
Ruby ۸.۹۲ ۱۲۷۰۴ ۲۴۲ ۰٪      ۰٪      ۱۰۰٪    ۰٪

در این تست نیز مشاهده می‌شود که Java و Racket بیشترین حافظه را مصرف می‌کنند. تنها نکته‌ی شگفت‌انگیزی که وجود دارد پیشی گرفتن PHP از Java است در این تست!

تست بعدی، مربوط به برنامه‌سازی هم‌روند است. در این تست ۵۰۳ thread ساخته خواهد شد که به هم به طور حلقه‌ای متصل می‌شوند (به هم reference خواهند داشت). سپس با هم بازی «هپ» را انجام می‌دهند به این صورت که یک عدد را به اولین thread می‌دهیم و سپس این thread این عدد را یکی کم می‌کند و به بعدی می‌دهد و الی آخر. هنگامی که این عدد صفر شود برنامه خاتمه می‌یابد. این تست زمان جابه‌جایی میان threadها را مشخص می‌کند.

زبان زمان اجرا(ثانیه) حافظه(کیلو بایت) طول کد(بایت) توزیع روی پردازنده‌ها
++C ۲۵۹.۹۱ ۴۶۰۴ ۵۸۸ ۳۰٪     ۳۰٪     ۶٪      ۶٪
Java ۶ دقیقه ۲۸۹۵۰۰ ۵۳۰ ۴۴٪    ۲٪     ۲٪    ۴۴٪
Racket ۱۷۵.۴۶ ۶۷۰۴۸ ۲۶۲ ۰٪      ۰٪      ۱۰۰٪    ۰٪
PHP --- --- ‍--- ---
Python ۶ دقیقه ۱۰۳۷۶ ۲۸۸ ۴۹٪     ۱٪      ۱٪      ۴۹٪
Perl ۹ دقیقه ۷۰۲۳۶۰ ۴۸۹ ۲۸٪      ۲۸٪     ۲۷٪    ۲۷٪
Ruby ۱۹ دقیقه ۱۷۲۳۶ ۲۱۵ ۵۸٪     ۶٪      ۱۱٪     ۵۸٪

نکته‌ی جالب این است که Racket عملا برنامه را به صورت موازی اجرا نمی‌کند!

تست آخر روی زمان اجرا و حافظه‌ی مورد استفاده‌ی برنامه‌های نوشته شده تحت این زبان‌ها است برای انجام کارهای مربوط به پردازش متن. همان طور که می‌توان انتظار داشت، زبانی مانند Perl که به هدف انجام پردازش روی متن طراحی شده‌است، باید در این حوزه بسیار موفق ظاهر شود.


زبان زمان اجرا(ثانیه) حافظه(کیلو بایت) طول کد(بایت) توزیع روی پردازنده‌ها
++C ۴.۱۱ ۱۶۳۹۵۶ ۶۹۵ ۳۶٪     ۷۶٪     ۲۳٪     ۲٪
Java ۶.۳۹ ۶۲۱۷۱۲ ۱۴۱۰ ۸۷٪    ۸۷٪    ۸۶٪   ۹۶٪
Racket ۴۰.۵۰ ۶۴۰۲۴۰ ۵۲۷ ۰٪      ۰٪      ۱۰۰٪      ۰٪
PHP ۲۶.۷۳ ۲۲۳۹۹۲ ‍۴۵۹ ۰٪      ۰٪      ۱۰۰٪   ۰٪
Python ۱۲.۸۸ ۲۵۵۷۲۴ ۴۷۸ ۴۱٪     ۳۳٪     ۹۹٪   ۳۲٪
Perl ۱۰.۴۰ ۱۳۹۶۷۶ ۵۲۷ ۶۹٪     ۷۱٪     ۷۱٪    ۹۰٪
Ruby ۱۳.۹۹ ۲۷۹۰۹۲ ۵۰۱ ۴۱٪     ۴۰٪     ۴۱٪   ۱۰۰٪


همان طور که دیده می‌شود Perl با وجود این که یک زبان اسکریپتی است در این حوزه در حدود جاوا کارایی دارد.


منابع:
موافقین ۰ مخالفین ۰ ۹۱/۰۹/۰۴
نیما حمیدی

نظرات  (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی