تصور کنید خطای شبکه دقیقاً مثل یک اشارهگر تهی (Null Pointer) باشد؛ چیزی که کامپایلر اصلاً اجازه نمیدهد کد شما را با آن منتشر کنید. این وعدهٔ اصلی Wyzer است، زبان برنامهنویسی کامپایلشدهای که در ۷ اوت ۲۰۲۶ معرفی شد تا مرز میان حافظه، رشتهها (Threads) و شبکهها را از بین ببرد. در حالی که اکثر زبانها با حافظه، رشتهها و شبکهها به عنوان مفاهیم مجزا برخورد میکنند، Wyzer آنها را تحت یک قانون مالکیت واحد یکپارچه میکند. این زبان با اعمال همان سختگیریهایی که برای آدرسهای حافظه به کار میبرد روی پیامهای شبکه و وقفههای سختافزاری، قصد دارد دستههای کاملی از شکستهای سیستمهای توزیعشده را پیش از آنکه کد اجرا شود، حذف کند. همانطور که آتیکش شارما (Atiksh Sharma) بیان میکند: «سادگی به معنای نبود قدرت نیست، بلکه قدرتی است بدون تظاهر.»
بسیاری از برنامهنویسان امروز با یک چشمانداز تکهتکه از ایمنی مواجهاند. زبان Rust ایمنی حافظه را در یک فرآیند تضمین میکند، در حالی که زبانهایی مثل Go، Java، C# یا Python با استفاده از جمعآوریکننده زباله (Garbage Collector) — شبیه به یک تیم نظافتچی که مدام دنبال اشیاء بلااستفاده در حافظه میگردد تا آنها را پاک کند — پیچیدگی را کم میکنند اما پیشبینیپذیری سیستم را میگیرند که این موضوع برای سیستمهای بلادرنگ (Real-time) یا سطح پایین مضر است. همانطور که در مستندات Wyzer در گیتهاب اشاره شده است، هیچیک از این ابزارها بهطور بومی جلوی بنبستهای توزیعشده (Distributed Deadlocks)، ناهماهنگی پروتکلها یا مسائل مربوط به صحت عملکرد بین سرویسهای مختلف را نمیگیرند.
Wyzer تلاش میکند این شکاف را با یک مدل مالکیت واحد پر کند. این زبان، یک زبان با تایپ استاتیک و منبعمحور است که میخواهد ایمنی Rust را بدون منحنی یادگیری تند آن فراهم کند. در واقع Wyzer سعی میکند سه دامنه متمایز را زیر یک چتر معنایی واحد جمع کند.
موتور فنی
طبق مستندات این پروژه در گیتهاب، معماری Wyzer بر دو مکانیسم اصلی استوار است:
- مدل حافظه Perceus: این سیستم شمارش ارجاع که از زبانهای Koka و Lean 4 گرفته شده، مدیریت حافظه را بدون نیاز به جمعآوریکننده زباله یا قوانین پیچیده Lifetime انجام میدهد. این مدل اجازه میدهد کدی بنویسید که در ظاهر دادهها را تغییر نمیدهد (Functional)، اما کامپایلر در پشت صحنه آن را بهینهسازی میکند تا اگر تنها یک مالک برای داده وجود داشت، حافظه را مستقیماً بهروز کند. این امر باعث میشود سرعت اجرای آن با زبان C برابری کند.
- برنامهنویسی کورئوگرافیک (Choreographic Programming): این رویکرد به توسعهدهنده اجازه میدهد یک قانون شبکه واحد بنویسد و کامپایلر بر اساس آن، کدهای مجزا برای هر کامپیوتر شرکتکننده در سیستم تولید کند. اگرچه این یک حوزه شناخته شده در تحقیقات آکادمیک است، اما Wyzer یکی از معدود تلاشهای جدی برای آوردن این مفهوم به یک زبان برنامهنویسی کاربردی و عمومی است.
گسترش دامنه کورئوگرافی
آنچه Wyzer را متمایز میکند این است که ایدهی کورئوگرافی را فراتر از ارتباطات شبکه میبرد. این زبان از همان مکانیسم برای مدیریت رشتهها (Threads) و وقفههای سختافزاری استفاده میکند.
با اعمال یک قانون واحد بر حافظه، رشتهها و شبکه، کامپایلر میتواند ایمنی هر سه را اثبات کند. به این معنا که برنامهنویس فقط یک قانون را یاد میگیرد تا چرخه حیات یک منبع را مدیریت کند، چه آن منبع یک متغیر محلی باشد و چه پیامی که در یک خوشه (Cluster) ارسال میشود.
نحو و طراحی زبان
طراحی Wyzer بر صراحت و سادگی متمرکز است تا یادگیری آن نسبت به Rust راحتتر باشد. این زبان به گونهای طراحی شده که ساده، صریح و خوانا باشد. متغیرها بهطور پیشفرض تغییرناپذیر (Immutable) هستند و با let تعریف میشوند، در حالی که برای حالت تغییرپذیر باید از var استفاده کرد. ثابتها نیز با const برای ارزیابی در زمان کامپایل تعریف میشوند.
به عنوان مثال، یک تابع ساده در این زبان چنین است:
fn main() {
const MAX: u32 = 100;
let x: u32 = 10;
var y: u32 = 20;
y = y + x;
std::io::println(y);
}
دادهها از طریق استراکتها (Structs) مدیریت میشوند؛ مانند یک Point با مختصات x و y که در آن فیلدها بهطور مستقیم در دسترس هستند. جریان کنترل (Control Flow) استاندارد است و از حلقههای if/else ،while و for پشتیبانی میکند. نکته قابل توجه این است که در این زبان نیازی به قرار دادن پرانتز دور شرایط حلقهها نیست.
مدیریت خطا در Wyzer از استثناهای پنهان یا جداسازی async/await پرهیز میکند. به نقل از توسعهدهندگان، توابعی که احتمال شکست دارند، نوع Result<T, E> را برمیگردانند و برنامهنویس مجبور است با استفاده از عبارت match هر دو حالت موفقیت (Ok) و خطا (Err) را صراحتاً مدیریت کند. از آنجایی که match یک عبارت (Expression) است، زمانی که به عنوان یک دستور مستقل استفاده شود، به یک نقطه-ویرگول (Semicolon) در انتها نیاز دارد.
اصول طراحی هسته
تیم توسعهدهنده مجموعهای از ارزشهای سختگیرانه را برای پیشبرد توسعه دنبال میکند:
- یک راه برای هر کار: اگر دو راه برای نوشتن یک چیز وجود داشته باشد، یکی حذف میشود تا ابهام از بین برود.
- بدون جادوی پنهان: منطقهای مهم باید در کد قابل مشاهده باشند، هرچند تیم تلاش میکند کد را تمیز و به دور از کدهای تکراری (Boilerplate) غیرضروری نگه دارد.
- هدایت توسط کامپایلر: کامپایلر باید موارد را بهطور خودکار تشخیص دهد، اما در نقاطی که منطق پیچیده میشود، قوانین صریح لازم است.
- صداقت: مشکلات حلنشده بهوضوح علامتگذاری میشوند تا مشارکتکنندگان بدانند دقیقاً کجا باید کار کنند.
حل مسئله توزیعشده
در حالی که Rust ایمنی را در داخل یک فرآیند تضمین میکند، Wyzer این دایره را به شبکه گسترش میدهد. منطق اصلی این است: «وقتی از یک منبع استفاده کردید، دیگر نمیتوانید از آن استفاده کنید». این قانون برای حافظه، پیامهای شبکه و وقفههای سختافزاری یکسان است.
با استفاده از کورئوگرافی، کامپایلر قوانین شبکه را استخراج کرده و آنها را بهطور خودکار بررسی میکند. این روش باعث میشود بنبستها و پیامهای گمشده قبل از اجرای کد شناسایی شوند و دیگر نیازی نیست برنامهنویس دو برنامه مجزا بنویسد و صرفاً «امیدوار باشد» که آنها بهدرستی با یکدیگر ارتباط برقرار کنند.
وضعیت فعلی توسعه
این پروژه در حال حاضر در مرحله تحقیقاتی اولیه است. توسعهدهندگان صراحتاً اعلام کردهاند که چندین مشکل بزرگ هنوز حل نشده و زبان برای محیطهای عملیاتی (Production) آماده نیست و فعلاً به عنوان یک اثبات مفهوم (Proof-of-Concept) برای یک مدل ایمنی یکپارچه عمل میکند.
جالب است بدانید که توسعه این زبان با کمک هوش مصنوعی صورت گرفته است؛ از تولید پیامهای Commit و تحقیق درباره مدل Perceus و برنامهنویسی کورئوگرافیک گرفته تا ارائه ایدههایی برای طراحی لوگوی Wyzer. این رویکرد در راستای تحولاتی است که ابزارهای مدرن کدنویسی ایجاد کردهاند، مانند استانداردسازی دسترسی امن عاملهای هوش مصنوعی به کدبیس که تعامل بین AI و محیط توسعه را تسهیل میکند.
برای کسانی که میخواهند مشارکت کنند، تیم یک سرور دیسکورد و فایل RESEARCH.md را برای راهنمایی در حل موانع معماری باقیمانده فراهم کرده است.
این تغییر به سمت مالکیت یکپارچه، نویدبخش آیندهای است که در آن تمایز بین برنامهنویسی «محلی» و «توزیعشده» از بین میرود. اگر Wyzer موفق شود، بار ذهنی مدیریت وضعیت شبکه به سطح مدیریت یک متغیر محلی کاهش مییابد.
برای یک برنامهنویس معمولی، این به معنای بیدار نشدن در نیمهشب برای رفع بنبستهای توزیعشده و مسیری سریعتر برای نوشتن سیستمهای سطح پایین با کارایی بالا، بدون نیاز به یادگیری دشوار Borrow Checker است.
توسعهدهندگان علاقهمند میتوانند مستندات رسمی پروژه در گیتهاب را که شامل متغیرها، تایپها، جریان کنترل، توابع، استراکتها و مدل حافظه Perceus است، بررسی کنند.
گام بعدی شما
- اگر با Rust دستوپنجه نرم کردهاید، مستندات مدل حافظه Perceus در گیتهاب Wyzer را بخوانید تا ببینید مدیریت حافظه بدون Borrow Checker چگونه ممکن است.
- برای کسانی که روی سیستمهای توزیعشده کار میکنند، بررسی مفهوم برنامهنویسی کورئوگرافیک میتواند دیدگاه شما را نسبت به طراحی APIهای شبکه تغییر دهد.
- مخزن گیتهاب پروژه را دنبال کنید تا متوجه شوید چه زمانی این زبان از مرحله تحقیقاتی به نسخه آزمایشی میرسد.
اما داستان سختافزاری این تحول حتی شگفتانگیزتر است — به تحلیل ما دربارهی تراشههای Blackwell مراجعه کنید.




گفتگو