آخرین اخبار
همهٔ اخبار
امنیت وب و نرم‌افزار گزارش بحرانیت ۲/۱۰

اختلاف بر سر قابلیت Contracts؛ انتشار استاندارد C++26 با چالش مواجه شد

اختلاف بر سر قابلیت Contracts؛ انتشار استاندارد C++26 با چالش مواجه شد

انتشار نسخه جدید زبان برنامه‌نویسی C++ به دلیل اختلافات فنی بر سر قابلیت Contracts (قراردادها) با تأخیر مواجه شده است. این قابلیت که هدف آن ارتقای امنیت کد است، باعث ایجاد شکاف عمیقی میان توسعه‌دهندگان و متولیان فنی این زبان شده است.

ماهیت قابلیت Contracts و اهمیت امنیتی آن

قابلیت Contracts به توسعه‌دهندگان اجازه می‌دهد تا پیش‌شرط‌ها (Preconditions)، پس‌شرط‌ها (Postconditions) و تأکیدها (Assertions) را به کد اضافه کنند. این بررسی‌ها در زمان اجرا (Runtime) کمک می‌کنند تا خطاهای برنامه‌نویسی که منجر به Undefined Behavior (رفتار تعریف‌نشده) می‌شوند، شناسایی و متوقف شوند. این رویکرد که با نام Design by Contract شناخته می‌شود، پیش از این در زبان‌هایی مانند Ada و Eiffel پیاده‌سازی شده بود.

تقابل دیدگاه‌ها: امنیت در برابر پیچیدگی

بجارن استروستروپ (Bjarne Stroustrup)، خالق C++، با نسخه فعلی این پیشنهاد مخالف است. این تحلیل تأکید دارد که پیاده‌سازی فعلی شتاب‌زده، نامنظم و قدیمی است و می‌تواند منجر به افزایش پیچیدگی و حجیم شدن (Bloat) زبان شود؛ موضوعی که به عنوان یک تهدید وجودی برای C++ توصیف شده است. در مقابل، برخی از اعضای کمیته استانداردسازی معتقدند که این قابلیت برای کاهش حفره‌های امنیتی ضروری است و مخالفت با آن در این مرحله از چرخه انتشار، به اعتبار زبان آسیب می‌زند.

شکست در رای‌گیری ISO و پیامدهای آن

در ماه اکتبر، پیش‌نویس استاندارد بین‌المللی (DIS) برای C++26 در رای‌گیری ISO شکست خورد. طبق قوانین ISO، تعداد آرای منفی نباید از ۲۵ درصد تجاوز کند، اما در این مورد، قابلیت Contracts نقطه اصلی اختلاف بود و باعث شد استاندارد مورد تأیید قرار نگیرد.

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

سناریوهای پیش‌رو

با توجه به شکست رای‌گیری، احتمال دارد نام این نسخه به C++27 تغییر یابد. در حال حاضر سه گزینه پیش روی گروه کاری WG21 قرار دارد:

  • حذف Contracts: جدا کردن این قابلیت از مشخصات فعلی برای اینکه سایر بخش‌های C++26 بتوانند منتشر شوند.
  • انتقال به مشخصات فنی مجزا: انتقال بحث قراردادها به یک سند فنی جداگانه برای اصلاح و توسعه بیشتر.
  • بازبینی جزئی و رای‌گیری مجدد: اعمال تغییرات کوچک و تلاش برای دستیابی به توافق در نشست‌های آتی.