روبي؛ زبان برنامهنويسي مولد
نويسنده: آويد افضل
هرچند سال يکبار يک اتفاق بزرگ در جهان برنامهنويسي، مسير برنامهنويسي را تغيير ميدهد. زبان برنامهنويسي روبي، يکي از اين اتفاقهاي بزرگ است.
روبي1 يک زبان ديناميک، همهمنظوره، سطح بالا و شييگرا2 است که دستورالعملهاي آن از پرل3 و ديگر ويژگيهاي آن از اسمالتاک1 الهام گرفته شده است. روبي همچنين از ساختارگرايي و انعکاس پشتيباني ميکند. علاوه بر استفاده از سيستم ديناميک، مديريت حافظه در روبي کاملا خودکار است. بنابراين روبي از بسياري از جهات شبيه پيتون، پرل و ليسپ است.
ماتسوموتو که خود به زبانهاي ليسپ، پرل، اسمالتاک و پايتون6 مسلط است، در مورد دليل پيدايش روبي ميگويد: «من بهدنبال يک زبان اسکريپتنويسي ميگشتم که از پرل قدرتمندتر و از پايتون شييگراتر باشد. از آنجا که چنين زباني وجود نداشت، تصميم گرفتم زبان ايدهآل خود را پديد آورم.» به اين ترتيب روبي عضو جديدي از خانواده پرل و پايتون بهشمار ميرود.
متغيرهاي روبي در پنج سطح جهاني7، محلي، کلاس، بلوک و نمونه8 تعريف ميشوند. پشتيباني از مديريت استثناها و عبارات منظم، جمعآوري اطلاعات زايد بهطور خودکار، بازنويسي اپراتورها، قابلحمل بودن و برخورداري از کتابخانههاي استاندارد بزرگ از مهمترين ويژگيهاي روبي بهشمار ميروند.
نسخه استاندارد روبي با استفاده از C نوشته شده است و طراحي آن بهگونهاي است که تنها در يک مرحله تفسير ميشود. اکنون، نسخههاي متعددي از زبان روبي وجود دارد که هريک با ديدگاهي خاص خود، روبي را پيادهسازي کردهاند. مهمترين اين نسخهها عبارتند از: MRI، JRuby و IronRuby. پيادهسازي موسوم به MRI9 متداولترين نسخه مورد استفاده است و پس از آن JRuby قرار دارد که يک پيادهسازي مبتني بر جاوا است. هر سه نسخه فوق کد را در زمان نوشته شدن کامپايل ميکنند. اين ويژگي از مهمترين تواناييهاي اين سه نسخه از روبي است. زيرا برنامهنويس بهسرعت از اشتباه خود آگاه ميشود.
بهعقيده ماتسوموتو، مردم و بهخصوص مهندسان رايانه، بر ماشينها تمرکز ميکنند. آنها در هنگام طراحي سيستمها به اين ميانديشند که چه کاري سيستم را سريعتر و بهرهوري آن را بيشتر ميکند. اما آنچه که ما به آن نياز داريم وجود سيستمهايي است که براساس سادهتر کردن کار ما با ماشينها يا آسانتر کردن برنامهنويسي طراحي شده باشند.
از اين گذشته اکنون منحني توليد نرمافزارهاي قابل نگهداري، رشد خطي دارد. بخش اعظم اين سرعت مربوط به ابزارهايي است که برنامهنويسان استفاده ميکنند و در قلب اين ابزارها زبان برنامهنويسي قرار دارد.
زبانهاي برنامهنويسي در اصل مشابه يکديگرند. در مقايسه زبانهاي گوناگون، شباهتهاي کلي زبانها از تفاوتهاي آنها بيشتر است. با اين حال، تفاوتهاي موجود در ميان زبانهاي مختلف اثر قابلملاحظهاي بر حل مسايل، يافتن راه حل و برهمکنش انسان و رايانه دارند. بهعنوان مثال، در زبان ليسپ، زباني که زيبايي فوقالعاده و سادگي در مفاهيم را در هم آميخته است، بخش عمده تواناييهاي زبان در خدمت رايانه قرار گرفته است و نه در خدمت انسان. زباني که تفسير آن ساده است، الزاما زبان سادهاي براي برنامهنويسي نيست و اين مسالهاي است که اغلب برنامهنويسان آن را تجربه کردهاند. شگفت انگيزترين ويژگي ليسپ اين است که نشان ميدهد چگونه ميتوان با کمترين تعداد قوانين يک زبان رايانهاي قدرتمند خلق کرد. در مقابل، روبي چنان هنرمندانه نوشته شده است که کد آن مانند شعر بهنظر ميرسد.
يک مطالعه بسيار جالب در زمينه سرعت توسعه کد نشان ميدهد که سرعت توسعه کد رابطه مستقيم با تعداد خطوط کد نوشته شده دارد. تعداد خطوط کد در پروژههاي نوشته شده با++ C و جاوا تقريبا دو برابر تعداد خطوط پروژه پايتون يا پرل است. به اين ترتيب توسعه کد در C++ و جاوا دو برابر زمان ميبرد. نوشتن کد با روبي سرعت توسعه کد را به مراتب بيشتر از پرل و پايتون افزايش ميدهد و در اين زمينه از آنها پيشي ميگيرد. دستورات روبي بسيار ساده و قابل درک هستند و کد روبي بهزبان طبيعي بسيار نزديک است. بهعنوان مثال، در روبي از نقطهويرگول (سميکالن) استفاده نميشود. عدم وجود عواملي نظير نقطهويرگول که در برنامهنويسي وقفه ايجاد ميکند، سبب ميشود که برنامهنويسي يک روند سادهتر و روانتر پيدا کند. در حقيقت سادگي دستور زبان روبي و سهولت تعريف کردن کلاسهاي جديد سبب ميشود که نوشتن کلاسها ساده شده و از آنها در تست کد در حد کلاس استفاده شود. در نتيجه طراحي شييگرا بسيار سريع و ساده ميشود. به اين ترتيب برنامهنويس درصدد جستجوي راهحلهاي ديگر بر نميآيد.
در پروژههاي پيچيده مساله قابليت نگهداري کد، به يکي از مسايل مورد بحث تبديل ميشود. طراحي شييگراي مناسب به برنامه ساختار مناسب داده و کد برنامه را منطقي و واضح ميکند. آنچه که مسلم است، اين است که همه زبانهاي شييگرا تا حدي از شييگرايي پشتيباني ميکنند. بهعنوان مثال زبان C++ بيشترين پشتيباني را از شييگرايي بهعمل ميآورد در حاليکه جاوا در اين زمينه اندکي ضعيفتر عمل ميکند. اما روبي از نظر سادگي در نحوه استفاده و قابل پيشبيني بودن از همه زبانهاي ديگر پيشي گرفته است.
در برخي از زبانها تبديل انواع بهطور خودکار انجام ميشود، يا اشتباه در مقداردهي توسط مفسر زبان به برنامهنويس اعلام ميشود اما روبي فاقد مکانيسمي براي رفع اين مشکل است. روبي از رشتههاي چندبايتي و نيز از يونيکد پشتيباني نميکند. همچنين در حال حاضر سيستم روبي فاقد يک تعريف معين و استاندارد است.
ماتسوموتو اميدوار است که در آيندهاي نهچندان دور مستندات مربوط به يک تعريف مشخص از روبي تکميل شوند و روبي استاندارد ايزو دريافت کند.
/س
روبي1 يک زبان ديناميک، همهمنظوره، سطح بالا و شييگرا2 است که دستورالعملهاي آن از پرل3 و ديگر ويژگيهاي آن از اسمالتاک1 الهام گرفته شده است. روبي همچنين از ساختارگرايي و انعکاس پشتيباني ميکند. علاوه بر استفاده از سيستم ديناميک، مديريت حافظه در روبي کاملا خودکار است. بنابراين روبي از بسياري از جهات شبيه پيتون، پرل و ليسپ است.
پيدايش
ماتسوموتو که خود به زبانهاي ليسپ، پرل، اسمالتاک و پايتون6 مسلط است، در مورد دليل پيدايش روبي ميگويد: «من بهدنبال يک زبان اسکريپتنويسي ميگشتم که از پرل قدرتمندتر و از پايتون شييگراتر باشد. از آنجا که چنين زباني وجود نداشت، تصميم گرفتم زبان ايدهآل خود را پديد آورم.» به اين ترتيب روبي عضو جديدي از خانواده پرل و پايتون بهشمار ميرود.
امکانات
متغيرهاي روبي در پنج سطح جهاني7، محلي، کلاس، بلوک و نمونه8 تعريف ميشوند. پشتيباني از مديريت استثناها و عبارات منظم، جمعآوري اطلاعات زايد بهطور خودکار، بازنويسي اپراتورها، قابلحمل بودن و برخورداري از کتابخانههاي استاندارد بزرگ از مهمترين ويژگيهاي روبي بهشمار ميروند.
نسخه استاندارد روبي با استفاده از C نوشته شده است و طراحي آن بهگونهاي است که تنها در يک مرحله تفسير ميشود. اکنون، نسخههاي متعددي از زبان روبي وجود دارد که هريک با ديدگاهي خاص خود، روبي را پيادهسازي کردهاند. مهمترين اين نسخهها عبارتند از: MRI، JRuby و IronRuby. پيادهسازي موسوم به MRI9 متداولترين نسخه مورد استفاده است و پس از آن JRuby قرار دارد که يک پيادهسازي مبتني بر جاوا است. هر سه نسخه فوق کد را در زمان نوشته شدن کامپايل ميکنند. اين ويژگي از مهمترين تواناييهاي اين سه نسخه از روبي است. زيرا برنامهنويس بهسرعت از اشتباه خود آگاه ميشود.
اصول بنيادي
بهعقيده ماتسوموتو، مردم و بهخصوص مهندسان رايانه، بر ماشينها تمرکز ميکنند. آنها در هنگام طراحي سيستمها به اين ميانديشند که چه کاري سيستم را سريعتر و بهرهوري آن را بيشتر ميکند. اما آنچه که ما به آن نياز داريم وجود سيستمهايي است که براساس سادهتر کردن کار ما با ماشينها يا آسانتر کردن برنامهنويسي طراحي شده باشند.
سرعت توسعه کد
از اين گذشته اکنون منحني توليد نرمافزارهاي قابل نگهداري، رشد خطي دارد. بخش اعظم اين سرعت مربوط به ابزارهايي است که برنامهنويسان استفاده ميکنند و در قلب اين ابزارها زبان برنامهنويسي قرار دارد.
زبانهاي برنامهنويسي در اصل مشابه يکديگرند. در مقايسه زبانهاي گوناگون، شباهتهاي کلي زبانها از تفاوتهاي آنها بيشتر است. با اين حال، تفاوتهاي موجود در ميان زبانهاي مختلف اثر قابلملاحظهاي بر حل مسايل، يافتن راه حل و برهمکنش انسان و رايانه دارند. بهعنوان مثال، در زبان ليسپ، زباني که زيبايي فوقالعاده و سادگي در مفاهيم را در هم آميخته است، بخش عمده تواناييهاي زبان در خدمت رايانه قرار گرفته است و نه در خدمت انسان. زباني که تفسير آن ساده است، الزاما زبان سادهاي براي برنامهنويسي نيست و اين مسالهاي است که اغلب برنامهنويسان آن را تجربه کردهاند. شگفت انگيزترين ويژگي ليسپ اين است که نشان ميدهد چگونه ميتوان با کمترين تعداد قوانين يک زبان رايانهاي قدرتمند خلق کرد. در مقابل، روبي چنان هنرمندانه نوشته شده است که کد آن مانند شعر بهنظر ميرسد.
يک مطالعه بسيار جالب در زمينه سرعت توسعه کد نشان ميدهد که سرعت توسعه کد رابطه مستقيم با تعداد خطوط کد نوشته شده دارد. تعداد خطوط کد در پروژههاي نوشته شده با++ C و جاوا تقريبا دو برابر تعداد خطوط پروژه پايتون يا پرل است. به اين ترتيب توسعه کد در C++ و جاوا دو برابر زمان ميبرد. نوشتن کد با روبي سرعت توسعه کد را به مراتب بيشتر از پرل و پايتون افزايش ميدهد و در اين زمينه از آنها پيشي ميگيرد. دستورات روبي بسيار ساده و قابل درک هستند و کد روبي بهزبان طبيعي بسيار نزديک است. بهعنوان مثال، در روبي از نقطهويرگول (سميکالن) استفاده نميشود. عدم وجود عواملي نظير نقطهويرگول که در برنامهنويسي وقفه ايجاد ميکند، سبب ميشود که برنامهنويسي يک روند سادهتر و روانتر پيدا کند. در حقيقت سادگي دستور زبان روبي و سهولت تعريف کردن کلاسهاي جديد سبب ميشود که نوشتن کلاسها ساده شده و از آنها در تست کد در حد کلاس استفاده شود. در نتيجه طراحي شييگرا بسيار سريع و ساده ميشود. به اين ترتيب برنامهنويس درصدد جستجوي راهحلهاي ديگر بر نميآيد.

