Usporedba programskih jezika
C: Jezik na kojem sve ostalo radi
C je jezik ispod svega ostalog: kernela, upravljačkih programa, tumača koje pokreću vaši Python poslužitelji, motora baza podataka koji stoje iza vaših web stranica. Za operativne timove, C je manje nešto što pišete svaki dan, a više nešto što morate tečno čitati, jer CVE zapisi, tragovi stogova i jezgre obavljaju svoj posao u rječniku C-a. Ovo je posvećeni članak iza naše usporedbe C-vs-C++.
Ključne točke
- Model je pošten: ručno pamćenje kroz malloc/free, aritmetika na pokazivačima i nedefinirano ponašanje kao istina na razini specifikacije, a ne kategorija greške; disciplina koja C čini brzim ista je disciplina koja nemarno C čini skupim.
- Nedefinirano ponašanje je rotirajuća opasnost: indeksiranje izvan granica, preljev s predznakom, klase koje se koriste nakon slobodne upotrebe koje izravno odgovaraju CVE obiteljima za sigurnost memorije (gotovo uključene jedna po jedna u CVE podatke desetljeća); fuzzeri (alati klase AFL-libFuzzer) i sanitizeri pretvaraju nagađanja u repro uvjete.
- Alat za otklanjanje pogrešaka je svjetske klase i vrijedi ga znati: gdb, valgrind/memcheck, AddressSanitizer i njegovi srodnici (UBSan, TSan) hvataju klase bugova u vrijeme testiranja što tragovi proizvodnog stoga samo impliciraju; ta je kombinacija razlog zašto je 'graditi sa sredstvima za dezinfekciju u CI' kućno pravilo u svakom C-heavy timu s kojim radimo.
- Čitanje C-a je operativna vještina: CVE najave referiraju na funkcije i tipove, segfaulti servisa stvaraju povratne tragove u gdb vokabularu, a građenja paketa iz izvora klase stabla portova pokazuju upozorenja prevoditelja koja odvajaju kvalitetu od smeća; prednost čitatelja tiho se skuplja godinama.
- ABI je vezivno tkivo: svako 'strano sučelje funkcija' (Pythonovi ctypes, Rustov FFI, Goov cgo) je u obliku slova C jer je C postao lingua franca granica knjižnica; ta uloga održava C relevantnim bez obzira na modu programera.
- Kada je C još uvijek pravi alat za pisanje: kernela, upravljačkih programa, ugrađenog firmvera i najdublje petlje u kojima dominira ponašanje predmemorije; drugdje usporedbe jezika (Rust za sigurno prepisivanje nesigurnih C komponenti, Go for ops tooling) pokrivaju poštene moderne izbore.
Terenska bilješka
C bug koji nas je natjerao da institucionaliziramo sanitizere trebalo je tri tjedna da pronađemo folklorom praćenja hrpe i tri minute pod AddressSanitizerom: ekosustav prevoditelja već zna stvari koje ljudi ne bi trebali skenirati u 2 ujutro.
Često postavljana pitanja
Trebamo li napisati novu infrastrukturu u C-u?
Gotovo nikada u potpunosti: gdje je maksimalna kontrola bitna, kernel i upravljački programi ostaju C; usluge i alati implementiraju Python/Go/Rust danas; C-core-with-safe-edges pragmatičan je moderan oblik.
Zašto se C krivi za toliko CVE-ova?
Zato što greške u sigurnosti memorije žive točno tamo gdje živi UB i zato što je tako ogroman udio svjetskog kritičnog koda C. Upravitelji ih ublažavaju putem sigurnijih memorijskih alata, fuzzinga i ciljanih prepisivanja u skladu s praksama 'proaktivnog razvoja'.
Kako administratori mogu naučiti učinkovito čitati C?
Odvojite stvarni izvor usluge: pakete s malim bazama koda (curl je dobar početak), pročitajte CVE izvješća u odnosu na popravke i vježbajte s gdb-om na testnoj kutiji. Fluency je nekoliko vikenda plus pravi artefakti.
Je li moderni C (C17/C23) dovoljno drugačiji da promijeni priču?
Inkrementalno: standard se pažljivo razvija, ali memorijski model i UB krajolik ostaju dugotrajna stvarnost; alati, a ne standardna bujka, mjesto je napretka u sigurnosti.
Kako Kinetikatech pomaže kod usporedba programskih jezika
Iskreno, većina timova dođe do nas nakon što su prvo pokušali sami: Jezici za rad sustava, skriptiranje i usluge, u usporedbi s onim što je zapravo važno u proizvodnji: sigurnosna jamstva, sirova brzina, koga možete angažirati i koliko je bolno implementirati i krpati rezultirajuće usluge. Naša usluga Upravljanje serverima i Održavanje web stranice postoji da se ne morate upoznavati s usporedba programskih jezika na teži način; mi se brinemo o puštanju u rad, nadzoru i iznenađenjima u tri ujutro.