Blue: جاوااسکریپت کامپایلشده به باینری بومی
خلاصهٔ کاملتر
Blue یه ابزار کامپایلر جاوااسکریپته که کدت رو از طریق یه AST پردازششده با Babel به C++ تبدیل میکنه و در نهایت یه فایل اجرایی standalone میسازه. یعنی میتونی با جاوااسکریپت بنویسی، ولی خروجیات یه برنامه بومی باشه که نه به Node.js نیاز داره، نه به Electron، و نه به هیچ runtime دیگهای.
Blue دو حالت کامپایل داره. حالت اول AOT (پیشکامپایل) هست که کد جاوااسکریپت رو مستقیماً به C++ تبدیل میکنه. این حالت برای پنجرههای گرافیکی، فایلسیستم، و حلقههای پرفورمنسمحور مناسبه. کلاسها، closure ها، prototype inheritance، destructuring و template literal همه توش کار میکنن.
حالت دوم QuickJS Island هست — یه موتور جاوااسکریپت سبکوزن به اسم QuickJS که داخل همون باینری جاسازی میشه. این بخش ES2020 و async/await رو ساپورت میکنه و میتونی از npm هم توش استفاده کنی. دو طرف (AOT و Island) از طریق یه bridge سبک با هم حرف میزنن:
// src/island.js - runs in embedded QuickJS
const server = http.createServer((req, res) => {
var note = Blue.callAot("getNote", req.url.slice(1));
res.writeHead(200, { "content-type": "text/html" });
res.end(note);
});
server.listen(3000);از نظر پرفورمنس، Blue خیلی جلوتر از Node.js قرار داره: زمان استارت حدود ۵ میلیثانیه (در مقابل ۹۰ms نود)، مصرف RAM در حدود ۳.۸ مگابایت (در مقابل ۴۸.۵ مگابایت نود)، و سایز باینری یه اپ ساده گرافیکی فقط ۱.۲ مگابایته. حتی همین صفحه وب Blue هم توسط یه باینری Blue سرو میشه که کلاً ۱.۴ مگابایته.
Blue یه مجموعه Native API هم داره که شامل Blue.Window برای مدیریت پنجره، Blue.Dialog برای دیالوگهای فایل و پیام، Blue.Clipboard برای کلیپبورد، و Blue.Process برای اجرای دستورات سیستمی میشه. محدودیتهایی هم وجود داره — native addonها، worker_threads، eval و بستههایی که به داخلیهای Node.js وابستهان کار نمیکنن.
در حال حاضر Blue فقط روی لینوکس و ویندوز (تجربی) در دسترسه. کدش closed source هست، ولی مثالها و issue tracking روی GitHub قابل دسترسن. میتونی بدون نصب هم از طریق GitHub Codespaces امتحانش کنی.
نکات کلیدی:
- جاوااسکریپت رو به C++ کامپایل میکنه و باینری standalone میسازه
- نه Electron نیاز داره نه Node.js در زمان اجرا
- دو حالت: AOT برای پرفورمنس و گرافیک بومی، QuickJS Island برای npm و HTTP
- زمان استارت ~۵ms در مقابل ~۹۰ms نود؛ مصرف RAM حدود ۱۳ برابر کمتر
- ابزار closed source است، ولی مثالها و مستندات عمومی هستن
- پکیجهای npm فقط در Island کار میکنن و سازگاریشون ۱۰۰٪ تضمینی نیست