ويژگيهاي انحصاري
در پروژههاي پيچيده مساله قابليت نگهداري کد، به يکي از مسايل مورد بحث تبديل ميشود. طراحي شييگراي مناسب به برنامه ساختار مناسب داده و کد برنامه را منطقي و واضح ميکند. آنچه که مسلم است، اين است که همه زبانهاي شييگرا تا حدي از شييگرايي پشتيباني ميکنند. بهعنوان مثال زبان C++ بيشترين پشتيباني را از شييگرايي بهعمل ميآورد در حاليکه جاوا در اين زمينه اندکي ضعيفتر عمل ميکند. اما روبي از نظر سادگي در نحوه استفاده و قابل پيشبيني بودن از همه زبانهاي ديگر پيشي گرفته است.
محدوديتها
در برخي از زبانها تبديل انواع بهطور خودکار انجام ميشود، يا اشتباه در مقداردهي توسط مفسر زبان به برنامهنويس اعلام ميشود اما روبي فاقد مکانيسمي براي رفع اين مشکل است. روبي از رشتههاي چندبايتي و نيز از يونيکد پشتيباني نميکند. همچنين در حال حاضر سيستم روبي فاقد يک تعريف معين و استاندارد است.
ماتسوموتو اميدوار است که در آيندهاي نهچندان دور مستندات مربوط به يک تعريف مشخص از روبي تکميل شوند و روبي استاندارد ايزو دريافت کند.
قالب کاري
پي نوشت :
1. Ruby
2. Object Oriented
3. Perl
4. Smalltalk
5. Matz
6. Python
7. Global
8. Instance
9. Matz’s Ruby Interpreter
10. Ruby on Rails
/س