[Перевод] Как школьный учитель изобрёл один из самых влиятельных языков программирования

90ad65f0300eb1bda73e894d38ebae19.jpeg

Говоря коротко, С работает везде. Этот язык — не просто большой динозавр, которому каким-то образом удалось дожить до наших дней. Он крайне практичен, поэтому невероятно успешен. Удивительно, но истоки С далеки от успехов. Он стал итогом десятилетий неудач, и, если бы не старания любящего программировать на каникулах школьного учителя, язык мог бы не появиться. Это история о невероятно медленных компьютерах, трёх Дэвидах и давнем наследии языка C. К старту курса о программировании на С++ делимся переводом статьи с краткой биографией Кристофера Стрэтчи.

О распостранённости C от ядра Unix до CPython

Unix написан на C. Вначале написанное на ассемблере, ядро Unix переписали на C ещё в 1973 году. Это сделало Unix намного более переносимой на разные машины и способствовало её популярности. Без Unix у нас не было бы всех прекрасных современных операционных систем — вспомните Linux, Mac OS X, Android, iOS, Chrome OS и вообще всё, на чём работает ваш роутер.

Если вы имели дело с базами данных, то наверняка также работали с C, даже если не знали об этом. Системы управления базами данных — Oracle Database, MySQL и другие написаны на C. Большинство из них с тех пор переписаны на C++, но он — прямой потомок C.

И даже если вы знаете только Python, вероятно, всё это время вы работали с C; только если не выбрали Jython, IronPython или PyPy, то вы писали на реализации языка CPython. Вы пишете код на Python, но интерпретатор, который преобразует ваш код в код, понятный машине, — на самом деле написан на C.

Школьный учитель, друживший с Аланом Тьюрингом

Познакомьтесь с Кристофером Стрэтчи. Он родился в 1916 году во влиятельной британской семье, учился в Кембриджском университете и познакомился там со многими известными учёными. Многие годы он, похоже, пренебрегал учёбой, и его результаты на выпускных экзаменах оказались весьма плачевными. Возможно, именно поэтому он не продолжил академическую карьеру, как многие его сверстники, но во время войны проводил исследования промышленных радаров, затем став школьным учителем и оставаясь им до 1951 года. Именно тогда всё изменилось.

Друг познакомил его с оборудованием Британской национальной физической лаборатории. Стрэтчи стал проводить свои школьные каникулы и вынужденные задержки на работе в лаборатории с Pilot ACE, первым компьютером с автоматическим вычислительным механизмом Алана Тьюринга. Стрэтчи стремился научить компьютер играть в шашки. Решить эту задачу в то время, когда компьютеры в основном применялись в быстром решении уравнений, — это было удивительно.

Первая попытка не удалась: у Pilot ACE не хватало памяти. Возможно, это кажется вам смешным, но вспомните — шли 1950-е годы! Вместе со своим старым приятелем Тьюрингом Стрэтчи удалось разработать машину совершеннее — Ferranti Mark I. Под руководством Тьюринга Стрэтчи наконец-то научил компьютер играть в шашки. Слухи о необычном достижении распространились быстро, и вскоре Стрэтчи позвали продвигать разработки в области информатики для британского правительства.

Три Дэвида захотели создать новый язык

Тем временем в Кембридже хотели купить новый компьютер: в то время это было большим делом, а поскольку компьютер был совершенно новым, было ясно, что ему нужна новая операционная система, но не обязательно новый язык, однако три Дэвида — Хартли, Бэррон и Уиллер — задумались о том, чтобы изобрести его, а заодно развлечься. Добавим, что эти трое не спросили будущих пользователей о плюсах и минусах старых языков. Например, Fortran IV в то время уже использовался и вполне подходил для работы. Однако трое Дэвидов решили, что смогут легко создать нечто лучшее. Кембриджский университет скептически относился к новому языку, но победили трое Дэвидов.

Они назвали язык CPL (Cambridge Programming Language), а после того, как к трём Дэвидам присоединилась пара исследователей из Лондонского университета, он стал называться Combined Programming Language. Оглядываясь назад,   Хартли отмечает, что попытка создать новый язык была «чертовски глупым занятием».

Новый язык оказался слишком сложным

Возможно, также было «чертовски глупо» привлекать Кристофера Стрэтчи к руководству проектом. В его вычислительных способностях сомневаться не приходилось, но он казался влюблённым в проект настолько, что не мог расставить приоритеты. Вместо того чтобы эффективно решать крупные проблемы, разработчики зациклилась на мелких — и вскоре CPL стал известен как Christopher«s Programming Language.

Из-за всех этих внедряемых по настоянию Стрэтчи мелких деталей язык стал слишком сложным. Когда разработчики захотели написать компилятор, сделать этого не удалось: получаемый машинный код оказывался неэффективным.

