گرچه قبلا سعی کردم چنین کاری کنم و حتی نسخه قدیمی WENT رو هم نوشتم، ولی کار بهینه نبود، و تصمیم گرفتم همون WENT رو بازنویسی کنم. پس تصمیم گرفتم کمی بیشتر در اعماق روبی سفر کنم و با کشفیات جدید، دوباره زبانم رو بنویسم. توی این مطلب خیلی بحث رو کش نمیدم، فقط یکم در مورد این که زبان اون پشت چی کار میکنه توضیح میدم و بعد یک تکه کد ساده میزنم.
هر زبانی، اون پشت توی مفسر یا کامپایلر، بخشی داره که هرچی که بهش دادیم رو میخونه. اصولا این بخش Parser نامیده میشه و هرچی توی یک خط برنامه هست رو میخونه، به یک تابع میفرسته و بعد عملیات رو روش انجام میده. برای مثال عبارت ۲ + ۲ رو در نظر بگیرید، این عبارت از ۳ کاراکتر تشکیل شده، ۲ و ۲ و +. این رو که به مفسر بدید، میفهمه که باید ۲ و ۲ با هم جمع شن و جواب بشه ۴ (یا شایدم ۵ ). ولی این کار چطوری توی مفسر اتفاق میفته؟ کد زیر توی روبی بهتون میگه :
a = "2 + 2"
a = a.split(' ')
sum = 0
for i in a
sum += i.to_i
end
puts sum
توجه کنید که این کد بسیار کوتاه شده و اصولا منطق زبان درش رعایت نشده. ولی خب برای توضیح، کار راه اندازه. در خط اول، رشته ۲+۲ رو توی متغیر a ریختیم و بعدش توی یک آرایه قرارشون دادیم. دقت کنید که اینجا فاصله بسیار اهمیت داره ! چرا که جداسازی درون آرایه کاملا به فواصل وابستس. بعد از اون، اومدم یه متغیر ایجاد کردم به اسم sum و مقدارش رو صفر قرار دادم. بعد توی یک حلقه، تمام اعضای آرایه رو به عدد صحیح تبدیل کردم و بعد ریختم توی sum . به این شکل، عملیات جمع رو به زبان برنامه سازی فهموندیم. حالا برای بهتر شدن زبان، باید کلاس و تابع و … بنویسیم. وقتی نسخه جدید WENT رو نوشتم سعی میکنم اینجا در موردش یک مطلب کوتاه بنویسم.
موفق باشید