Linux kernel 5.18 planira dopustiti korištenje standarda C jezika C11

Tijekom rasprave o skupu zakrpa za popravak problema vezanih uz Spectre u kodu povezanog popisa, postalo je jasno da bi se problem mogao riješiti na graciozniji način ako se C kod koji je u skladu s novijom verzijom standarda pusti u kernel. Trenutno, dodani kod kernela mora biti u skladu sa specifikacijom ANSI C (C89), formiranom davne 1989. godine.

Problem vezan uz Spectre u kodu uzrokovan je kontinuiranom upotrebom zasebno definiranog iteratora nakon petlje—makronaredba se koristi za iteraciju preko elemenata povezanog popisa, a budući da se iterator petlje prosljeđuje u tu makronaredbu, on je definirana izvan same petlje i ostaje dostupna nakon petlje. Korištenje standarda C99 omogućilo bi definiranje varijabli petlje u for() bloku, što bi riješilo problem bez potrebe za izmišljanjem rješenja.

Linus Torvalds složio se s idejom implementacije podrške za novije specifikacije i predložio premještanje jezgre 5.18 na korištenje standarda C11, objavljenog 2011. godine. Tijekom preliminarnog testiranja, sklop u GCC i Clangu u novom načinu rada prošao je bez odstupanja. Ako se tijekom temeljitijeg testiranja ne pojave neočekivani problemi, opcija '--std=gnu5.18' u skriptama za izgradnju jezgre 89 bit će zamijenjena s '--std=gnu11 -Wno-shift-negative-value'. Razmatrana je i mogućnost korištenja standarda C17, ali bi u tom slučaju bilo potrebno povećati minimalno podržanu verziju GCC-a. Uključivanje C11 podrške uklapa se u trenutne zahtjeve za GCC verziju (5.1).

Izvor: opennet.ru

Dodajte komentar