رد شدن پیشنویس استاندارد C++26 در رأیگیری ایزو؛ پایContracts در میان است — The result of the C++26 DIS ballot
خلاصه
پیشنویس استاندارد C++26 در رأیگیری DIS سازمان ایزو (ISO) رد شد که در تاریخ استانداردها بیسابقه است. این شکست عمدتاً ناشی از مناقشات پیرامون ویژگی قراردادها (Contracts) در زمان اجراست و آینده این نسخه و امکانات جدید آن را در هالهای از ابهام قرار داده است.
برای نخستین بار در تاریخ استانداردهای زبانهای برنامهنویسی ایزو (ISO/IEC SC22)، پیشنویس استاندارد یک نسخه از C++ موفق نشد حد نصاب لازم را در رأیگیری DIS (پیشنویس استاندارد بینالمللی) کسب کند. این پیشنویس که شامل ویژگیهای مهمی مانند بازتاب (Reflection)، کتابخانه اجرای موازی (std::execution)، سختسازی کتابخانهها و قراردادها (Contracts) بود، نتوانست آرای کافی را به دست آورد.
پسزمینه و جزئیات رأیگیری
رأیگیری در اواخر اکتبر ۲۰۲۶ بسته شد و نتایج نشان داد که پیشنویس نتوانسته دو شرط اصلی را برآورده کند:
- کسب حداقل دو سوم آرای موافق (نیاز به ۱۴ رأی بود که تنها ۱۲ رأی کسب شد).
- عدم تجاوز آرای مخالف از یک چهارم کل آرا (حد مجاز ۵ رأی مخالف بود که متأسفانه ۹ رأی مخالف ثبت شد).
کشورهای دانمارک، فنلاند، ایران، ایتالیا، ژاپن، لوکزامبورگ، رومانی، اسپانیا و سوئد به این پیشنویس رأی منفی دادند و فرانسه و ایرلند نیز ممتنع بودند. اگرچه متن رسمی نظرات کشورها هنوز به صورت کامل منتشر نشده است، اما شواهد و مخالفتهای پیشین نشان میدهد که محور اصلی اختلافنظرها روی ویژگی Contracts (قراردادها) و نحوه پیادهسازی و ارزیابی آنها تمرکز داشته است.
ویژگی Contracts و ریشه اختلافات
ویژگی قراردادها به توسعهدهندگان اجازه میدهد پیششرطها (pre) و پسشرطها (post) را مستقیماً در امضای توابع تعریف کنند تا هم به عنوان مستندات زنده و هم برای بررسیهای زمان اجرا مورد استفاده قرار گیرند:
double checked_sqrt(double x)
pre (x >= 0.0)
post (r : r >= 0.0) {
const double root = std::sqrt(x);
contract_assert(!std::isnan(root));
return root;
}
موضوع مورد بحث در کمیته WG21 این است که آیا این بررسیها باید توسط کامپایلر قابل حذف باشند یا تضمینهای محکمی در زمان اجرا ارائه دهند؛ مسئلهای که باعث اختلاف دیدگاههای جدی میان اعضای کمیته ملی کشورها شده است.
سناریوهای پیشرو برای C++26
پس از رد شدن یک DIS، ایزو مسیرهای مختلفی را پیش پای کمیته میگذارد که شامل مواردی چون چرخش مجدد پیشنویس، انتشار به عنوان یک مشخصات فنی (Technical Specification) یا اصلاح و رأیگیری دوباره است. گزینههای روی میز برای کمیته WG21 عبارتند از:
- پافشاری بر حفظ قراردادها و درخواست رأیگیری مجدد بدون تغییر طراحی.
- حذف موقت ویژگی جنجالی قراردادها تا بقیه استاندارد (شامل reflection و سایر ابزارها) بدون تأخیر بیشتر تصویب شود.
چرا این موضوع برای مهندسان نرمافزار مهم است؟
اگر در کدهای خود از پرچمهای آزمایشی کامپایلرها مانند -std=c++26 در GCC 16 استفاده میکنید، نیازی نیست کدهای خود را پاک کنید. کامپایلرها به پشتیبانی از ویژگیهای پیشنویس ادامه میدهند، اما این اتفاق نشان میدهد که مسیر نهایی استاندارد ممکن است با آنچه امروز در کامپایلرها پیادهسازی شده متفاوت باشد. جامعه توسعهدهندگان C++ باید منتظر تصمیمات نشستهای آتی کمیته بمانند تا مشخص شود آیا C++26 با تاخیر مواجه میشود یا با حذف برخی قابلیتها سریعتر به تصویب میرسد.
این مطلب بهصورت کاملاً خودکار و با هوش مصنوعی از مقالهٔ اصلی و بحث هکرنیوز تهیه شده و ممکن است خطا داشته باشد. حقوق مطلب اصلی متعلق به نویسندهٔ آن است. قوانین و گزارش مشکل