Первый этап развития компьютерных технологий относится к периоду, который начался до Второй мировой войны и продлился до начала 40-х годов.
Во время Второй мировой войны основной задачей компьютеров, называвшихся электронными вычислительными устройствами, было определение баллистических траекторий путем решения дифференциальных уравнений движения.
В начале 50-х годов начали появляться первые языки, использовавшие символьные системы обозначений. Грейс Хопер возглавила в компании Univac группу, которая разрабатывала язык А-0, а Джон Бэкус создал язык Speedcoding для IBM 701. Оба эти языка предназначались для преобразования простых арифметических выражений в исполняемый машинный код.
Настоящий прорыв произошел в 1957 году, когда Бэкус руководил группой по созданию языка FORTRAN, или транслятора формул (FORmula TRANslator).
На ранней стадии разработки FORTRAN был ориентирован на численные вычисления, но конечной целью был вполне законченный язык программирования, включающий в себя управляющие структуры, условные операторы ввода-вывода. Поскольку немногие верили, что получится язык, способный конкурировать с языком ассемблера, в котором машинные команды кодировались вручную основной задачей было создать эффективный исполняемый код, поэтому многие операторы разрабатывались с учетом специфики ЭВМ IBM 704.
Концепции языка FORTRAN типа механизма трехветвевого перехода вытекала напрямую из аппаратной архитектуры IBM 407, а операторы типа READ INPUT TAPE сегодня выглядят весьма причудливо. Все это выглядело не очень изящно, но в то время еще не задумывались об элегантном программировании, зато разработанный язык позволял писать программы, которые выполнялись достаточно быстро на ЭВМ упомянутого типа.
FORTRAN оказался весьма удачным языком и оставался доминирующим вплоть до 70-х годов.
Следующая версия FORTRAN вышла в 1958 году и стала называться FORTRAN II, а спустя несколько лет появился FORTRAN IV.
Поскольку каждый производитель ЭВМ реализовывал для своих компьютеров собственную версию языка, то, понятное дело, царил хаос.
В 1966 году FORTRAN IV стал стандартом под названием FORTRAN 66 и с тех пор дважды подвергался пересмотру, в результате чего возникли стандарты FORTRAN 77 и FORTRAN 90. Наличие большого количества программ, написанных на ранних версиях языка, явилось причиной того, что создаваемые трансляторы должны были удовлетворять требованиям обратной совместимости, что препятствовало внедрению в язык новых идей и концепций программирования.
Поскольку FORTRAN оказался столь успешным языком, в Европе возникли опасения, что IBM будет доминировать в компьютерной отрасли.
Немецкое общество прикладной математики (German society of applied mathematics — GAMM) создало комитет по разработке универсального языка. В то же время Association for Computing Machinery (ACM) организовала похожий комитет в США. Несмотря на то что у европейцев было некоторое беспокойство по поводу господства американцев, оба этих комитета слились в один. Под руководством Питера Наура (Peter Naur) этот комитет разработал IAL (International Algorithmic Language). Предлагавшееся название ALGOL (ALGOrithmic Language) было вначале отвергнуто. Но поскольку оно стало общеупотребительным, официальное имя IAL пришлось впоследствии изменить на ALGOL 58. Новая версия появилась в 1960 г., и ALGOL 60 (с небольшими изменениями, сделанными в 1962 году) с 60-х и до начала 70-х годов. прошлого века был стандартом академического языка программирования.
Если FORTRAN разрабатывался для эффективного использования на IBM 704, перед разработчиками языка ALGOL стояли совершенно другие цели, а именно:
1. Сделать систему обозначений в ALGOL как можно ближе к стандартной математической.
2. ALGOL должен быть приспособлен для описания алгоритмов.
3. Программы на ALGOL должны были компилироваться в машинный язык.
4. ALGOL не должен быть привязан к конкретной машинной архитектуре.
Все эти цели оказались в 1958 году недостижимы.
Чтобы обеспечить независимость от архитектуры, в этот язык не были включены возможности ввода-вывода; для таких операций следовало создавать специальные процедуры. Это и обеспечивало независимость языка от архитектуры компьютера, но в то же время приводило к тому, что каждая реализация неизбежно была несовместима с любой другой. Хотя ALGOL и имел некоторый успех в Европе, он так и не получил коммерческого успеха в Америке, тем не менее его влияние на другие языки было достаточно велико. В качестве примера приведем разработанную Шварцем (Jules Schwartz) из System Development Corporation (CDS) версию языка IAL —JOVIAL (Jules' Own Version of IAL). Этот язык использовался военно-воздушными силами США для решения прикладных задач.
Бэкус был редактором отчета, в котором определялся язык ALGOL. Он использовал синтаксическую систему обозначений, сопоставимую с концепцией контекстно-свободного языка, разработанной Хомским.
Так произошло внедрение теории формальных грамматик в область языков программирования .
Поскольку Бэкус и Наур внесли огромный вклад в концепцию разработки ALGOL, эта система обозначений носит их имя — нормальная форма Бэкуса-Наура (НФБ) (Backus-Naur Form — BNF).
Можно привести еще один пример влияния ALGOL.
Компания по продаже компьютеров Burroughs, которая после слияния с компанией Sperry Univac образовала компанию Unisys, обнаружила работы польского математика Лукашевича, который разработал методику, позволяющую записывать арифметические выражения без скобок, используя алгоритм вычислений с использованием стека. Эта методика оказала значительное влияние на теорию разработки компиляторов. Используя технологию, основанную на этой методике, компания Burroughs разработала компьютер В5500 со стековой архитектурой и вскоре реализовала компилятор языка ALGOL, значительно превышавший по скорости существовавшие в то время компиляторы языка FORTRAN.
С этого момента ситуация изменяется.
В 60-е годы была разработана концепция пользовательских типов данных, которая не была реализована ни в языке FORTRAN, ни в языке ALGOL.
Язык Simula-67, разработанный норвежцами Найгардом и Далом, ввел концепцию классов в ALGOL. В 80-е годы это натолкнуло Страуструпа на идею создать C++ как расширение С с добавлением понятия классов.
В середине 60-х годов Вирт разработал расширение языка ALGOL — ALGOL-W, пользовавшийся меньшим успехом. Тем не менее в 70-х годов. он же разработал Pascal, который стал языком научного программирования тех лет.
Другой комитет, ориентируясь на успех ALGOL 60, разработал язык ALGOL 68, который, однако, оказался слишком сложным для понимания и эффективной реализации.
С началом серийного выпуска в 1963 году новых компьютеров модели 360 фирма IBM в своей лаборатории Hursley, находящейся в Англии, разработала новый язык — NPL (New Programming Language). В связи с некоторым недовольством сотрудников Национальной физической лаборатории (English National Physical Laboratory) язык был переименован в MPPL (Multy-Purpose Programming Language). В дальнейшем это название было сокращено до PL/I.
Язык PL/I объединил в себе вычислительные возможности языка FORTRAN и возможности бизнес-программирования (обработки деловой информации), имевшиеся в языке COBOL.
В 70-е rоды PL/I пользовался некоторой популярностью (так, среди языков, описанных во втором издании этой книги, он обладал наибольшим количеством возможностей), в настоящее же время он практически забыт, поскольку вытеснен такими языками, как С, C++ и Ada. Версия PL/C этого языка в 70-е годы получила распространение как компилятор PL/I для студентов.
BASIC был разработан, чтобы удовлетворить потребность в численных расчетах людей, не имеющих отношения к науке, однако в дальнейшем его возможности были расширены и вышли далеко за рамки первоначальных целей.
|