Язык Си: как маленький язык стал фундаментом всего
На Си написаны операционные системы, базы данных и почти все языки, которыми вы пользуетесь сегодня. Разбираем, как простой инструмент 1972 года стал универсальным языком, на котором держится вся индустрия.
Почти каждый язык, на котором вы пишете, в глубине души написан на Си.
Си — это переносимый ассемблер: достаточно близко к железу, чтобы быть быстрым, и достаточно высоко, чтобы оставаться человеческим.
Зачем понадобился новый язык
В начале 1970-х в Bell Labs Деннис Ритчи и Кен Томпсон писали операционную систему Unix. Ассемблер был быстрым, но привязывал код к конкретной машине и сводил с ума своей дотошностью. Существовавшие высокоуровневые языки были либо медленными, либо неуклюжими для системного программирования. Нужно было что-то посередине.
Ритчи отталкивался от языка B, написанного Томпсоном, добавил типы данных и работу с памятью под возможности машины PDP-11 — и к 1972 году появился Си. Название простое: после B логично идёт C.
Главная фишка: близко к железу, но по-человечески
Си попал в идеальную точку. Он давал прямой доступ к памяти через указатели, позволял работать почти на уровне процессора — но при этом код читался как осмысленный текст, а не как поток чисел. Программист контролировал каждый байт, но писал понятными конструкциями if, for, while, функциями.
int sum(int n) {
int s = 0;
for (int i = 1; i <= n; i++)
s += i;
return s;
}Эта простота обманчива. За скромным синтаксисом скрывалась огромная мощь и ответственность: язык не держал программиста за руку, доверяя ему управлять памятью самому.
Книга, которую читали все
В 1978 году Ритчи вместе с Брайаном Керниганом выпустил книгу «Язык программирования C» — её зовут просто K&R по инициалам авторов. Тонкая, ясная, она стала каноном. Именно оттуда пошла традиция начинать обучение с программы, печатающей Hello, world!. Книга фактически задала стандарт языка до того, как появился официальный.
Стандарт ANSI
Си расползался так быстро, что появилось множество слегка разных диалектов. Чтобы код оставался переносимым, в 1989 году язык стандартизировали — ANSI C (он же C89), на следующий год его принял и международный комитет ISO. С тех пор стандарт обновляли (C99, C11, C17), но ядро языка осталось узнаваемым.
Почему Си — фундамент всего
Сегодня на Си или его прямых наследниках написано поразительно много:
- Операционные системы: ядра Linux, Windows, macOS.
- Языки внутри языков: эталонный Python (CPython), движки JavaScript, среда Java — написаны на Си или C++.
- Базы данных и сети: от PostgreSQL до веб-серверов.
- Встраиваемые системы: от микроволновки до автомобиля.
| Язык-потомок | Что взял у Си |
| C++ | Синтаксис и совместимость, добавил классы |
| Java, C# | Похожий синтаксис фигурных скобок |
| JavaScript | Внешний вид кода: { }, for, if |
Долговечность по-настоящему
Си живёт уже более полувека — возраст, недостижимый для большинства технологий. Секрет в том, что Ритчи не пытался угодить всем. Он сделал маленький, честный, быстрый инструмент — и оставил мощь в руках программиста. Этот компромисс между скоростью и человечностью оказался настолько удачным, что вся современная индустрия выросла поверх Си, часто даже не подозревая об этом.
У этой мощи есть и тёмная сторона. Та самая свобода работать с памятью напрямую означает, что ошибиться тоже можно напрямую — выйти за границу массива, обратиться к уже освобождённой памяти. Целые классы уязвимостей в программах родом отсюда. Современные языки вроде Rust как раз пытаются дать скорость Си, но без этих ловушек. И всё же, когда нужен предельный контроль и максимальная производительность, мир по-прежнему возвращается к Си — языку, который доверяет программисту и не прощает небрежности.