خبر فوریامروز

زبان‌های برنامه‌نویسی سیستم Rust، Zig و Mojo

پایان دوران باگ‌های کشنده سرریز بافر و آسیب‌پذیری‌های حافظه؛ چرا غول‌های فناوری امروزه کدهای بنیادین اینترنت را با Rust، Zig و Mojo بازنویسی می‌کنند؟

زبان‌های برنامه‌نویسی سیستم Rust، Zig
زبان‌های برنامه‌نویسی سیستم Rust، Zig و Mojo — عکس: آرشیو ماگ بیت
خلاصه در یک نگاه
  • تحلیل عمیق و فنی گذار بزرگ مهندسی نرم‌افزار امروزه از زبان‌های ناامن C و C++ به سمت نسل نوین زبان‌های برنامه‌نویسی سیستم شامل Rust، Zig 0.14 و Mojo. در این بررسی جامع، چرایی هشدارهای کاخ سفید و آژانس‌های امنیت سایبری بین‌المللی مبنی بر حذف آسیب‌پذیری‌های حافظه، کالبدشکافی مدل مالکیتی و قرض‌گیری در Rust، سادگی و کنترل سخت‌افزاری بدون سربار پنهان در Zig، و شتاب‌دهی برداری هوش مصنوعی و پارالل‌سازی بی‌نظیر سخت‌افزاری با Mojo تشریح شده است.
  • بررسی جامع ابعاد فنی و کاربردی توسط تحریریه ماگ بیت.
  • پیش‌بینی اثرات کوتاه‌مدت و بلندمدت بر اکوسیستم فناوری.

پایان تحمل خطاهای حافظه؛ چرا دوران مصونیت زبان‌های C و C++ به پایان رسید؟

بیش از پنجاه سال است که زبان‌های C و C++ ستون فقرات تمدن دیجیتال را تشکیل داده‌اند؛ از کرنل لینوکس و ویندوز گرفته تا پایگاه‌های داده و موتورهای مرورگر همگی بر بستری از اشاره‌گرهای خام نوشته شده‌اند. با این حال، گزارش‌های متفق‌القول آژانس امنیت ملی آمریکا (NSA)، مایکروسافت و گوگل در سال‌های اخیر نشان داد که بیش از ۷۰ درصد از کل آسیب‌پذیری‌های امنیتی روز-صفر در نرم‌افزارهای بحرانی جهان ریشه در یک معضل مشترک دارند: خطاهای ایمنی حافظه (Memory Safety Errors) نظیر دسترسی پس از آزادسازی (Use-After-Free) و سرریز بافر (Buffer Overflow).

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

این گذار ساختاری با الزامات نوین در حوزه امنیت شبکه و رمزنگاری پساکوانتومی و استاندارد امنیتی NIST هم‌راستا شده است، زیرا حتی پیشرفته‌ترین الگوریتم‌های رمزنگاری در صورت وجود باگ‌های نشت حافظه در سطح باینری، هیچ ارزشی نخواهند داشت.

بلوغ Rust امروزه تسخیر لینوکس، ویندوز و موتورهای مدرن مرورگر

زبان Rust امروزه از یک ابزار تحسین‌شده آکادمیک به ستون اصلی پروژه‌های زیرساختی تجاری تکامل یافته است. هسته اصلی برتری این زبان در مکانیزم انقلابی «مالکیت و قرض‌گیری» (Ownership & Borrow Checker) نهفته است. سیستم تایپ Rust به کامپایلر اجازه می‌دهد تا بدون نیاز به سیستم زباله‌روب (Garbage Collector) که سرعت اجرای نرم‌افزار را دچار مکث‌های غیرقابل‌پیش‌بینی می‌کند، زمان حیات هر متغیر را در زمان کامپایل ردگیری و آزادسازی حافظه را قطعی نماید.

در کرنل لینوکس نسخه ۶.۱۵، تمامی درایورهای مدرن شبکه، کنترلرهای ذخیره‌سازی NVMe و ماژول‌های امنیتی جدید منحصراً به زبان Rust نگاشته می‌شوند. این رویکرد نرخ کرش‌های مرتبط با نشت اشاره‌گرها را در سرورهای ابری تا ۹۱ درصد کاهش داده است.

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

نمودار بنچمارک امنیت حافظه، زمان کامپایل، توان عملیاتی پردازش چندرشته‌ای و سربار اجرایی Rust، Zig و Mojo
مقایسه بنچمارک عملکردی در پردازش تریلیون‌ها پکت شبکه در ثانیه؛ حذف کامل خطاهای Use-After-Free و سرریز بافر با زمان کامپایل بهینه و بهینه‌سازی‌های برداری SIMD خودکار

پدیده‌ای به نام Zig 0.14؛ نهایت سادگی، غیبت سربار پنهان و کامپایلر معجزه‌گر C

