وقتی موتور متن‌پیمای Regex، بازی کلاسیک دومی را اجرا می‌کند

اجرای بازی کلاسیک Doom با استفاده از عبارات منظم (Regex) به یکی از عجیب‌ترین و به‌طرز شگفت‌انگیزی پیچیده‌ترین چالش‌های دنیای برنامه‌نویسی تبدیل شده است. آرتیم لیتکین، توسعه‌دهنده‌ای که همیشه مرزهای ممکن را به چالش می‌کشد، به جای ریختن کد در زبان‌های سنتی، موتور بازی را روی موتور متن‌پیمای Regex سوار کرده است. نتیجه؟ هر فریم گرافیکی بازی 180 ثانیه زمان می‌برد و برای نمایش یک سکانس کوتاه، نزدیک به 14 میلیون عملیات جایگزینی کاراکتر اجرا می‌شود.

در دنیای توسعه نرم‌افزار، Regex معمولاً برای پیدا کردن و جایگزینی الگوهای متنی استفاده می‌شود. همان‌طور که در ویکی‌پدیا به آن اشاره شده، این ابزارها قدرت پردازشی فوق‌العاده‌ای دارند و با وجود سینتکس پیچیده‌شان، قابلیت‌های تکرار، شرط‌گذاری و تغییر متغیر را شبیه‌سازی می‌کنند. لیتکین دقیقاً از همین قابلیت‌ها برای ساختن یک شبیه‌ساز کامل استفاده کرد. او یک رشته متنی خالی 96 مگابایتی ایجاد کرد که نقش سیستم‌عامل مجازی را بازی می‌کند. در این رشته، بخش‌هایی برای CPU مجازی، RAM، بافر فریم و فایل‌های داده بازی (WAD) تعریف شده است.

هنگامی که عملیات آغاز می‌شود، Regex کاراکترها را در این متن می‌خواند، آن‌ها را با مقادیر باینری جایگزین می‌کند تا شبیه به رجیسترهای پردازنده رفتار کنند، سپس آدرس‌دهی حافظه را انجام می‌دهد و در نهایت خروجی گرافیکی را در بافر مربوطه می‌نویسد.

نمای تصویری از اجرای موتور بازی دومی روی فریم‌ورک عبارات منظم

بهینه‌سازی حافظه با یک درخت دودویی

پیچیدگی این کار به حدی است که لیتکین مجبور شد الگوریتم دسترسی به حافظه را با استفاده از یک درخت دودویی (Binary Tree) بهینه‌سازی کند. به جای اسکن تکراری کل متن برای یافتن نشانگرهای حافظه، Regex با پرش از شاخه‌ای به شاخه دیگر، پردازش را انجام می‌دهد. این تکنیک هوشمندانه باعث می‌شود سرعت پردازش به 80000 جایگزینی در ثانیه برسد و بازی قبل از پایان حیات جهان اجرا شود.

تجربه گیم‌پلی؛ شطرنج مکاتبه‌ای با یک تفنگ ساچمه‌ای

اجرای بازی روی این بستر، 100 درصد مطابقت بایتی (Byte-identical) با نسخه اصلی دارد. شما می‌توانید بازی را با کیبورد کنترل کنید، اما سرعت پاسخگویی باعث می‌شود گیم‌پلی به یک آزمایش صبر و استقامت تبدیل شود. لیتکین این تجربه را دقیقاً مانند «شطرنج مکاتبه‌ای با یک تفنگ ساچمه‌ای» توصیف می‌کند؛ جایی که هر حرکت نیاز به ثانیه‌ها پردازش متن‌پیمای دارد و بازخورد لحظه‌ای اصلاً در کابوس گیم‌های اکشن محسوب می‌شود.

مقایسه عملکرد اجرای معمولی با اجرای بازی دومی بر روی عبارات منظم

اگرچه این پروژه از نظر کاربردی هیچ کاربرد عملی‌ای ندارد و صرفاً یک نمایش فنی از توانایی‌های Regex است، اما برای توسعه‌دهندگان و علاقه‌مندان به معماری سیستم‌ها، درس‌های ارزشمندی درباره بهینه‌سازی، مدیریت حافظه و مرزهای زبان‌های برنامه‌نویسی دارد. تماشای اجرای زنده موتور Regex روی بازی‌ای که نسل‌ها از این فناوری پیشی گرفته، باز هم به همان هیجان تماشای ابزارهای Disk Defragmenter در دهه 90 میلایتاخیر می‌اندازد.

چگونه خودمان این پروژه را بررسی کنیم؟

مخزن گیت‌هاب پروژه با نام doom-regex در دسترس عموم قرار دارد و لیتکین یک نسخه دموی قابل اجرا برای سیستم‌عامل‌های مختلف ارائه کرده است. سایت رسمی پروژه نیز امکان مشاهده تعاملی موتور را به صورت متنی و تصوستانی فراهم می‌کند تا هر کس بتواند منطق پشت این ساختار پیچیده را درک کند. برای بررسی دقیق سورس‌کد و مستندات فنی پروژه، می‌توانید به گیت‌هاب مراجعه کنید.

این پروژه نشان می‌دهد که در دنیای تکنولوژی، مرز بین یک چالش سرگرم‌کننده و یک دستاورد مهندسی بارها و بارها جابجا می‌شود. تا زمانی که توسعه‌دهندگانی مانند لیتکین وجود دارند، قانون «غیرممکن» فقط یک اصطلاح موقت برای مراحل بعدی آزمایش خواهد بود.