Ο πυρήνας Linux 5.18 σχεδιάζει να επιτρέψει τη χρήση του προτύπου C11 της γλώσσας C

Ενώ συζητούσαμε ένα σύνολο ενημερώσεων κώδικα για τη διόρθωση προβλημάτων που σχετίζονται με το Specter στον κώδικα της συνδεδεμένης λίστας, κατέστη σαφές ότι το πρόβλημα θα μπορούσε να λυθεί πιο χαριτωμένα εάν επιτρεπόταν στον πυρήνα ο κώδικας C που συμμορφώνεται με μια νεότερη έκδοση του προτύπου. Επί του παρόντος, ο προστιθέμενος κώδικας πυρήνα πρέπει να συμμορφώνεται με την προδιαγραφή ANSI C (C89), που δημιουργήθηκε το 1989.

Ένα πρόβλημα που σχετίζεται με το φάσμα στον κώδικα προκλήθηκε από τη συνεχή χρήση ενός ξεχωριστά καθορισμένου επαναλήπτη μετά τον βρόχο—μια μακροεντολή χρησιμοποιείται για επανάληψη στα στοιχεία μιας συνδεδεμένης λίστας και επειδή ο επαναλήπτης βρόχου μεταβιβάζεται σε αυτήν τη μακροεντολή, είναι ορίζεται εκτός του ίδιου του βρόχου και παραμένει διαθέσιμο μετά τον βρόχο. Η χρήση του προτύπου C99 θα επέτρεπε τον καθορισμό μεταβλητών βρόχου σε ένα μπλοκ for(), το οποίο θα έλυνε το πρόβλημα χωρίς να χρειάζεται να βρούμε λύσεις.

Ο Linus Torvalds συμφώνησε με την ιδέα της υλοποίησης υποστήριξης για νεότερες προδιαγραφές και πρότεινε τη μετακίνηση του πυρήνα 5.18 για χρήση του προτύπου C11, που δημοσιεύτηκε το 2011. Κατά τη διάρκεια των προκαταρκτικών δοκιμών, η συναρμολόγηση σε GCC και Clang στη νέα λειτουργία πέρασε χωρίς αποκλίσεις. Εάν δεν προκύψουν απροσδόκητα προβλήματα κατά τη διάρκεια πιο ενδελεχούς ελέγχου, η επιλογή '--std=gnu5.18' στα σενάρια έκδοσης πυρήνα 89 θα αντικατασταθεί με '--std=gnu11 -Wno-shift-negative-value'. Εξετάστηκε επίσης η δυνατότητα χρήσης του προτύπου C17, αλλά σε αυτήν την περίπτωση θα ήταν απαραίτητο να αυξηθεί η ελάχιστη υποστηριζόμενη έκδοση του GCC. Η συμπερίληψη της υποστήριξης C11 ταιριάζει στις τρέχουσες απαιτήσεις για την έκδοση GCC (5.1).

Πηγή: opennet.ru

Προσθέστε ένα σχόλιο