Programozási nyelvek összehasonlítása
C: A nyelv, amelyen minden más fut
A C a nyelv minden más mögött: kernelek, illesztőprogramok, a Python-kiszolgálók által futtatott tolmácsok, a webhelyek mögötti adatbázismotorok. Az operatív csapatok számára a C kevésbé olyasvalami, amit minden nap ír, és sokkal inkább olyasvalami, amit folyékonyan kell olvasnia, mert a CVE-írások, a veremnyomok és a core dumpek C szókincsében végzik tevékenységüket. Ez a külön cikk a C-C++ összehasonlítás mögött.
Kulcspontok
- A modell őszinte: manuális memória a malloc/free segítségével, aritmetika a mutatókon, és a meghatározatlan viselkedés mint specifikációs szintű igazság, nem pedig hibakategória; a fegyelem, amely gyorsítja a C-t, ugyanaz, amely a gondatlan C-t megdrágítja.
- A definiálatlan viselkedés a rotációs veszély: határon túli indexelés, aláírt túlcsordulás, használat utáni szabad osztályok, amelyek közvetlenül megfelelnek a memóriabiztonsági CVE-családoknak (majdnem egyesével bedugva az évtizedek CVE-adataiba); A fuzzerek (AFL-libFuzzer-osztályú eszközök) és fertőtlenítők a találgatásokat repro állapotokká változtatják.
- A hibakereső eszközök világszínvonalúak, és érdemes tudni: gdb, valgrind/memcheck, AddressSanitizer és rokonai (UBSan, TSan) olyan hibaosztályokat kapnak tesztidőben, amelyekre az éles veremnyomok csak utalnak; Ez a kombináció az oka annak, hogy az „építés fertőtlenítőszerekkel a CI-ben” házi szabály minden C-heavy csapatban, amellyel dolgozunk.
- A C olvasása műveleti készség: a CVE-bejelentések függvényekre és típusokra hivatkoznak, a szolgáltatási segfaultok visszakövetéseket hoznak létre a gdb szókincsben, a ports-tree-osztályú forrásokból származó csomagfelépítések pedig figyelmeztetéseket mutatnak a fordító számára, amelyek elválasztják a minőséget a szeméttől; az olvasói előny évekig csendben kifejlődik.
- Az ABI a kötőszövet: minden „idegen függvény interfész” (Python ctípusai, Rust FFI-je, Go cgo-ja) C alakú, mert a C a könyvtári határok lingua franca-ja lett; hogy a Role a fejlesztői divattól függetlenül relevánsan tartja a C-t.
- Amikor a C még mindig a megfelelő eszköz az íráshoz: kernelek, illesztőprogramok, beágyazott firmware és a legbelső hurkok, ahol a gyorsítótár viselkedése dominál; máshol a nyelvi összehasonlítások (Rust a nem biztonságos C-összetevők biztonságos újraírásához, Go for ops tooling) lefedik az őszinte modern választásokat.
Terepi jegyzet
A C-hibát, ami miatt intézményesítettük a fertőtlenítőket, három hétbe telt megtalálni a stack-trace folklór segítségével, és három percig tartott az AddressSanitizer alatt: a fordító ökoszisztémája már tud olyan dolgokat, amelyeket az embereknek nem szabad hajnali 2-kor keresniük.
Gyakori kérdések
C-ben írjunk új infrastruktúrát?
Szinte soha teljesen: ahol a maximális vezérlés számít, a kernel és a meghajtók C maradnak; a szolgáltatások és eszközök ma telepítik a Python/Go/Rust rendszert; a biztonságos élekkel ellátott C-mag a pragmatikus modern forma.
Miért a C-t okolják annyi CVE-ért?
Mivel a memóriabiztonsági hibák pontosan ott élnek, ahol az UB él, és mivel a világ kritikus kódjának óriási része a C. A menedzserek biztonságosabb memóriaeszközökkel, homályosítással és célzott átírásokkal enyhítik a hatást a „proaktív fejlesztési” gyakorlatok szerint.
Hogyan tanulhatják meg a rendszergazdák hatékonyan a C-t?
Válasszon szét valódi szolgáltatási forrást: kis kódbázisú csomagokat (a curl jó kezdet), olvassa el a CVE jelentéseket a javítások ellen, és gyakoroljon a gdb-vel egy tesztdobozon. A folyékonyság néhány hétvége plusz valódi műalkotások.
A modern C (C17/C23) eléggé különbözik ahhoz, hogy megváltozzon a történet?
Inkrementális: a szabvány gondosan fejlődik, de a memóriamodell és az UB-környezet a régóta fennálló valóság marad; A biztonsági előrelépés a szerszámozás, nem pedig a szabványos kavargás az, ahol történt.
Hogyan segít a Kinetikatech a programozási nyelvek összehasonlítása területén
Nap mint nap ezt tesszük: Nyelvek a rendszerműködéshez, a szkriptekhez és a szolgáltatásokhoz, összehasonlítva azzal, ami valójában számít a termelésben: biztonsági garanciák, nyers sebesség, kik vehetők fel, és mennyire fájdalmas az ebből eredő szolgáltatások telepítése és javítása. A Szerveradminisztráció és Webhely-karbantartás szolgáltatásunk mindent lefed az értékeléstől a bevezetésen és a 24/7 felügyeleten át a 30 perces sürgősségi beavatkozásig.