Позже язык стал слишком простым

Когда Стрэтчи уехал на несколько месяцев в MIT, к окманде присоединился Мартин Ричардс и решил упростить язык. Конечно, целью было получить такой язык, который позволял бы написать хороший компилятор и получить эффективный машинный код. Ричардс удалил из CPL всё, что не было важным, превратив CPL в BCPL — Basic CPL, который в каком-то смысле был не только новым языком, но и признанием провала CPL.

Когда чуть позже в Массачусетском технологическом институте Ричардс присоединился к Стрэтчи, посмотреть, чем они вдвоём занимаются, пришёл их коллега из Bell Labs. Этого человека звали Кен Томпсон. Он работал над Multics — ещё одной операционной системой, от которой собирались отказаться. Система выжила, но это уже другая история.

В итоге Томпсон переключился на разработку Unix — по сей день одну из самых востребованных операционных систем. Ему удалось установить Unix на маленький компьютер PDP-7, но BCPL для этой машины оказался громоздким. Томпсон сократил язык до функций, которые посчитал наиболее важными, и назвал новый язык B.

Как родился Си

В 1971 Деннис Ричи адаптировал B и, чтобы сделать его полезным для компьютеров мощнее, добавил языку функциональности. Получившийся язык он назвал NB — New B.

Тем временем Томпсон переписывал Unix на язык высокого уровня. Тогда большинство ОС писали на ассемблере, из-за этого каждый раз после покупки новой машины даже приходилось разрабатывать новую операционную систему;, но Unix на языке высокого уровня работала бы на любой машине.

Томпсон попытался переписать Unix на NB, но потерпел неудачу. Затем Ричи и Томпсон добавляли новые функции в NB, до тех пор пока затея не увенчалась успехом. Примечательно, что разработчики добавили в язык структуры — тогда их не было ни в одном языке. Нововведение оказалось достаточно заметным, чтобы переименовать NB, и в 1973 году родился С. Вскоре язык C стал популярным и до сих пор остаётся таковым.

С распространялся подобно медленному лесному пожару

Хотя многочисленные изобретатели С были уверены в себе, они не ожидали, что их язык покорит столь огромные просторы. Одной из причин успеха могла быть чрезвычайная популярность PDP-11. Установить на нём Unix было совсем недорого, а вместе с ней поставлялся С. Большинство компьютеров тогда работали в университетах; заканчивая университет, многие студенты уже были знакомы с C. Это помогло языку распространиться во многих отраслях и, конечно, в академических кругах. Наконец, книга Брайана Кернигана и Денниса Ритчи »Язык программирования C» была простой и лаконичной, особенно для текста о языке программирования. Эта книга упростила новичкам освоение языка.

Несмотря на свой возраст, C может быть проворнее вашего дедушки

Каким-то образом, непроторёнными тропами, язык С достиг успеха. Но этот язык — результат слишком сложного CPL, слишком простого BCPL, ещё более простого B и немного более сложного, но всё же достаточно простого NB. А без задачи Томпсона переписать Unix С никогда не появился бы.

Кристофер Стрэтчи, бывший школьный учитель, слишком усложнил многие вещи и тем самым положил начало череде неудач. Но без них язык С, возможно, не существовал бы.

Особенности языка C проявляются повсюду. Такое важное понятие, как структуры, а также подобные операторам инкремента и декремента ++ и — мелочи сегодня можно найти во многих языках; без С всего этого не было бы, как и потомков языка — C++, C# и т. д.

И всё это — только наследие чрезвычайно быстрого и безопасного языка, качества которого делают его предпочитаемым инструментом в таких сложных областях, как робототехника, компьютерное зрение, интернет вещей и т. д. Это не означает, что подобные Python языки не используются, особенно для первых набросков. Но последний шаг — если хотите, тонкая полировка — часто пишется на C или C++.

Да, если судить по его возрасту, C — динозавр. Но, держу пари, он шустрее и проворнее вашего дедушки! Или вашего внука, если уж на то пошло…

Если вы хотите программировать на С++, чувствовать историю технологий, но быть востребованным специалистом, то вы можете обратить внимание на наш курс о разработке на C++, программа которого начинается с базовой теории, знакомит с современными стандартами C++ и рассчитана на три проекта в портфолио, а если вы хотите работать или уже работаете в авангарде, то можете присмотреться к флагманскому курсу о Data Science, где вы освоите профессию с нуля или прокачаете свои навыки.

a85242d1b8ad55f6fda7280da386f15a.png

Узнайте, как прокачаться и в других специальностях или освоить их с нуля:

Другие профессии и курсы

ПРОФЕССИИ

КУРСЫ

© Habrahabr.ru