دست از جنگ با ابزارهام برداشتم و با زبان D موتور بازی ساختم
خلاصهٔ کاملتر
نویسنده میگه ساختن بازی باید لذتبخش باشه، ولی یه جایی این حس رو از دست داد. ورکفلوی اصلیش دور Godot و زبان اسکریپتش میچرخید، اما همیشه یه اصطکاک کوچیک بود؛ هم خودش رویکرد کدمحور رو ترجیح میداد، هم Godot داشت به سمت طراحی ادیتورمحورتر و خشکتر میرفت. این اصطکاک اونقدر زیاد شد که رفت سراغ ساختن موتور خودش به اسم Parin.
قبلش یه گشتوگذار طولانی بین Nim، Go، Zig، C و D داشت و آخرش فهمید D دقیقاً همونیه که لازم داره: یه زبان عملگرا و بدون تعصب که سر راهش نمیایسته. خلاصهش این میشه: یه زبون واحد برای منطق بازی و اسکریپت، کامپایل زیر یک ثانیه، آزادی انتخاب استراتژی تخصیص حافظه، و سرعت نزدیک به C با تجربهی توسعهی خیلی تمیزتر.
بخش حافظه جاییه که آزادی D بیشتر از همه دیده میشه. Parin بهصورت پیشفرض از garbage collector دوری میکنه و بیشتر به ساختارهای دادهی استاتیک و یه «arena allocator» تکیه میکنه که آخر هر فریم پاک میشه. دو نوع arena داره: یکی با بافر ثابت و یکی رشدی. یه کمککنندهی RAII به اسم ScopedArena هم هست که با خروج از اسکوپ، آفست رو برمیگردونه:
with (ScopedArena(arena)) {
make!char('C');
with (ScopedArena(arena)) {
make!short(3);
make!char('D');
}
// آفست به قبل از بلوک تودرتو برمیگرده.
}نکتهی جالب اینه که میتونی استراتژیهای تخصیص رو قاطی کنی. کتابخونهی کمکیِ نویسنده به اسم Joka برای مدیریت دستی حافظهست، ولی یه فلگ داره که موقع کامپایل همهچی رو به GC سوییچ میکنه. این یعنی موقع کار تیمی میتونه به کسایی که با مدیریت دستی راحت نیستن بگه از GC استفاده کنن، در حالی که خودش بخشهای سطحپایین رو دستی میبره.
متابرنامهنویسی D هم تجربهی روونی داره، چون حس میکنی داری کد معمولی D مینویسی. نویسنده ازش برای ساختن سیستم موجودیت با tagged union، تولید خودکار المانهای UI برای دیباگ از روی فیلدهای یه استراکت، و تخصیصهای مشترک (joint allocation) استفاده میکنه. کامپایل خیلی سریعه — روی یه CPU قدیمی حدود ۰.۶ ثانیه — و همین باعث شده از D حتی بهعنوان زبون اسکریپت برای ساختن بیلدهای وب هم استفاده کنه.
نکات کلیدی:
- نویسنده بهخاطر اصطکاک با Godot، موتور بازی Parin رو با زبان D ساخت.
- D کنترل کامل حافظه میده: arena allocator، ساختارهای استاتیک، و GC اختیاری که میشه قاطیشون کرد.
- متابرنامهنویسیش روونه و برای سیستم موجودیت و تولید خودکار UI دیباگ به کار میاد.
- کامپایل زیر یک ثانیه باعث شده D رو حتی برای اسکریپتنویسی هم استفاده کنه.




