هسته لینوکس 5.18 قصد دارد اجازه استفاده از استاندارد زبان C C11 را بدهد

در حین بحث درباره مجموعه ای از وصله ها برای رفع مشکلات مربوط به Spectre در کد لیست پیوندی، مشخص شد که اگر کد C مطابق با نسخه جدیدتر استاندارد به هسته اجازه داده شود، مشکل را می توان با ظرافت بیشتری حل کرد. در حال حاضر، کد هسته اضافه شده باید با مشخصات ANSI C (C89) مطابقت داشته باشد که در سال 1989 شکل گرفت.

یک مشکل مربوط به طیف در کد به دلیل استفاده مداوم از یک تکرار کننده تعریف شده جداگانه بعد از حلقه ایجاد شد - یک ماکرو برای تکرار روی عناصر یک لیست پیوندی استفاده می شود، و چون تکرار کننده حلقه به آن ماکرو منتقل می شود، خارج از خود حلقه تعریف شده و پس از حلقه در دسترس باقی می ماند. استفاده از استاندارد C99 به متغیرهای حلقه اجازه می دهد تا در یک بلوک for() تعریف شوند، که بدون نیاز به راه حل مشکل را حل می کند.

لینوس توروالدز با ایده اجرای پشتیبانی از مشخصات جدیدتر موافقت کرد و پیشنهاد انتقال هسته 5.18 به استفاده از استاندارد C11 را ارائه کرد که در سال 2011 منتشر شد. در طول آزمایش اولیه، مونتاژ در GCC و Clang در حالت جدید بدون انحراف گذشت. اگر هیچ مشکل غیرمنتظره‌ای در طول آزمایش دقیق‌تر ایجاد نشد، گزینه «--std=gnu5.18» در اسکریپت‌های ساخت هسته 89 با «--std=gnu11 -Wno-shift-negative-value» جایگزین می‌شود. امکان استفاده از استاندارد C17 نیز در نظر گرفته شد، اما در این مورد لازم است حداقل نسخه پشتیبانی شده GCC افزایش یابد. گنجاندن پشتیبانی C11 با الزامات فعلی نسخه GCC (5.1) مطابقت دارد.

منبع: opennet.ru

اضافه کردن نظر