وقتی گریدون هور در سال ۲۰۰۶ از یک آسانسور معیوب در ساختمان آپارتمان خود دچار اختلال شد، کَمّی می‌توانست حدس بزند که این تجربه بی‌ارزش، بذر یک انقلاب در برنامه‌نویسی سیستمی را در کار خواهد انداخت. او زبانی می‌خواست که به تعبیر خودش، «تکنولوژی از گذشته برای نجات آینده از خودِ آینده» باشد. حاصل تلاش‌های او و تیمی کهبعداً در موزیلا شکل گرفت، زبانی شد که امروز نه تنها موتور مرورگر فایرفاکس، بلکه زیرساخت‌های حیاتی لینوکس، درایورهای ویندوز و ابزارهای کلان‌مقیاس ابری را نیز در آغوش گرفته است.

پایان دوره مدیریت حافظه دستی و زباله‌روب

دهه‌هاست توسعه‌دهندگان سی‌پلاس‌پلاس با الگوی RAII (Resource Acquisition Is Initialization) هم‌زندگی می‌کنند. ایده ساده و قدرتمند: عمر منبع، عمر آبجکت است. وقتی آبجکت از حوزه دید خارج می‌شود، دیструкترش فراخوانی شده و حافظه آزاد می‌گردد. این قرارداد کار می‌کند—تا زمانی که برنامه‌نویس اشتباه کند. یک مالکیت مشترک فراموش‌شده، یک اشاره‌گر خالی که چک نشده، یا یک جابجایی نادرست می‌تواند منجر به use-after-free، double-free یا data race شود. کامپایلر سی‌پلاس‌پلاس این خطاها را در زمان کامپایل نمی‌بیند؛ آنها در محیط اجرا 자신을 به نمایش می‌گذارند.

راست مسیر متفاوتی را برگزید. به جای اعتماد به قرارداد، مالکیت را قانون primera زبان کرد. هر مقدار دقیقاً یک مالک دارد. مالکیت یا منتقل می‌شود (move) یا امانت داده می‌شود (borrow). در هر لحظه، یا یک مرجع قابل‌تغییر (mutable reference) وجود دارد، یا تعداد دلخواهی مرجع غیرقابل‌تغییر (immutable references)—هرگز هر دو باهم. این قواعد توسط ممیز امانت (borrow checker) در زمان کامپایل اجرا می‌شوند. نتیجه؟ کلاس‌های کامل باگ‌های حافظه قبل از اجرای اولین خط کد از بین می‌روند.

از پروژه شخصی تا استقرار در هسته لینوکس

مسیر از پروژه شخصی هور در ۲۰۰۶ تا انتشار راست ۱.۰ در مه ۲۰۱۵ پر از تصمیمات سخت است. کامپایلر اولیه در OCaml نوشته شده بود. سیستم typestate، کلمه‌کلید pure، انواع اشاره‌گر تخصصی، حتی کانال‌ها—همه قربانی یک تصمیم استراتژیک شدند: مالکیت تنها استراتژی مدیریت حافظه باشد. گاربیج‌کالککتور هم در ۲۰۱۳ به ندرت استفاده می‌شد و حذف گردید. لوگو زنجیر دندانه دوچرخه، دقت مکانیکی این تصمیم را نمادین کرد.

امروز، راست با بیش از ۱،۴۰۰ مشارکت‌کننده در کامپایلر و صدها هزار crate در Crates.io، زبانی است که لینوس توروالدز آن را برای هسته لینوکس پذیرفت، مایکروسافت برای بازنویسی اجزای حیاتی ویندوز از آن استفاده می‌کند، و AWS، Cloudflare و Discord زیرساخت‌های بحرانی خود را با آن می‌سازند.

عملکرد بدون سربار: انتزاعات صفرهزینه

فلسفه راست در یک جمله خلاصه می‌شود: «چه چیزی در زمان اجرا هزینه ندارد، در زمان اجرا وجود ندارد.» با حل مدیریت حافظه در کامپایل، راست از توقف‌های ناپیش‌بین گاربیج‌کالککتور و سربار مرجع‌شماری رها شده است. این ویژگی، به همراه ابزار زنجیره‌ای مدرن Cargo که ساخت، تست، مستندسازی و مدیریت وابستگی را یکپارچه کرده، راست را برای سیستم‌های نهفته، سرویس‌های شبکه با تأخیر پایین، ابزارهای خط‌فرمان و ماژول‌های WebAssembly انتخاب اول کرده است.

مقایسه با RAII: اعتماد در برابر تضمین

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

سی‌پلاس‌پلاس مدرن با std::unique_ptr، std::shared_ptr و std::span گام‌های بلندی به سمت ایمنی برداشته، اما همچنان نمی‌تواند از دو‌داده (data race) در زمان کامپایل جلوگیری کند—مگر با ابزارهای تحلیل استاتیک جداگانه که بخشی از زبان نیستند.

تفاوت‌های کلیدی در یک نگاه

  • زمان تشخیص خطا: RAII در زمان اجرا (Runtime) / راست در زمان کامپایل (Compile-time)
  • مکانیزم تضمین: RAII مبتنی بر قرارداد و انضباط برنامه‌نویس / راست مبتنی بر تایپ‌سیستم و ممیز امانت
  • استثناهای ایمنی: RAII در صورت نقض قرارداد ناامن است / راست کد ناامن را کامپایل نمی‌کند
  • سربارRuntime: هر دو صفرهزینه (Zero-cost) اما راست بدون نیاز به GC یا Ref-counting اجباری

آینده‌ای که در حال شکل‌گیری است

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