НСПК / 24.12.24 / перетяжка / 2W5zFK76vmn
НСПК / 24.12.24 / перетяжка / 2W5zFK76vmn
НСПК / 24.12.24 / перетяжка / 2W5zFK76vmn

История C++ с 1953 года от FLOW-MATIC и Fortran до языка Си и Cfront

Рассказываем о долгом эволюционном пути языков программирования, который привел к появлению C++, от FLOW-MATIC и ALGOL до Cfront.

2К открытий8К показов

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

В этой статье рассказываем, как бизнес в 1950 годах появлиял на развитие языков программирования, какие шаги проделал ALGOL перед тем, как превратился в язык Си, и как языки проделали долгий и витиеватый путь от упрощения к усложнению, и наоборот.

Как началась гонка языков программирования между Грейс Хоппер и Джоном Бэкусом

В 1953 году математик Грейс Хоппер работала в компании Remington Rand, под началом которой она когда-то выпустила первый в мире компилятор «A Compiler».

Хоппер уже была известным программистом, поэтому корпорация поставила перед ней новую задачу: облегчить бизнесменам, которые использовали компьютеры, работу с ЭВМ.

История C++ с 1953 года от FLOW-MATIC и Fortran до языка Си и Cfront 1
Грейс Хоппер

Хоппер решила, что проще всего будет научить бизнесменов программировать, но в Remington Rand ей отказали: это было бы слишком дорого и долго. И вообще, у бизнесменов нет времени учиться математике, разбирать перфокарты, и так далее. Тогда Грейс Хоппер поняла, что вместо того, чтобы заучивать математические формулы, лучшим способом будет использовать слова из английского языка, с помощью которых можно было бы программировать.

В Remington Rand снова были недовольны: мол, Грейс Хоппер снова выдумала слишком сложную систему, которая ещё и потребует больше компьютерных ресурсов. Однако профессор математики из Гарварда не сдалась, и в 1955 году представила прототип языка программирования FLOW-MATIC.

FLOW-MATIC представлял собой декларативный язык программирования, который разрабатывался для автоматизации бизнес-процессов. Для описания вычислений или обработки данных использовались ключевые слова, такие как “SUM” (сумма) или “COMPUTE” (вычисление). FLOW-MATIC также включал возможность работы с переменными данных и логическими условиями, что делало его гибким для разработки различных бизнес-приложений.

История C++ с 1953 года от FLOW-MATIC и Fortran до языка Си и Cfront 2
Документация к FLOW-MATIC

Обо всех новинках на рынке развивающихся ЭВМ программисты узнавали из ежемесячных профильных журналов, среди которых был “The Communications of the Association for Computing Machinery”. Работа Грейс Хоппер и её команды также не осталась незамеченной.

В это же время математик Джон Бэкус, который работал в IBM, написал руководству письмо, в котором предложил разработать совершенно другой язык программирования, полностью ориентированный на математические формулы. Дело в том, что сложные формулы было трудно перенести в код ассемблера без ошибок.

Надо отметить, что Бэкус тоже был известным математиком, который в начале 50-х создал интерпретатор для кода, поэтому предложение одобрили.

История C++ с 1953 года от FLOW-MATIC и Fortran до языка Си и Cfront 3
Джон Бэкус

В итоге в конце 1954 года была составлена первая спецификация The IBM Mathematical Formula Translating System.

Тут началась гонка языков программирования. Хоппер пыталась сделать компьютеры более дружелюбными для бизнес-пользователей, а Бэкус ломал голову над тем, как сделать компьютеры более дружелюбными для математиков.

Появление ALGOL и его эволюция в язык BСPL

Примерно к 1958 году Association for Computing Machinery совместно с немецким Обществом прикладной математики и механики (Gesellschaft für Angewandte Mathematik und Mechanik) создала рабочую группу, которая должна была создать “универсальный” язык программирования.

В мае-июне 1958 года в Цюрихе был организован форум, на котором обсуждался вопрос о создании Международного алгоритмического языка или IAL, название которого со временем трансформировалось в ALGOrithmic Language, то есть ALGOL.

Как это касается героев нашей статьи? Джон Бэкус тоже был в команде ACM по разработке ALGOL, но в это же время он работал над другим языком программирования — FORTRAN. Грейс Хоппер, которую на форум ACM не позвали, в то время работала над COBOL. В общем, Бэкус и Хоппер, как и в ситуации с компилятором и интерпретатором, занимались схожими проблемами, хотя их пути снова не пересеклись.

Команде ACM удалось выпустить ALGOL, но у него было множество серьезных недостатков. Большинство из них исправили в ALGOL-60, который стал чем-то вроде колыбели для многих других языков программирования. По словам Тони Хоара, разработчика алгоритма «быстрой сортировки», ALGOL-60 был лучшим языком по сравнению со многими своими преемниками.

История C++ с 1953 года от FLOW-MATIC и Fortran до языка Си и Cfront 4
Первая документация к ALGOL-60

