زیگ چیست و چرا ساخته شد؟
دهههاست که زبانهای C و C++ تکیهگاه اصلی برنامهنویسی سیستمها هستند، اما واقعیت این است که ۵۰ سال قدمت برای استانداردهای امروز میتواند آسیبپذیر باشد. تخمینها نشان میدهد حدود ۸۰ درصد مشکلات امنیتی مستقیماً به سرریز بافر و مدیریت حافظه مربوط میشود. رقبای بالقوه زیادی ظاهر شدند، اما هر کدام با افزودن لایههای انتزاع و پیچیدگی، فاصله را بیشتر کردند.
زبان برنامه نویسی زیگ راهی کاملاً متفاوت را انتخاب کرده است.
اندرو کلی این زبان را در سال ۲۰۱۶ معرفی کرد. هدف تنها یک چیز است: ارائه نسخهای دقیقتر، شفافتر و قابلاعتمادتر از C. شعار رسمی تیم توسعه شفاف است: مقاومت، بهینگی و نگهداری آسان. زیگ نه رقیب Rust است و نه تکمیلکننده Go. این زبان فقط بخشهای پرریسک و مبهم C را جراحی کرده است. از نظر آمار، زیگ در رتبه ۳۹
شاخص TIOBE قرار دارد و روند رشد آن محسوس است. پروژههای بزرگ مثل مفسر جاوااسکریپت
Bun، شبیهساز Dreamcast به نام Deecy و سیستم مدیریت صفحهنمایش River در Wayland، همگی با این زبان نوشته شدهاند. جامعه توسعهدهندگان زیگ کوچک اما کاملاً متمرکز بر کیفیت است.
قانون صفر تعجب
تفاوت بنیادین زیگ با سایر زبانهای مدرن در چیزهایی است که
ندارد. حذف موارد زیر مانند یک مانیفست طراحی عمل میکند:
- بدون جریان کنترل پنهان
- بدون تخصیص حافظه پنهان
- بدون پیشپردازنده
- بدون ماکرو
- بدون بازنویسی عملگرها
- بدون استثنا
- بدون خواص پنهان
در زبانهایی مثل C++ یا C#، یک عمل ساده مانند جمع دو متغیر میتواند مستقیماً یک عملگر بازنویسیشده را فعال کند. یک انتساب ساده ممکن است سازنده کپی را فراخوانی کند. هر خط کد پتانسیل پرتاب یک استثنا و تغییر ناگهانی مسیر برنامه را دارد. اگر تا به حال ساعتی را صرف دیباگ کدی کردهاید که در ظاهر ساده، حافظه را مخفیانه تخصیص میدهد، با این چالش آشنا هستید.
زیگ با این اصل شکل میگیرد: اگر کدی شبیه فراخوانی تابع نیست، تابعی را صدا نمیزند. عبارت
a + b قطعاً جمع ریاضی است. توالی
foo() و
bar() تضمینشده و بدون وقفه اجرا میشود. این ظاهراً محدودکننده بودن، در دیباگ کردن هسته سیستمها و مدیریت امنیت، بهترین دوست توسعهدهنده است. کد دقیقاً همان کاری را میکند که میگوید.
عبور از ماکسیممهای محلی
فلسفه طراحی زیگ با افزودن ویژگیهای جدید شکل نگرفته، بلکه با زیر سوال بردن اصول از پیش پذیرفتهشده پدید آمده است. اندرو کلی در توضیح رویکرد این زبان میگوید، هدف جدا کردن لایههای انتزاعی است که به عنوان پیشفرض پذیرفته شدهاند و بررسی منطق پشت آنهاست. آیا واقعاً باید به این شکل عمل کند؟
اصل بنیادین زیگ بر این استوار است که پروژهها نباید در بهترین حالت ممکنِ منطقه خود متوقف شوند. توسعهدهندگان به جای راضی شدن به راهحلهای نیمهتمام، به دنبال یک استاندارد ایدهآل هستند. دستور زبان زیگ در یک فایل گرامر ۵۸۰ خطی PEG تعریف شده که تمام زبانی را مشخص میکند. این شفافیت باعث میشود حتی توسعهدهندهای که تخصص عمیقی در زیگ ندارد، بتواند کدها را به راحتی بخواند، درک کند و اشکالزدایی perform کند.
آینده برنامهنویسی سیستمها
زیگ تنها یک ابزار جدید نیست؛ پاسخ مستقیم به نیاز روز جامعه فنی برای کدبیسهایی است که با توسعهدهنده درگیر نمیشوند. وقتی مدیریت حافظه و کنترل جریان برنامه به صفر باورده میشود، امنیت نرمافزارهای حیاتی به طور چشمگیری ارتقا پیدا میکند. با رشد پروژههای عملیاتی و پذیرش تدریجی در اکوسیستم متنباز، مسیر برنامهنویسی سیستمها به سمت شفافیت و مهندسی دقیق پیش میرود. نگاهی به چند سال آینده نشان میدهد که زبانهای صریح مانند زیگ میتوانند استانداردهای جدیدی را در زیرساختهای نرمافزاری تعریف کنند.