Порівняння мов програмування
C: мова, на якій працює все інше
C — це мова, що стоїть за всім іншим: ядрами, драйверами, інтерпретаторами, які працюють на ваших серверах Python, механізмами баз даних, що стоять за вашими веб-сайтами. Для оперативних команд C – це не стільки те, що ви пишете щодня, скільки те, що ви повинні вільно читати, оскільки записи CVE, трасування стека та дампи ядра ведуть свою роботу за допомогою словника C. Це спеціальна стаття, що стоїть за нашим порівнянням C-vs-C++.
Головне
- Модель є чесною: ручне запам’ятовування через malloc/free, арифметика на покажчиках і невизначена поведінка як істина на рівні специфікації, а не як категорія помилок; дисципліна, яка робить C швидким, - це та сама дисципліна, яка робить необережне C дорогим.
- Невизначена поведінка — це змінна небезпека: індексування поза межами, переповнення зі знаком, класи use-after-free, які безпосередньо відповідають сімействам CVE безпеки пам’яті (майже включені один за одним у дані CVE десятиліть); фаззери (інструменти класу AFL-libFuzzer) і санітайзери перетворюють припущення на умови відтворення.
- Інструменти для налагодження є світового класу, про що варто знати: gdb, valgrind/memcheck, AddressSanitizer та їхні родичі (UBSan, TSan) виявляють класи помилок під час тестування, які лише мають на увазі трасування стеку; завдяки цій комбінації «збірка з дезінфікуючими засобами в CI» є домашнім правилом у кожній команді C-heavy, з якою ми працюємо.
- Читання C є навичкою операційної системи: оголошення CVE посилаються на функції та типи, сервісні помилки створюють зворотні траси в словнику gdb, а збірки пакунків із джерел класів дерева портів показують попередження компілятора, які відокремлюють якість від сміття; перевага читача тихо з’єднується роками.
- ABI — це сполучна тканина: кожен «інтерфейс сторонньої функції» (ctypes Python, FFI Rust, cgo Go) має C-подібну форму, тому що C став лінгва франка меж бібліотек; ця роль підтримує C актуальним незалежно від моди розробників.
- Коли C все ще є правильним інструментом для написання: ядер, драйверів, вбудованого мікропрограмного забезпечення та внутрішніх циклів, де домінує поведінка кешу; в інших місцях порівняння мов (Rust для безпечного переписування небезпечних компонентів C, Go для інструментів ops) охоплюють чесні сучасні варіанти.
Польова нотатка
Помилка C, яка змусила нас інституціоналізувати санітайзери, знадобилася три тижні, щоб знайти фольклор трасування стека та три хвилини під AddressSanitizer: екосистема компілятора вже знає речі, які люди не повинні сканувати о 2 годині ночі.
Часті запитання
Чи варто писати нову інфраструктуру на C?
Майже ніколи повністю: там, де максимальний контроль має значення, ядро та драйвери залишаються C; служби та інструменти розгортають Python/Go/Rust сьогодні; C-core-with-safe-edges — прагматична сучасна форма.
Чому C звинувачують у такій кількості CVE?
Тому що помилки безпеки пам’яті живуть саме там, де живе UB, і тому, що таку величезну частку критичного коду у світі становить C. Менеджери пом’якшують їх за допомогою безпечніших інструментів пам’яті, фаззингу та цілеспрямованого перезапису відповідно до практик «проактивної розробки».
Як адміністратори можуть навчитися ефективно читати Сі?
Виберіть реальне джерело служби: пакунки з невеликими кодовими базами (curl — гарний початок), прочитайте звіти CVE щодо виправлень і попрактикуйтеся з gdb на тестовому полі. Вільність — це кілька вихідних і справжні артефакти.
Чи сучасний C (C17/C23) настільки відрізняється, щоб змінити історію?
Поступовий: стандарт обережно розвивається, але модель пам’яті та ландшафт UB залишаються довгостроковою реальністю; інструментарій, а не стандартний відбій, ось де відбулися досягнення безпеки.
Допомога Kinetikatech: порівняння мов програмування
Це те, чим ми займаємося щодня: Мови для системної роботи, сценаріїв і послуг у порівнянні з тим, що насправді має значення у виробництві: гарантії безпеки, необроблена швидкість, кого ви можете найняти та наскільки болісними є розгортання та виправлення кінцевих служб. Наша служба Адміністрування серверів та Обслуговування сайтів бере все на себе — оцінювання, впровадження, цілодобовий контроль і екстрене реагування протягом 30 хвилин.