NOC online · 24/7Longview, TX · +1 323 412 0665
KinetikatechServers · Security · Websites
SL

Primerjava programskih jezikov

C: Jezik, v katerem teče vse ostalo

C je jezik pod vsem drugim: jedri, gonilniki, tolmači, ki jih poganjajo vaši strežniki Python, motorji baze podatkov, ki stojijo za vašimi spletnimi mesti. Za operativne ekipe je C manj nekaj, kar pišete vsak dan, in bolj nekaj, kar morate tekoče brati, ker zapisi CVE, sledenje skladov in odlagališča jedra opravljajo svoje delo v besedišču C. To je namenski članek za našo primerjavo C-v-C++.

Ključne točke

  • Model je pošten: ročni pomnilnik prek malloc/free, aritmetika na kazalcih in nedefinirano vedenje kot resnica na ravni specifikacij in ne kategorija hrošča; disciplina, zaradi katere je C hiter, je ista disciplina, zaradi katere je nepreviden C drag.
  • Nedefinirano vedenje je vrteča se nevarnost: indeksiranje izven meja, podpisano prelivanje, razredi brez uporabe, ki neposredno ustrezajo družinam CVE za varnost pomnilnika (skoraj eden za drugim vstavljeni v podatke CVE desetletij); fuzzerji (orodja razreda AFL-libFuzzer) in sanitizerji spremenijo ugibanja v repro pogoje.
  • Orodje za odpravljanje napak je vrhunsko in ga je vredno poznati: gdb, valgrind/memcheck, AddressSanitizer in njegovi sorodniki (UBSan, TSan) ujamejo razrede hroščev v času testiranja, kar nakazujejo samo sledi proizvodnega sklada; ta kombinacija je razlog, zakaj je 'gradnja z razkužili v CI' hišno pravilo v vsaki skupini C-heavy, s katero delamo.
  • Branje C je operativna veščina: obvestila CVE se nanašajo na funkcije in tipe, napake v storitvah ustvarjajo povratne sledi v besednjaku gdb in sestave paketov iz virov drevesnega razreda vrat prikazujejo opozorila prevajalnika, ki ločujejo kakovost od smeti; prednost bralca tiho nastaja več let.
  • ABI je vezivno tkivo: vsak "vmesnik tujih funkcij" (Pythonov ctypes, Rustov FFI, Gojev cgo) je v obliki črke C, ker je C postal lingua franca knjižničnih meja; ta vloga ohranja C relevanten ne glede na modo razvijalca.
  • Ko je C še vedno pravo orodje za pisanje: jedra, gonilnikov, vdelane vdelane programske opreme in najbolj notranjih zank, kjer prevladuje obnašanje predpomnilnika; drugje jezikovne primerjave (Rust za varno prepisovanje nevarnih komponent C, orodje Go for ops) pokrivajo poštene sodobne izbire.

Terenska beležka

Hrošč C, zaradi katerega smo institucionalizirali sanitizerje, je potreboval tri tedne, da smo ga odkrili s folkloro sledenja skladu in tri minute pod AddressSanitizer: ekosistem prevajalnika že pozna stvari, ki jih ljudje ne bi smeli pregledovati ob 2. uri zjutraj.

Pogosta vprašanja

Ali naj novo infrastrukturo napišemo v C?

Skoraj nikoli v celoti: kjer je največji nadzor pomemben, jedro in gonilniki ostanejo C; storitve in orodja že danes uvajajo Python/Go/Rust; C-core-with-safe-edges je pragmatična sodobna oblika.

Zakaj je C kriv za toliko CVE?

Ker hrošči za varnost pomnilnika živijo natanko tam, kjer živi UB, in ker je tako ogromen delež svetovne kritične kode C. Upravljavci jih ublažijo z varnejšimi pomnilniškimi orodji, zamegljevanjem in ciljnim prepisovanjem v skladu s praksami 'proaktivnega razvoja'.

Kako se lahko skrbniki naučijo učinkovito brati C?

Ločite pravi vir storitev: pakete z majhnimi kodnimi bazami (curl je dober začetek), preberite poročila CVE glede na popravke in vadite z gdb na testnem polju. Fluency je nekaj vikendov in pravi artefakti.

Je sodobni C (C17/C23) dovolj drugačen, da spremeni zgodbo?

Postopno: standard se skrbno razvija, vendar spominski model in pokrajina UB ostajata dolgotrajna realnost; varnostni napredek je bil dosežen pri orodju, ne pri standardnem odcejanju.

Kako Kinetikatech pomaga s primerjava programskih jezikov

Po pravici, večinoma ekipe pridejo k nam, ko najprej poskusijo lastno: Jeziki za sistemsko delo, skriptiranje in storitve v primerjavi s tem, kaj je dejansko pomembno pri proizvodnji: varnostna jamstva, surova hitrost, koga lahko najamete in kako boleče je uvajanje in popravljanje posledičnih storitev. Naša storitev Upravljanje strežnikov in Vzdrževanje spletnega mesta obstaja, da se ne morete naučiti primerjava programskih jezikov na lastno kožo; mi se skrbimo za nastavitev, nadzor in nočne presenečenja ob 3. uri.

Pogovorite z inženirjem

Problem z strežnikom? Napadena spletna stran? Dolgo se naloži?

Kritični problemi rešeni v 30 minutah — nonstop, 7 dni v tednu.

Zahtevajte hitno podporo support@kinetikatech.com