آزمايش كارايي كد
بهترين روش براي آزمودن كارايي يك زبان و مقايسه آن با زبانهاي ديگر، نوشتن كد يك پروژه خاص به آن زبانها و مقايسه برخي از پارامترهاي كدها با يكديگر است. اما اينكه كد مورد بحث بايد شامل چه بخشهايي باشد، و اينكه چگونه ميتوان با نوشتن كمترين كد، در كوتاهترين زمان ممكن دو زبان را با يكديگر مقايسه كرد، موضوعي تخصصي است.استيو مك كانل، كه از متخصصان برجسته مهندسي نرمافزار است دست كم سه نوع آزمون را براي اين منظور پيشنهاد ميكند.
نخستين آزمون عبارت است از ايجاد يك شيء و صدا كردن چند متد درون اين شي. در آزمون دوم ميتوان آرايههاي يك بعدي و دو بعدي را ايجاد و آنها را مقداردهي كرد و آخرين روش مقايسه دو عدد صحيح با يكديگر است. هر آزمون را حداقل هزار بار و حداكثر صد هزار بار اجرا ميكنيم.
نتايج مقايسه گرووي و جاوا نشان ميدهد كه زمان اجراي متدهايي كه از درون دو شي جاوا و گرووي صدا زده ميشوند تقريبا يكسان و بسيار بالا است. آرايهها در گرووي سريعتر از جاوا هستند با اين حال در هر دو زبان اين زمان قابل ملاحظه است. مقداردهي به اعداد تقريبا هيچ زماني نميگيرد.
نتايج اين آزمونها نشان ميدهد كه گرووي زماني كه آزمونها تنها يك بار تكرار شوند، كند است، در حالي كه اگر تعداد تكرار آزمونها زياد باشد اين مشكل پيش نميآيد.
دليل اين امر وجود فيلدهاي استاتيك است كه وقتي از يك كلاس گرووي براي اولين بار يك شيء ايجاد ميكنيم بايد مقداردهي اوليه شوند. زماني كه آزمون نخست را براي بار اول انجام ميدهيم، زمان اجرا بسيار بالاست و سپس اين زمان به ميزان قابل ملاحظهاي كاهش مييابد. سپس هنگامي كه اين آزمون را براي هزارمين بار تكرار ميكنيم زمان اجرا مانند اولين بار بسيار زياد است. اين نتايج به خوبي مساله را توجيه ميكنند.
از سوي ديگر زماني كه تعداد تكرارآزمونها بيش از هزار بار باشد، جاوا تقريبا هزار بار سريعتر از گرووي است و اين مساله در مورد همه آزمونها صدق ميكند.
بهبود در خوانايي، سرعت در توليد كد؟
علاوه بر آزمونهاي ياد شده، يكي از مواردي كه در بررسي كارايي كد مورد نظر قرار ميگيرد، خوانايي كد است. شيب منحني يادگيري براي برنامهنويساني كه به زبان جاوا مسلط باشند كاملا مسطح است و اين به آن معني است كه تفاوتهاي قابل ملاحظهاي بين دستور زبان اين دو زبان وجود ندارد. از سوي ديگر نوشتن كد به زبان گرووي به مراتب كمتر از نوشتن همان كد به زبان جاوا زمان ميگيرد.
به اعتقاد بسياري از برنامهنويسان حرفهاي خوانايي، قدرت و سرعت توليد كد از جمله عواملي هستند كه در برنامهنويسان انگيزه لازم براي استفاده از گرووي بوجود ميآورند. در مجموع بهنظر ميرسد كه اگرچه گرووي بهمراتب كندتر از جاوا است، نتايج آزمونهاي انجامشده نشان ميدهد كه آينده گرووي درخشان است. آزمون ايجاد يكي از اجزاي جاوا (Java bean)نشان ميدهد كه حتي اگر صد هزار عدد از اين اجزا را با استفاده از گرووي ايجاد كنيم، زمان اجرا از نيم ثانيه كمتر است.
اگرچه در برنامهنويسي واقعي ما هرگز به ايجاد تعداد بسيار زيادي از اجزا نياز نداريم، اما اين موضوع يكي از نقاط قدرت گرووي است كه استفاده از آن را بجاي جاواي عادي بسيار مناسب ميكند. نكته مهم ديگر اين است كه گرووي توابع getter و setter را به طور خودكار اجرا ميكند. از سوي ديگر، در هر موردي كه كد گرووي از كارايي كافي برخوردار نباشد ميتوان آن را به سادگي با كد جاوا جايگزين كرد.
نتايج حاصل از ايجاد يك آرايه و مقداردهي آن نيز بهتر از جاوا است. از سوي ديگر، تاكنون نتايج هيچيك از آزمونهاي پيچيدهتري كه از موضوع بحث ما خارج هستند، موردي را كه حاكي از عدم كارايي گرووي در مقايسه با جاوا باشد نشان نداده است. به اين ترتيب ميتوان نتيجه گرفت كه جايگزين كردن كد جاوا با كد گرووي در اكثر موارد امكانپذير است.
مقايسه گرووي با روبي
در آزمون مشابهي پيادهسازي، سرعت و ميزان مصرف حافظه توسط گرووي با JRuby مقايسه شد. نتايج حاصل از اين مقايسه نشان داد كه در همه موارد فوق بدون استثنا، گرووي بهتر از جيروبي عمل ميكند.
از دلايلي كه سبب اين برتري ميشود اپتيمايز شدن بهتر حلقههاي تكرار در گرووي است. با توجه به اين كه جيروبي سريعتر از روبي است و گرووي از هر دو آنها سريعتر است. در مجموع ميتوان گفت كه در مورد همه زبانهايي كه روي JVM اجرا ميشوند، گرووي بيشترين ميزان كارايي را دارد. از آنجايي كه گرووي ميتواند كدهاي جاوا را نيز كامپايل و اجرا كند، قدرت مانور بيشتري نسبت به ديگر زبانهاي اين گروه دارد. ضمن اينكه در مواردي كه كارايي آن به هر دليلي افت ميكند، ميتوان آن را با جاوا جايگزين كرد. در حال حاضر گرووي در برخي از بخشهاي مرتبط با سختافزار سيستم مانند مكملهاي اعداد، از برخي كاستيها رنج ميبرد اما با گذشت زمان خلا موجود در اين زبان به سرعت در حال پر شدن است.
مقايسه گرووي با جايتون
آخرين عضو از خانواده زبانهايي كه روي ماشين مجازي جاوا اجرا ميشوند Jython است. اين زبان در واقع يك درگاه براي تبديل كدهاي جاوا به كد پايتون است و كندترين زبان در اين خانواده محسوب ميشود. بخشي از اين مشكل ناشي از اين مساله است كه پايتون تفاوتهاي قابل ملاحظهاي با جاوا دارد.
مقايسه گرووي با پايتون
در مقايسه با پايتون، گرووي چندان پويا و ديناميك نيست. يك زبان ديناميك زباني است كه بسياري از محاسبات را در زمان اجرا و نه در هنگام كامپايل شدن انجام ميدهد. اين امر علاوه بر افزايش سرعت و كارايي برنامه، از بروز برخي از انواع خطاها نيز جلوگيري ميكند. از سوي ديگر، در حال حاضر جزييات انجام برخي از محاسبات در گرووي بر برنامهنويسان پوشيده است، در حالي كه در Python هيچ چيز پوشيده و مخفي نيست. با اين وجود نقطه قوت گرووي در برابر پايتون، برخورداري از مجموعه گستردهاي از كتابخانهها است. در واقع دسترسي گرووي به همه apiهاي جاوا آن را بهقدري قدرتمند ميسازد كه برخي حتي گرووي را تهديدي براي آينده جاوا ميدانند. كارايي گرووي و پايتون در مورد پيادهسازي متدها و توابع با هم برابري ميكند. از ديدگاه مقايسه سرعت گرووي دست كم دو برابر سريعتر از پايتون است.
مقايسه گرووي با PHP
اگرچه اين امر شگفت انگيز به نظر ميرسد، اما PHP تنها از جايتون سريعتر است و از همه زبانهاي ديگري كه در مورد آنها صحبت كرديم، از جمله گرووي كندتر است.
مقايسه بر مبناي اندازه كد
يكي از مسايلي كه بر كارايي كد، سرعت آن و سرعت توسعه كد توسط برنامهنويسان اثر مستقيم ميگذارد، اندازه كد يا به عبارت ديگر تعداد خطوط كد است. براي آزمودن كارايي زبانها بر مبناي اين معيار، حل يكي از مسايل مشهور برنامهنويسي با استفاده از زبانهاي مختلف بررسي شد. اين مساله، مساله ژوزف فلاويوس ناميده ميشود.
ژوزف فلاويوس يك تاريخ نگار رومي در قرن اول پس از ميلاد بود. ژوزف و تعدادي سرباز كه جمعا 40نفر بودند در يك غار حبس شده و در محاصره نيروهاي دشمن كه با روم در جنگ بودند قرار داشتند. آنها تصميم گرفتند كه دور يك حلقه بايستند و شروع به شمردن كنند. شمارش از يك آغاز ميشد و به 3 ختم ميشد و سپس مجددا از يك از سر گرفته ميشد.
هر فردي كه شماره3 به او تعلق ميگرفت بايد خود را تسليم نيروهاي دشمن ميكرد تا جان عده باقيمانده نجات يابد. ژوزف كه نميخواست بميرد در جايي ايستاد كه آخرين نفر نجات يافته باشد. حالت كلي اين مساله اين است كه تعداد سربازان n باشد و سربازان از يك تا n شماره گذاري شوند. هر سرباز Kام بايد تسليم دشمن شود. هدف محاسبه شماره آخرين فرد نجات يافته است.
نتايج حاصل از پيادهسازي كد با زبانهاي مختلف نشان ميدهد كه كد جاوا 100 خط و زمان اجراي آن 6/1 ميكرو ثانيه است. كد++ C داراي 124 خط و زمان 3 ميكروثانيه، كد گرووي 81 خط اما زمان اجراي آن 100 ميكرو ثانيه و كد PHP داراي 85 خط با زمان اجراي 593 ميكرو ثانيه است. كدهاي پايتون و روبي به ترتيب 41 و 63 خط بوده و زمان اجراي آنها به ترتيب حدود 630 و 380 ميكرو ثانيه است. به اين ترتيب كد گرووي نسبتا كوتاه و خلاصه اما زمان اجراي آن اندكي طولاني است. به اين ترتيب با تركيب كد جاوا و گرووي ميتوان به يك سيستم متعادل و كارا دست يافت.
منبع: www.parsviva.com