Gooey: فریمورک رابط کاربری GPU برای Zig
خلاصهٔ کاملتر
تو این مخزن، Gooey بهعنوان یه فریمورک رابط کاربری شتابگرفته با GPU برای زبان Zig معرفی شده. هدفش سه پلتفرمه: macOS با Metal، لینوکس با Vulkan روی Wayland، و مرورگر با WASM و WebGPU. البته تو توضیحات اومده که مسیر WebGPU/WASM فعلاً بهخاطر یه مشکل در Zig 0.16 بالادست مسدوده. رندر روی مک و لینوکس هم با ضدلبهپلهشدگی MSAA انجام میشه.
مدل برنامهنویسیش اعلانی و کامپوننتمحوره. یه چیدمان شبیه فلکسباکس داره و کار با primitiveهایی زیر فضای نام ui.* ساخته میشه. نکتهٔ معماری مهمش جداسازی حالت از رابطه: یه شیء به اسم Cx مسئول state و هندلرها و فوکوسه، و ui.* فقط چیدمان رو میسازه. به گفتهٔ سازنده، الگوی «حالتِ خالص» (Pure State) باعث میشه منطق برنامه بدون درگیرشدن با رابط کاربری کاملاً قابلتست باشه و رندر هم خودکار دوباره انجام شه.
فهرست ویژگیها نسبتاً بلنده: سیستم انیمیشن با easing، سیستم entity برای ساخت و حذف پویای موجودیتها با پاکسازی خودکار، ویجتهای ماندگار مثل TextInput و TextArea و Checkbox و کانتینرهای اسکرول، رندر متن بومی هر پلتفرم (CoreText روی مک، FreeType/HarfBuzz روی لینوکس)، شیدرهای سفارشی Metal/GLSL، کشیدنورهاکردن نوعامن، پشتیبانی از IME برای ورود متن چندزبانه، و دسترسیپذیری با صفحهخوانهایی مثل VoiceOver و Orca. حتی افکت شیشهٔ مایع (Liquid Glass) مخصوص macOS 26 رو هم داره.
مهمترین ادعای پروژه نداشتن وابستگیه: فایل build.zig.zon هیچ پکیج Zig خارجی فهرست نکرده و فقط به فریمورکها و کتابخونههای سیستمی لینک میشه؛ حتی بایندینگهای رانتایم Objective-C هم داخل خود درخت پروژه قرار داده شدن. برای اجرا به Zig نسخهٔ 0.16 به بالا نیاز هست و یه مجموعه دستور zig build run-* برای نمونههای مختلف مثل شمارنده، تودو، انیمیشن و لیست مجازیسازیشده با ۱۰ هزار آیتم آمادهست.
برای نشوندادن سبک API، یه نمونهٔ تودو آورده شده که حالتش کاملاً خالص و بدون اطلاع از رابط کاربریه و با تستهای واحد پوشش داده میشه. این تیکه نشون میده چطور یه TextInput به فیلد draft در state وصل (bind) میشه و دکمهٔ Add یه command روی همون state رو صدا میزنه:
ui.hstack(.{ .gap = 8, .alignment = .center }, .{
TextInput{ .id = draft_input_id, .placeholder = "What needs doing?", .bind = &s.draft, .fill_width = true },
Button{ .label = "Add", .on_click_handler = cx.command(AppState.addTodo) },
}),سازنده تأکید کرده که پروژه تو مرحلهٔ اولیهٔ توسعهست و API هنوز در حال تکامله. بهعنوان نمونهٔ یه برنامهٔ واقعی هم به chat-zig اشاره شده؛ یه کلاینت Claude که با استک std.Io در Zig 0.16 برای HTTP ناهمزمان نوشته شده.
نکات کلیدی:
- فریمورک رابط کاربری GPU برای Zig با هدف macOS (Metal)، لینوکس (Vulkan) و مرورگر (WASM/WebGPU)
- سبک اعلانی و کامپوننتمحور با جداسازی حالت از رابط از طریق شیء Cx
- صفر وابستگی Zig خارجی؛ فقط لینک به فریمورکهای سیستمی
- نیازمند Zig 0.16+؛ مسیر WebGPU/WASM فعلاً بالادست مسدوده
- هنوز در توسعهٔ اولیه و API در حال تغییره




