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

زبان‌های سیستمی ایمن‌حافظه Rust و Zig و Mojo

خداحافظی اجباری با C/C++؛ امروزه همگرایی زبان‌های ایمن‌حافظه Rust، Zig و Mojo با شتاب‌دهی کامپایلری MLIR، زیرساخت‌های ابری و تراشه‌های ناهمگن را دگرگون ساخته است.

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

الزام بین‌المللی ایمنی حافظه (Memory Safety) و غروب تدریجی میراث ناامن C و C++

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

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

همان‌طور که در واکاوی عامل‌های خودسامان‌بخش مهندسی نرم‌افزار تشریح شد، ابزارهای خودکار بازنویسی کد نیز سرعت این مهاجرت عظیم را ده‌ها برابر کرده‌اند و کدهای قدیمی را به ساختارهای اثبات‌پذیر ریاضیاتی تبدیل می‌نمایند.

مثلث قدرت زبان‌های نوین سیستمی؛ نقش‌آفرینی مکمل Rust و Zig و Mojo

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

در سوی دیگر، زبان زیگ (Zig) قلب مهندسان سیستم‌های تعبیه‌شده (Embedded Systems)، درایورها و ابزارهای کامپایلری را تسخیر کرده است. زیگ با شعار «عدم کنترل پنهان، عدم تخصیص حافظه مخفی و عدم پرتاب استثناءهای نامرئی»، سادگی بی‌نظیر C را با سیستم تخصیص‌دهنده‌های صریح حافظه (Explicit Allocators) پیوند زده و کدهای تولیدی آن از کمترین حجم باینری و بیشترین سرعت بوت برخوردارند.

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

نمودار بنچمارک مقایسه مصرف حافظه، راندمان اجرا و نرخ خطاهای ایمنی در Rust، Zig و Mojo دوران کنونی
بنچمارک سیستم‌های ایمن‌حافظه دوران کنونی: مقایسه راندمان همزمانی، سرعت کامپایل و میزان نشت حافظه؛ معماری مالکیت و قرض‌گیری Rust ایمنی کامل را بدون سربار GC تضمین می‌کند، در حالی که متغیرهای صریح تخصیص حافظه در Zig و شتاب‌دهی MLIR در Mojo رکوردهای پردازش فراموازی را شکسته است.

معماری کامپایلری MLIR و بهره‌برداری حداکثری از تراشه‌های ناهمگن مدرن

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

با فناوری MLIR، کامپایلر کد را در لایه‌های انتزاعی گوناگون ارزیابی می‌کند و می‌تواند آن را متناسب با معماری پردازنده هدف، چه یک پردازنده مرکزی ARM باشد، چه پردازنده گرافیکی یا شتاب‌دهنده‌های تانسوری NPU، به بهینه‌ترین دستورالعمل‌های برداری (SIMD) ترجمه نماید.

این سطح از بهره‌وری با پیشرفت سخت‌افزارهایی چون حافظه‌های اسپینترونیک SOT-MRAM و STT-MRAM گره خورده است؛ زیرا کدهای سیستمی مدرن اکنون می‌توانند مستقیماً ساختارهای داده را روی حافظه‌های پایا با صفر تاخیر نشت انرژی نگه‌داری کنند و پایداری استک را در تمام چرخه‌ها حفظ نمایند.

استقرار سازمانی؛ بازنویسی درایورها، پایگاه‌های داده و انکلاوهای امنیتی

پیامدهای عملی این دگرگونی در تمام بخش‌های صنعت آی‌تی مشاهده می‌شود. هسته لینوکس در نسخه جدید دوران کنونی رسماً بخش بزرگی از درایورهای شبکه و سیستم‌های فایل خود را به ماژول‌های Rust مجهز کرده است. پایگاه‌های داده نسل نو با زیگ پیاده‌سازی شده‌اند تا امکان پیش‌بینی دقیق میزان مصرف رم و جلوگیری مطلق از خطای Out-Of-Memory در محیط‌های ابری کانتینری میسر شود.

همچنین در حوزه امنیت ابر و محیط‌های محاسبات محرمانه، همان‌گونه که در معرفی رایانش امن و محیط‌های اجرایی معتمد RISC-V بررسی شد، نوشتن کدهای درون انکلاوهای ایزوله با زبان‌های ایمن‌حافظه یک ضرورت حیاتی است تا از هرگونه نشت کلیدهای رمزنگاری در برابر حملات کانال جانبی محافظت گردد.

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

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

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

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

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

مشاهده همه