Computerphile о языке C: «Самый успешный инструмент в истории»

Computerphile 2 млн 10 мин 2 мин 25.08.2017
Главное

🏛️ Истоки и триумф языка C 0:00

Язык программирования C занимает особое место в истории компьютерных наук, став «классическим языком системной реализации». Его возникновение в начале 1970-х годов было продиктовано острой необходимостью найти баланс между мощностью низкоуровневого программирования и удобством высокоуровневых абстракций.

В эпоху ранних мейнфреймов (начиная с 1960-х годов) компьютеры были настолько дорогими, что требовали разделения времени между множеством пользователей. Это породило потребность в сложном системном ПО, способном эффективно переключаться между задачами. Доминировавшим тогда подходом была разработка операционных систем исключительно на ассемблере, так как существовало убеждение: «настоящие мужчины используют ассемблер».

Однако такой подход требовал колоссальных усилий. Программисты искали способ упростить написание системного кода, не жертвуя производительностью. C стал наиболее успешным решением этой задачи, обойдя такие эксперименты, как Bliss, BCPL и Algol 68. Главным преимуществом C оказалась его невероятная портативность: компиляторы удалось перенести с PDP-11 на самые разные архитектуры, включая серверы Sun и современные системы. Сегодня поддержка множества архитектур в компиляторе GCC является наглядным свидетельством этой гибкости.

🔄 Эволюция аппаратного обеспечения и программный ответ 2:42

Развитие языка шло рука об руку с изменениями «железа». По мере того как аппаратная часть становилась дешевле, архитектура компьютеров эволюционировала от отдельных транзисторов к чиповым технологиям, таким как LSI-11. Это позволило программистам использовать более сложные языки системной реализации.

Основные факторы, повлиявшие на развитие системных языков:

🛡️ Отказ от указателей и смена парадигм 5:22

С появлением более мощных ресурсов в конце 1980-х годов отношение к низкоуровневым операциям стало меняться. Джеймс Гослинг из Sun Microsystems, проанализировав ошибки программистов, пришел к выводу, что большинство проблем возникает из-за неправильной работы с указателями.

В результате в дизайне языка Java было принято решение запретить использование указателей на уровне пользователя. Это стало символом смены парадигмы: если нет необходимости в глубоком контроле памяти, лучше доверить эту задачу языку или протестированным библиотекам. Тем не менее, эксперты подчеркивают, что не стоит превращать выбор языка в «теологический спор» — сегодня программисты имеют возможность подбирать инструмент под конкретную задачу: от Python до awk.

💾 Проблема вечного наследия 8:49

Несмотря на прогресс, индустрия сталкивается с проблемой устаревшего программного обеспечения, которое продолжает работать десятилетиями. Основная причина — принцип «если работает, не трогай». Риск ошибки при переписывании кода стоимостью в целое состояние часто перевешивает выгоды от модернизации.

Современные методы борьбы с технологическим долгом:

💬 Цитаты

«Если оно работает, не чини его.»

Ведущий Computerphile 09:55

«Лучший программистский язык — это тот, который подходит для решения конкретной задачи.»

Ведущий Computerphile 07:04
👥 Спикер
🔗 Упомянутые сайты и проекты
📖 Термины
Bit twiddling
Техника низкоуровневого манипулирования отдельными битами для управления аппаратным обеспечением.
PDP-11
Серия популярных мини-компьютеров компании DEC, на которых развивался язык C.
Макро-ассемблер
Ассемблер, расширенный функциями высокоуровневых языков для облегчения программирования.
📊 Цифры
🗓 Хронология
  1. 1960-е Эра ранних мейнфреймов, требовавших разделения времени доступа для пользователей.
  2. Начало 1970-х Период активного развития C как решения проблем системного программирования.
  3. Конец 1980-х Джеймс Гослинг проектирует Java, исключая прямое использование указателей пользователями.
⚖️ Другая сторона
Технологии и IT C programming language system implementation language PDP-11 Computerphile compiler design