با وجود قدرت بلامنازع Rust، برخی از توسعه‌دهندگان سیستم به دلیل پیچیدگی‌های ذهنی بالای سیستم طول عمر (Lifetimes) و کندی زمان کامپایل در پروژه‌های عظیم سازمانی، به دنبال گزینه‌ای چابک‌تر بودند. زبان Zig که نسخه پایدار 0.14 آن امروزه منتشر شد، پاسخ صریح به این نیاز بود. فلسفه اصلی Zig بسیار روشن است: هیچ جریان کنترلی پنهان، هیچ تخصیص حافظه مخفی و هیچ رفتار ناشناخته در زمان اجرا وجود ندارد.

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

شاهکار دیگر Zig، کامپایلر یکپارچه آن است که به عنوان بهترین و سریع‌ترین جایگزین برای GCC و Clang عمل می‌کند. شما می‌توانید بدون نیاز به نصب هیچ ابزار جانبی، کدهای پیچیده C و C++ را با یک خط فرمان برای صدها پلتفرم مختلف کراس-کامپایل کنید. این قابلیت باعث شده تا Zig انتخاب اول برای توسعه میکروکنترلرها، فرم‌ورهای نهفته و کامپوننت‌های مدرن معماری WebAssembly و WASI 0.3 باشد.

طلوع Mojo؛ تلفیق سینتکس پایتون با سرعت C و شتاب‌دهی برداری هوش مصنوعی

چالش بزرگ دیگر عصر حاضر، شکاف عمیق میان زبان‌های مدل‌سازی هوش مصنوعی (نظیر Python) و زبان‌های پیاده‌سازی زیرساخت‌های با عملکرد بالا (نظیر CUDA و C++) بود. مهندسان ناچار بودند الگوریتم‌ها را در پایتون نمونه‌سازی کنند و سپس تیم‌های متخصصی ماه‌ها زمان صرف بازنویسی آن به کدهای پیچیده C++/CUDA نمایند. کریس لاتنر، خالق LLVM و Swift، با معرفی زبان Mojo این شکاف را برای همیشه محو ساخت.

زبان Mojo سینتکس آشنا، خوانا و دوستانه پایتون را حفظ کرده است، اما در باطن مجهز به سیستم انواع استاتیک، مکانیزم مدیریت طول عمر مشابه Rust و از همه مهم‌تر یکپارچگی عمیق با معماری MLIR (Multi-Level Intermediate Representation) است.

این یکپارچگی به برنامه‌نویس اجازه می‌دهد تا کدهایی بنویسد که مستقیماً بر روی ساختارهای برداری SIMD، تانسور کورهای انویدیا، پردازنده‌های گرافیکی AMD و حتی شتاب‌دهنده‌های TPU به صورت خودکار موازی‌سازی شوند. بنچمارک‌های سپتامبر نشان دادند که یک پیاده‌سازی ضرب ماتریسی در Mojo، تا ۳۵ هزار برابر سریع‌تر از پایتون خام و ۱۵ درصد سریع‌تر از کدهای دستی بهینه‌سازی‌شده CUDA اجرا می‌شود.

ماتریس تصمیم‌گیری معماران نرم‌افزار؛ کدام زبان را برای پروژه بعدی خود انتخاب کنیم؟

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

اگر با سیستم‌های امبدد، فرم‌ورک‌های میکروکنترلر، توسعه موتورهای بازی بلادرنگ با رندرینگ مستقیم و پروژه‌های نیازمند کامپایل سریع و بی‌پیرایه سر و کار دارید، Zig 0.14 بهینه‌ترین ابزار موجود در دستان شماست. در نهایت، اگر در تقاطع توسعه هوش مصنوعی، خطوط لوله آموزش مدل‌های زبانی و بازنویسی اپراتورهای ریاضیاتی پردازش یادگیری عمیق فعالیت دارید، Mojo انتخابی است که سرعت نوآوری شما را ده برابر خواهد کرد.

دوران کنونی نماد تولد دورانی است که در آن مهندسان سیستم دیگر نیازی به قربانی کردن امنیت برای رسیدن به سرعت یا فدا کردن خوانایی کد برای دسترسی به سخت‌افزار ندارند؛ عصر زرین مهندسی کدهای امن، سریع و پایدار سرانجام فرا رسیده است.

این مطلب را با دوستانتان به اشتراک بگذارید
ف
نوشته‌ی
فائزه راهب

روزنامه‌نگار حوزه‌ی فناوری؛ علاقه‌مند به روایت آدم‌ها و تغییراتی که فناوری در زندگی روزمره ایجاد می‌کند.

همه‌ی مطالب
مطالب پیشنهادی ماگ بیت

بیشتر از فناوری

مشاهده همه