В начале 60-х годов в Кембридже и в Университетском колледже Лондона ALGOL-60 все же были недовольны. Ученые объединились и создали CPL – Combined Programming Language (или Cambridge Plus London, есть и такая версия).

В отличие от ALGOL-60, который был минималистичным и полагался на элегантный дизайн для решения сложных задач, CPL предоставлял больше инструментов для решения проблем. Во многом CPL заимствовал достоинства FORTRAN, COBOL и SNOBOL и интегрировал их в ALGOL.

Однако CPL требовала значительных вычислительных ресурсов, которые надо было постоянно поддерживать и расширять. Это значит, конечно, что для программирования на CPL надо было постоянно тратиться на дорогущее железо.

К 1967 году программистам это совсем надоело, поэтому Мартин Ричардс из Кембриджа предложил снова упростить CPL. Если в прошлый раз CPL был осложнённым языком ALGOL, то теперь Ричардс предложил выбросить как можно больше компонентов от него же.

Следите за руками: сперва Хоппер и Бэкус начали создавать простые языки программирования, потом на основе их разработок был создан язык посложнее, то есть ALGOL. Потом на основе ALGOL появился ещё один язык посложнее, а теперь снова появилась потребность в том, чтобы упростить разработку.

В общем, программистам снова нужен был простой язык, который был бы более basic. Так появился Basic Combined Programming Language.

Как язык программирования BCPL стал языком B

Basic Combined Programming Language или BCPL был прекрасен. На нём было удобно писать, код можно было легко переносить, а претензий к программам вовсе не было. Код BCPL учитывал основные типы архитектур ЭВМ того времени, поэтому он отлично подходил для множества компьютеров.

Вот Hello World на BCLP:

			// Hello world demo
get "streams.d"
external
[
Ws
]

let Main() be
[
Ws("Hello World!*N")
]
		

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

К примеру, в его лаборатории стоял новенький компьютер PDP-11, и BCPL на нём работал плохо. Томпсон решил переделать BCPL, превратив его в BCPL-lite. От первоначального языка программирования осталась примерно четверть, поэтому и от его названия была отобрана только одна буква из четырёх — буква B из BCLP.

Язык B был вполне успешным: он был похож на BCPL, но вернул возможности ALGOL-60 по работе с типами данных. Томпсон хотел создать “семантику BCPL с большим количеством синтаксиса SMALGOL”.

История C++ с 1953 года от FLOW-MATIC и Fortran до языка Си и Cfront 5
Деннис Ритчи и Кен Томпсон

Начиная с 1972 года, коллега Томпсона по имени Деннис Ритчи решил проапгрейдить B. Язык стал универсальнее, и теперь он подходил как для написания приложений, так и для написания системного кода.

Кроме того, новый язык на основе B учитывал разнообразие типов появляющихся компьютеров. Около 1974 года Ритчи закончил работу над языком, который был следующим этапом эволюции после B. Конечно же, он назвал его C.

Появление языков C и C++

Язык C быстро стал универсальным языком в разработке систем и во многих исследованиях в IT. Эту нишу он занимал очень, очень долго. Язык Си стал инструментом, который использовали и для обучения, и для создания очень сложного и производительного кода.

Си не менялся до тех пор, пока один датчанин по имени Бьерн Страуструп не принялся за написание докторской диссертации. В скандинавских странах широкой популярностью пользовался язык Simula, разработанный норвежцами. Страуструп решил объединить возможности Simula (в частности, наследование, сильную типизацию и инлайнинг) с языком Си.

Дело в том, что Simula был очень медленным языком, а BCPL была слишком сложной для написания высокоуровневых программ.

В рамках докторской диссертации Страуструп решил создать инструмент, который был бы производительным, но при этом обеспечивал абстракцию. Его первой разработкой стал C with Classes.

В 1982 году он решил доработать C with Classes, чтобы язык мог работать над проблемой распределенных вычислений. Так появился C++.

Изначально Cpp не был полноценным языком. Это был пакет препроцессоров для языка C. Первый публичный релиз 1985 года, Cfront 1.0, был довольно приличным, но чтобы пользоваться им, надо было быть экспертом в C, чтобы не сломать свой же код.

К 1987 году GCC 1.15.3 начал поддерживать C++, а в 1989 году появился Cfront 2.0, который был гораздо лучше первой версии пакета.

Тем временем, Международная конференция по стандартизации стала набирать популярность, и в 1990 году был создан комитет ANSI C++, а в 1991 году – комитет ISO C++. В итоге появились C++98/03, затем C++11, затем C++14, C++17, C++20, и так далее.

Заключение

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

Сперва они создали простой язык, затем усложнили его, затем снова упростили, затем снова усложнили, затем снова упростили, немного усовершенствовали, и снова усложнили.

Сколько еще раз нам придется наблюдать этот процесс и во что превратится C++ в течение следующих пятидесяти лет?

Следите за новыми постами
Следите за новыми постами по любимым темам
2К открытий8К показов