Porovnanie programovacích jazykov
C: Jazyk Všetko ostatné beží ďalej
C je jazyk pod všetkým ostatným: jadrá, ovládače, tlmočníci, ktoré prevádzkujú vaše Python servery, databázové nástroje za vašimi webovými stránkami. Pre ops tímy je C menej niečo, čo píšete každý deň, a viac niečo, čo musíte čítať plynule, pretože zápisy CVE, sledovanie zásobníkov a výpisy jadra sa riadia v slovníku C. Toto je špeciálny článok, ktorý stojí za naším porovnaním C-vs-C++.
Kľúčové body
- Model je čestný: manuálna pamäť cez malloc/free, aritmetika na ukazovateľoch a nedefinované správanie ako pravda na úrovni špecifikácií, nie ako kategória chýb; disciplína, ktorá robí C rýchlym, je tá istá disciplína, vďaka ktorej je neopatrné C drahé.
- Nedefinované správanie predstavuje rotujúce nebezpečenstvo: indexovanie mimo hraníc, podpísané pretečenie, triedy bez použitia po použití, ktoré priamo zodpovedajú rodinám CVE s bezpečnosťou pamäte (takmer jeden po druhom v údajoch CVE za desaťročia); fuzzers (nástroje triedy AFL-libFuzzer) a dezinfekčné prostriedky premenia odhady na repro podmienky.
- Nástroje na ladenie sú na svetovej úrovni a stojí za to ich poznať: gdb, valgrind/memcheck, AddressSanitizer a ich príbuzní (UBSan, TSan) zachytávajú triedy chýb v čase testovania, ktoré len naznačujú stopy produkčného zásobníka; táto kombinácia je dôvodom, prečo je „vybudovať s dezinfekčnými prostriedkami v CI“ pravidlom v každom C-heavy tíme, s ktorým pracujeme.
- Čítanie C je ops zručnosť: CVE oznámenia referenčné funkcie a typy, segfaulty služieb vytvárajú spätné stopy v slovníku gdb a zostavy balíkov zo zdrojov triedy portov-stromov zobrazujú varovania kompilátora, ktoré oddeľujú kvalitu od nevyžiadanej pošty; čitateľská výhoda zlúčeniny pokojne roky.
- ABI je spojivové tkanivo: každé „rozhranie cudzích funkcií“ (typy Python, Rustovo FFI, Goovo cgo) má tvar C, pretože C sa stalo lingua franca hraníc knižnice; že Role udržuje C relevantné bez ohľadu na módu vývojárov.
- Keď je C stále tým správnym nástrojom na písanie: jadrá, ovládače, vstavaný firmvér a najvnútornejšie slučky, v ktorých dominuje správanie vyrovnávacej pamäte; inde jazykové porovnania (Rust pre bezpečné prepisovanie nebezpečných C komponentov, Go for ops tooling) pokrývajú poctivé moderné voľby.
Poznámka z teréna
Chyba C, ktorá nás prinútila inštitucionalizovať dezinfekčné prostriedky, trvalo tri týždne, kým sme ju našli na základe folklóru so zásobníkom a tri minúty pod AddressSanitizer: ekosystém kompilátora už vie, čo by ľudia nemali vyhľadávať o 2:00.
Často kladené otázky
Mali by sme napísať novú infraštruktúru v C?
Takmer nikdy úplne: tam, kde záleží na maximálnej kontrole, jadro a ovládače zostanú C; služby a nástroje nasadzujú Python/Go/Rust už dnes; C-core-s-safe-hranami je pragmatický moderný tvar.
Prečo je C obviňovaný za toľko CVE?
Pretože chyby bezpečnosti pamäte žijú presne tam, kde žije UB a pretože taký obrovský podiel svetového kritického kódu je C. Manažéri zmierňujú problémy pomocou nástrojov bezpečnejšej pamäte, fuzzingu a cielených prepisov podľa praktík „proaktívneho vývoja“.
Ako sa môžu správcovia naučiť efektívne čítať C?
Vyberte si skutočný zdroj služieb: balíčky s malými kódovými základňami (curl je dobrý začiatok), prečítajte si správy CVE s opravami a precvičte si s gdb na testovacom boxe. Plynulosť je pár víkendov plus skutočné artefakty.
Je moderný C (C17/C23) dostatočne odlišný na to, aby zmenil príbeh?
Inkrementálne: štandard sa vyvíja opatrne, ale pamäťový model a UB krajina zostávajú dlhodobou realitou; nástroje, nie štandardné vracanie, sú miestom, kde došlo k pokroku v oblasti bezpečnosti.
Ako Kinetikatech pomáha s porovnanie programovacích jazykov
Nemusíte sa stať expertom v porovnanie programovacích jazykov: Jazyky pre systémovú prácu, skriptovanie a služby v porovnaní s tým, na čom skutočne záleží vo výrobe: záruky bezpečnosti, surová rýchlosť, koho si môžete najať a ako bolestivé je nasadenie a záplata výsledných služieb. Presne na to slúži Správa serverov a Údržba webových stránok: nastavenie, zabezpečenie, monitoring a človek po ruke deň a noc.