Linux kernel 5.18 C dili standartı C11-in istifadəsinə icazə verməyi planlaşdırır

Əlaqədar siyahı kodunda Spectre ilə əlaqəli problemləri həll etmək üçün bir sıra yamaqlar müzakirə edilərkən, standartın daha yeni versiyasına uyğun gələn C kodunun nüvəyə buraxılması halında problemin daha zərif şəkildə həll oluna biləcəyi aydın oldu. Hazırda əlavə edilmiş nüvə kodu 89-cu ildə formalaşmış ANSI C (C1989) spesifikasiyasına uyğun olmalıdır.

Koddakı Spectre ilə əlaqəli problem, döngədən sonra ayrıca müəyyən edilmiş iteratorun davamlı istifadəsi nəticəsində yaranmışdır - əlaqəli siyahının elementləri üzərində təkrarlamaq üçün makro istifadə olunur və döngə iteratoru həmin makroya ötürüldüyü üçün o, döngənin özündən kənarda müəyyən edilir və döngədən sonra mövcud qalır. C99 standartından istifadə etmək for() blokunda döngə dəyişənlərini təyin etməyə imkan verəcək ki, bu da problemi həll yolu tapmadan həll edəcək.

Linus Torvalds daha yeni spesifikasiyalar üçün dəstəyin tətbiqi ideyası ilə razılaşdı və 5.18-ci ildə nəşr olunan C11 standartından istifadə etmək üçün 2011 nüvəni köçürməyi təklif etdi. İlkin sınaqlar zamanı yeni rejimdə GCC və Clang-da montaj heç bir sapma olmadan keçdi. Daha hərtərəfli sınaq zamanı gözlənilməz problem yaranmazsa, 5.18 nüvə qurma skriptlərindəki '--std=gnu89' seçimi '--std=gnu11 -Wno-shift-negative-value' ilə əvəz olunacaq. C17 standartından istifadə imkanları da nəzərdən keçirildi, lakin bu halda GCC-nin minimum dəstəklənən versiyasını artırmaq lazım gələcəkdi. C11 dəstəyinin daxil edilməsi GCC versiyası (5.1) üçün mövcud tələblərə uyğun gəlir.

Mənbə: opennet.ru

Добавить комментарий