در تپش این هفته، ماجرای فریب و تعرض در پوشش عرفانهای دروغین و رمالی را بررسی کردیم
پیدایش
روبی در اواسط دهه 1990 در ژاپن و توسط یوکی هیرو ماتسوموتو که به متز5 نیز معروف است پا به عرصه وجود گذاشت. ماتسوموتو در مورد نامگذاری روبی میگوید: «روبی که در لغت بهمعنای یاقوت است سنگ ماه تولد یکی از همکاران من است.» روبی سنگ متولدین ماه جولای است.
ماتسوموتو که خود به زبانهای لیسپ، پرل، اسمالتاک و پایتون6 مسلط است، در مورد دلیل پیدایش روبی میگوید: «من بهدنبال یک زبان اسکریپتنویسی میگشتم که از پرل قدرتمندتر و از پایتون شییگراتر باشد. از آنجا که چنین زبانی وجود نداشت، تصمیم گرفتم زبان ایدهآل خود را پدید آورم.» به این ترتیب روبی عضو جدیدی از خانواده پرل و پایتون بهشمار میرود.
امکانات
روبی دارای کتابخانههای گستردهای است که به همه نیازهای برنامهنویسان بهخوبی پاسخ میدهد. روبی همچنین کلاسهای FTP، پشتیبانی از CGI، پارسرهای XML، کتابخانههای پایگاههای داده، GTK و Qt و حتی یک کتابخانه BTree برخوردار است. کتابخانههای روبی قابل اتصال به کتابخانههای پایتون هستند و این مساله پایه قویتری را برای برنامهنویسی روبی فراهم میکند. روبی توسط اکثر سیستم عاملها از جمله لینوکس، Mac OS X، مایکروسافت ویندوز، ویندوز CE، و یونیکس پشتیبانی میشود. اجرای روبی روی یونیکس بهترین کارایی را دارد.
متغیرهای روبی در پنج سطح جهانی7، محلی، کلاس، بلوک و نمونه8 تعریف میشوند. پشتیبانی از مدیریت استثناها و عبارات منظم، جمعآوری اطلاعات زاید بهطور خودکار، بازنویسی اپراتورها، قابلحمل بودن و برخورداری از کتابخانههای استاندارد بزرگ از مهمترین ویژگیهای روبی بهشمار میروند.
نسخه استاندارد روبی با استفاده از C نوشته شده است و طراحی آن بهگونهای است که تنها در یک مرحله تفسیر میشود. اکنون، نسخههای متعددی از زبان روبی وجود دارد که هریک با دیدگاهی خاص خود، روبی را پیادهسازی کردهاند. مهمترین این نسخهها عبارتند از: MRI، JRuby و IronRuby. پیادهسازی موسوم به MRI9 متداولترین نسخه مورد استفاده است و پس از آن JRuby قرار دارد که یک پیادهسازی مبتنی بر جاوا است. هر سه نسخه فوق کد را در زمان نوشته شدن کامپایل میکنند. این ویژگی از مهمترین تواناییهای این سه نسخه از روبی است. زیرا برنامهنویس بهسرعت از اشتباه خود آگاه میشود.
اصول بنیادی
روبی از یک اصل ساده که اصل بهحداقل رسانیدن غافلگیری (POLS) نامیده میشود، پیروی میکند: زبان برنامهنویسی باید بهنحوی رفتار کند که سردرگمی و غافلگیری برنامهنویس را به حداقل برساند. ماتسوموتو میگوید: «روبی بهمنظور افزایش سرعت برنامهنویسان در تولید کد و تبدیل برنامهنویسی به کاری جذاب و سرگرمکننده نوشته شده است. طراحی واسط کاربر روبی نیز از همین اصل پیروی میکند.» او همچنین تاکید میکند که روبی نیازهای انسان را بر نیازهای رایانه مقدم میشمارد.
بهعقیده ماتسوموتو، مردم و بهخصوص مهندسان رایانه، بر ماشینها تمرکز میکنند. آنها در هنگام طراحی سیستمها به این میاندیشند که چه کاری سیستم را سریعتر و بهرهوری آن را بیشتر میکند. اما آنچه که ما به آن نیاز داریم وجود سیستمهایی است که براساس سادهتر کردن کار ما با ماشینها یا آسانتر کردن برنامهنویسی طراحی شده باشند.
سرعت توسعه کد
سرعت کدنویسی برنامهنویسان در طی سالهای گذشته رشد چشمگیری داشته است. هرچند آمارهای رسمی در این زمینه موجود نیست، اما بهطور متوسط هر پنج سال یکبار سرعت آمادهسازی نرمافزارها دو برابر میشود.
از این گذشته اکنون منحنی تولید نرمافزارهای قابل نگهداری، رشد خطی دارد. بخش اعظم این سرعت مربوط به ابزارهایی است که برنامهنویسان استفاده میکنند و در قلب این ابزارها زبان برنامهنویسی قرار دارد.
زبانهای برنامهنویسی در اصل مشابه یکدیگرند. در مقایسه زبانهای گوناگون، شباهتهای کلی زبانها از تفاوتهای آنها بیشتر است. با این حال، تفاوتهای موجود در میان زبانهای مختلف اثر قابلملاحظهای بر حل مسایل، یافتن راه حل و برهمکنش انسان و رایانه دارند. بهعنوان مثال، در زبان لیسپ، زبانی که زیبایی فوقالعاده و سادگی در مفاهیم را در هم آمیخته است، بخش عمده تواناییهای زبان در خدمت رایانه قرار گرفته است و نه در خدمت انسان. زبانی که تفسیر آن ساده است، الزاما زبان سادهای برای برنامهنویسی نیست و این مسالهای است که اغلب برنامهنویسان آن را تجربه کردهاند. شگفت انگیزترین ویژگی لیسپ این است که نشان میدهد چگونه میتوان با کمترین تعداد قوانین یک زبان رایانهای قدرتمند خلق کرد. در مقابل، روبی چنان هنرمندانه نوشته شده است که کد آن مانند شعر بهنظر میرسد.
یک مطالعه بسیار جالب در زمینه سرعت توسعه کد نشان میدهد که سرعت توسعه کد رابطه مستقیم با تعداد خطوط کد نوشته شده دارد. تعداد خطوط کد در پروژههای نوشته شده با++ C و جاوا تقریبا دو برابر تعداد خطوط پروژه پایتون یا پرل است. به این ترتیب توسعه کد در C++ و جاوا دو برابر زمان میبرد. نوشتن کد با روبی سرعت توسعه کد را به مراتب بیشتر از پرل و پایتون افزایش میدهد و در این زمینه از آنها پیشی میگیرد. دستورات روبی بسیار ساده و قابل درک هستند و کد روبی بهزبان طبیعی بسیار نزدیک است. بهعنوان مثال، در روبی از نقطهویرگول (سمیکالن) استفاده نمیشود. عدم وجود عواملی نظیر نقطهویرگول که در برنامهنویسی وقفه ایجاد میکند، سبب میشود که برنامهنویسی یک روند سادهتر و روانتر پیدا کند. در حقیقت سادگی دستور زبان روبی و سهولت تعریف کردن کلاسهای جدید سبب میشود که نوشتن کلاسها ساده شده و از آنها در تست کد در حد کلاس استفاده شود. در نتیجه طراحی شییگرا بسیار سریع و ساده میشود. به این ترتیب برنامهنویس درصدد جستجوی راهحلهای دیگر بر نمیآید.
ویژگیهای انحصاری
برخی از ویژگیهای روبی، در زبانهای دیگر وجود ندارند. روبی از ساختار closure پشتیبانی میکند. در این ساختار مسوولیت هر بخش از کد بر عهده شیی مناسب قرار میگیرد و کد حاصل کد خواناتری خواهد بود. نوشتن حلقههای for و while در روبی نادر است. همچنین پیادهسازی ساختارهایی نظیر "each" که احتمال رخداد خطا در آن کمتر است، بهسادگی امکانپذیر است.
در پروژههای پیچیده مساله قابلیت نگهداری کد، به یکی از مسایل مورد بحث تبدیل میشود. طراحی شییگرای مناسب به برنامه ساختار مناسب داده و کد برنامه را منطقی و واضح میکند. آنچه که مسلم است، این است که همه زبانهای شییگرا تا حدی از شییگرایی پشتیبانی میکنند. بهعنوان مثال زبان C++ بیشترین پشتیبانی را از شییگرایی بهعمل میآورد در حالیکه جاوا در این زمینه اندکی ضعیفتر عمل میکند. اما روبی از نظر سادگی در نحوه استفاده و قابل پیشبینی بودن از همه زبانهای دیگر پیشی گرفته است.
محدودیتها
مانند همه زبانهای دیگر، به روبی نیز انتقاداتی وارد است. سرعت اجرای کد روبی در مقایسه با بسیاری از زبانهایی که کد را کامپایل میکنند، پایین است. سرعت روبی با سرعت زبانهایی که از مفسر استفاده میکنند و دیگر زبانهای اسکریپتنویسی مانند پرل و پایتون قابل مقایسه است. تعریف متغیرها در روبی بسیار ساده است و تنها با تخصیص یک مقدار به متغیر میتوان یک متغیر جدید تعریف کرد. اشتباههای تایپی میتوانند سبب معرفی متغیرهای تازه شده و منجر به بروز رفتارهای غیرمنتظره شوند. بهدلیل دینامیک بودن انواع داده در روبی، اگر به متغیری مقداری از نوع دادهای ناهماهنگ نسبت داده شود، خطاهای زمان اجرا رخ خواهند داد.
در برخی از زبانها تبدیل انواع بهطور خودکار انجام میشود، یا اشتباه در مقداردهی توسط مفسر زبان به برنامهنویس اعلام میشود اما روبی فاقد مکانیسمی برای رفع این مشکل است. روبی از رشتههای چندبایتی و نیز از یونیکد پشتیبانی نمیکند. همچنین در حال حاضر سیستم روبی فاقد یک تعریف معین و استاندارد است.
ماتسوموتو امیدوار است که در آیندهای نهچندان دور مستندات مربوط به یک تعریف مشخص از روبی تکمیل شوند و روبی استاندارد ایزو دریافت کند.
قالب کاری
قالب کاری روبی، روبیرویریل10 یا به اختصار ROR نامیده میشود. ROR یک قالب کد باز تحت وب است که در میان توسعهدهندگان کدهای تحت وب طرفداران زیادی دارد. ROR برای توسعه پروژههای کوچک و مبتنی بر سیستم کلاینت-سرور مناسب است. با استفاده از ROR برنامهنویس تنها باید برای موارد خاصی که در قالب پیشبینی نشده است کد بنویسد. بهعنوان مثال اگر در برنامه کلاسی بهنام "فروش" وجود داشته باشد، در پایگاه دادهها جدولی به همین نام ایجاد میشود. برنامهنویس تنها زمانی نیاز به کدنویسی مجدد دارد که نام جدول به "کالاهای فروخته شده" تغییر کند. به این ترتیب استفاده از ROR حجم کدنویسی را کاهش میدهد. از دیگر مزایای ROR میتوان بهوجود کتابخانههای گسترده جاوا اسکریپت و خروجی به فرم HTML و XML اشاره کرد. ROR در سال 2007 در در سازمان ثبت اختراعات آمریکا موسوم به USPTO به ثبت رسیده است.
پینوشت
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
آوید افضل
در تپش این هفته، ماجرای فریب و تعرض در پوشش عرفانهای دروغین و رمالی را بررسی کردیم
گزارش «جامجم» درباره دستاوردهای زبان فارسی در گفتوگو با برخی از چهرههای ادب معاصر
معاون وزیر بهداشت: