C++ på Linux, emnet genoplives efter 6 år

Linux C++

Brugen af ​​C++ i Linux er blevet foreslået igen

Det lader til, at introduktionen af ​​Rust som et andet programmeringssprog i Linux-kernen har repræsenteret en af ​​de vigtigste ændringer , Linux har haft, ikke talt i form af funktioner og funktionaliteter, men det har markeret et meget vigtigt udgangspunkt for, hvordan Linus Torvalds og udviklingsteamet har taget et betydeligt skridt i retning af modernisering af Linux til det bedre.

Dette kan ses, da en diskussion, der blev startet for seks år siden, for nylig er blevet genoplivet på Linux-kernens mailinglister , som spøgefuldt blev præsenteret den 1. april 2018.

Og endnu engang er spørgsmålet om "muligheden for at anvende moderne C++-kode i Linux-kernen" blevet rejst , hvilket går ud over den traditionelle brug af C-sproget med assembly-fragmenter og promoveringen af ​​Rust-sproget.

Det oprindelige forslag blev lanceret i 2018 af en Red Hat-ingeniør som en joke til den velkendte aprilsnar-fejring, hvor mange benytter lejligheden til at lave jokes til fællesskabet, og på det tidspunkt var det sådan, da han angiveligt havde udgivet et sæt på 45 patches, der omfattede brugen af ​​skabeloner, klassearv og overbelastning af C++-funktioner.

Efter min mening er C++14 den "minimale" version, der har rimelig metaprogrammeringsunderstøttelse og har de fleste uden typerne fra tidligere versioner (C++11 havde de fleste, men C++14 udfylder nogle centrale manglende brikker). Men efter min mening er C++20 virkelig den største game changer; Selvom tidligere versioner kunne udføre mange SFINAE-hack, gav de også absolut ubrugelige fejlmeddelelser.

Vi laver en masse metaprogrammering i Linux-kernen, implementeret ved hjælp af ofte virkelig forfærdelige makrotricks. Disse er også praktisk talt umulige at fejlfinde. Lad os tage eksemplet med hacks af typen uaccess.h, hvoraf nogle jeg har designet og skrevet. I C++ kan forskellige casts og case-udsagn opdeles i separate skabeloninstanser, og med lidt opfindsomhed kan ting som userspace pointers versus kernel userspace pointers også håndhæves strengt, såvel som allerede markerede userspace pointers, versus dem der ikke er, for ikke at nævne den nemme håndtering af tilfældet med 32-bit brugerrumstyper i en 64-bit kerne og anvendelsen af ​​endian-konvertering.

Nu, næsten seks år senere, har Hans Peter Anvin, en central Intel-kerneudvikler og skaber af projekter som syslinux, klibc og LANANA, genoplivet diskussionen . Ifølge Anvin har sprogene C og C++ gennemgået en betydelig udvikling siden 1999, og C++ har vist sig at være mere egnet end C til udvikling af operativsystemkerner.

Anvin nævner, at funktioner, der tidligere krævede specifikke GCC- udvidelser, nu nemt kan implementeres i standard C++, og i mange tilfælde vil brugen af ​​C++ forbedre infrastrukturen uden at det er nødvendigt at ændre koden fuldstændigt.

Derudover foreslås det at anvende mindst C++ 14-specifikationen, som inkluderer metaprogrammeringsværktøjer, og brugen af ​​C++ 20-specifikationen, som introducerer understøttelse af koncepter, der kan reducere forekomsten af ​​fejl, opfordres.

Det argumenteres for, at C++ er at foretrække frem for Rust, fordi Rusts syntaks adskiller sig markant fra C-sproget, er ualmindelig blandt nuværende kerneudviklere og ikke tillader trinvis omskrivning af kode. Med C++ er det muligt at oversætte dele af C-koden trinvis, svarende til hvordan C-kode kan kompileres til C++.

Selvom Linux-kernen primært er C-kode med forskellige dele skrevet i assembly og voksende arbejde omkring Rust-understøttelse i Linux-kernen, er det stadig uklart, om der er vægt nok til at dette er en realitet, om muligheden for at se Linux-kernens C-kode konverteret til C++ i fremtiden.

Endelig, hvis du er interesseret i at lære mere om dette , kan du finde detaljerne på følgende link.


Tilføj som foretrukken kilde i Google