Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Введение в специальность

.pdf
Скачиваний:
41
Добавлен:
11.05.2015
Размер:
5.78 Mб
Скачать

182

сти памяти ЭВМ (всего 4096 слов) авторы компилятора решили упроститьзадачу, отказавшисьотрекурсииинекоторыхдругихтрудных для реализации свойств Алгола. Зато их транслятор ТА-1, выпущенный уже в 1962 году, получился достаточно эффективным и быстродействующим, ондостаточноширокоиспользовалсявомногих организациях в европейской части Союза.

Второй коллектив дислоцировался в Институте прикладной математики АН СССР, туда был распределен почти весь первый выпуск учеников А.А.Ляпунова, окончивших в 1954 году мехмат МГУ по специальности «Программирование». Под руководством М.Р.Шура-БурыиЭдуардаЗиновьевичаЛюбимскогоонирешились на реализацию полной версии Алгола. Весной 1963 года компилятор был готов, он справлялся с самыми сложными примерами рекурсивных алгоритмов, но платой за это были худшее быстродействие компилятора и невысокая эффективность кода.

Третий коллектив сформировался в новосибирском Академгородке, куда в 1960 году вслед за А.А.Ляпуновым переехал 28-лет- ний А.П.Ершов, организовавший отдел программирования в Вычислительном центре Сибирского отделения АН СССР. Молодежная команда Ершова отважилась на разработку первого в мире оптимизирующего компилятора с предложенного ими языка Альфа, представляющегособойАлголбезрекурсий, нозаторасширенный комплексными чимслами и матричными операциями. Успех этого масштабногопроектавомногомбылопределенчеткойорганизациейтрудаколлективапрограммистов, по-видимому, этобылодиниз первых в СССР примеров научного управления разработкой программного обеспечения. В результате законченный к 1965 году Альфа-транслятор получился весьма удобным и эффективным, он широко использовалсяпринаписанииразнообразныхпрограммна М-20, особенно в сибирских вузах и НИИ.

В целом в первой половине 60-х годов Алгол-60 зарекомендовалсебясположительнойстороны, однакоскороначалипроявляться и недостатки языка.

Во, первых, Алгол задумывался прежде всего как международный язык для публикаций алгоритмов, поэтому авторы исключили

183

из эталонного языка все, что связано с конкретной реализацией, в частности, процедурыввода-вывода. Каквыяснилосьдалее, этобыло серьезнымстратегическимпросчетом, вчистопрактическомплане Алгол уступал Фортрану, имевшему развитой механизм форматов внешнегообмена.

Во-вторых, набор типов переменных в Алголе был очень ограничен: целые, вещественные и булевские скаляры, одномерные и многомерные массивы. Определение новых типовбыло невозможно, язык в этом смысле оказался замкнутым. Поскольку на практике требовались другие разнообразные типы — комплексные величины, структуры, — то разрабатывались бесчисленные расширения Алгола, ориентированные на тот или иной класс задач.

В1962 году за совершенствование языка взялась Международная федерация по обработке информации IFIP — International Federation for Information Processing. Она организовала комитет по Алголу, собрав в нем специалистов с мировыми именами — К. Хоара из Оксфорда (Великобритания); Никлауса Вирта из Цюриха (Швейцария), ван Вейнгаардена (Нидерланды) и др. Результатом многолетнейработысталАлгол-68 (пересмотренноесообщениебыло опубликовано уже в 1975 году).

СточкизрениятеорииАлгол-68 былшедевромточностиистройности. В нем были формализованы не только синтаксис, но и семантика, то есть правила толкования конструкций языка. Допускалосьпроизвольноеконструированиеновыхтипов, имелсябогатейшиймезанизмформатноговыводаит. д., словом, вязыкебыловсе, до чего могла додуматься на тот момент фантазия ученых. Однако ценойэтихновшествбылачрезмернаясложность. Передокончанием работы среди самих авторов языка даже возник раскол. Некоторыесчитали, чтоязыкполучилсяслишкомгромоздкимиегонельзя выпускатьвсвет, нонезначительноебольшинствонастоялонапубликации. ВитогеописаниеАлгола-68, написанноевпредельноформализованномстиле, рядовойпрограммистнемогдажепрочитать. Еще большие проблемы возникли с разработкой компиляторов. Некотороевремявообщебылонепонятно, возможналивпринципе

полнаяреализацияязыка. Ихотякомпиляторывконцеконцовбыли

184

созданы (например, в СССР в начале 80-х годов коллективом разработчиков из Ленинградского университета был реализован компилятор для ЕС ЭВМ, который успешно использовался в учебном процессе), времябылоупущено, практическаязначимостьАлгола68 оказалась равной нулю.

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

Pascal

Член комитета по Алголу-68 Никлаус Вирт

(Wirth, Niklaus; р. 1934) былпротивпринятияпе

и его потомки

реусложненногостандарта. Когдаснимнепосчи-

тались, онвзнакпротеста в1971 годуразработалновыйалголоподобныйязык, простойиясный, предназначенныйпреждевсегодля обучения студентов в Федеральном техническом университете в Швейцарии. В честь изобретателя первой вычислительной машины Вирт назвал язык Паскалем.

ВнешнийвидпрограммынабазовомПаскалепочтинеотличим оталгольного:

var

i, n: integer; s: float;

x: array[1..n] of real;

begin

s:=0;

for i:=1 to n do s:=s+x[i];

s:=s/n

end.

 

Второе рождение Паскаль пережил

 

в1984 году благодаряфранцузуФилип-

 

пу Кану (Kahn, Philippe), перенесшему

 

еговбезбрежныймирперсональныхком-

Никлаус Вирт

пьютеров. Кан родился в Париже, учил-

Филипп Кан кроме программирования увлекался еще игрой на саксофоне

185

ся в Цюрихе, где глубоко изучил теорию языков программирования, познакомилсясязыком Паскаль и применил свои знаниянапрактике, разработав длянегоисключительноскоростнойоптимизирующийкомпи- ляторTurbo-Pascal. Решивзаработатьнапоприщепрограммирования, Кан сел на пароход и поехалискатьсчастьявАмерику. Там в местечке Скоттс Вэлли недалеко от Сан-Хосе в Калифорниионорганизовалфир-

муBorland International и, имея всего20 000 долларов, развернул рекламу по продаже компилятора по почте. При этом цена была просто смехотворной — $49.95, в десять раз

ниже, чемуконкурентов. Заодинмесяцбылопродано3 000 копий, аза2 года— 300 000 (банковскиеслужащиедажезаподозрилиКана в почтовом мошенничестве, но были вынуждены извиниться). Так заоднуночьрасцвелафирмаBorland, прославившаясявысококачественными разработками технологического программного обеспечения на Паскале.

Паскальоказался идеальнымязыкомдляобучения программированию и быстро завоевал миллионы поклонников по обе стороны океана, став реальным конкурентом Бэйсику. Что касается использованияПаскалядляпрограммированияреальныхприложений, то базовая версия языка этого не позволяла — в ней не хватало развитых средств ввода-вывода и модульного программирования. Сам Вирт был против усложнения учебного языка, для практического программирования крупных систем он предложил расширение Паскаля, названное им Modula-2. Однако фирма Borland про-

Суперязык
PL/1

186

должала совершенствовать Паскаль, с каждой новой версией он становился все мощнее, впитывая, подобно Бэйсику, новые идеи в программировании. В начале 90-х годов в нем появились объекты, пришедшие из языков Simula и Smalltalk, а в середине десятилетия фирмаBorland, объединивводномпродуктевседостижениясвоего времени, втомчислеконцепциюмодульногопрограмиированияиз Modula-2, вышланарынокIBM PC сновойвизуальнойсредойпрограммирования Delphi. Этот пакет приобрел очень большую популярностьсредиприкладныхпрограммистов, втомчислевРоссии1.

Еще одним потомком Паскаля, стал язык Ada (назван в честь Ады Лавлейс). История его появления такова. В 1975 году Министерство обороны США, самый крупный потребитель компьютерныхпрограмм, обеспокоенноеотсутствиемединогопорядкаиязыковой несовместимостью, приняло решение разработать стандартный язык для программирования сложных и ответственных военныхприложений. Былобъявленширокиймеждународныйконкурс, в котором приняли участие 15 групп разработчиков. В результате несколькихтуроввмае1979 годавыявилсяпобедитель— французская фирма C.I.I., руководитель проекта Жан Ихбиа (Ichbiah, Jean).

Кромесредствпараллельногопрограммированияпроцессовреального времени, в нем заложены принципы модульного структурирования и раздельной компиляции. Проектирование компиляторадляАдыоказалосьоченьтрудоемкимделом, ктомужеПентагон поставил очень жеские условия тестирования — сквозь компилятордолжнобытьпрпущенонеменее2000 различныхзадач. В1986 годуязыкАдасталобязательнымдлявсехвоенныхразработокСША. Аналогичный стандарт принят в НАТО.

В то время, когда в Европе лучшие теоретики работали над Алголом-68, призванном заменить Фортран и Кобол, в Америке разворачивались

событиявокругсуперязыкаPL/1. В1963 годуIBM сталаготовитьк выпускусистемуIBM S/360. Желаясохранитьпревосходство, фирмаприступилакграндиозномупроектусозданияязыкадлябудущего десятилетия, который бы включал в себя достоинства всех изве-

187

стныхязыков— Алгола, Кобола, ФортранаидажеАссемблера. Был создан комитет подруководствомДжорджа Рэдина, в который кромеспециалистовIBM входиливедущиепрограммистыизфирмЛокхид, Стандард ойл и др. Комитет регулярно собирался на совеща- ниявотеляхЛос-АнджелесаиНью-Йорка.

Кмарту1964 годабылаготоваспецификацияновогосупер-язы-

ка, названного «скромно» PL/1 (Programming Language One). В от-

личие от Алгола-68, который глубоко и долго прорабатывался теоретически, PL/1 создавался в спешке и был логически очень рыхлым, представляя собой механическую смесь идей из многих языков. Критики сравнивали его с елкой со множеством украшений или с перочинным ножом в сто лезвий. Вместе с тем в языке было немалочистопрактическихнаходокнаинженерномуровне, например, указатели, макроопределения, механизмобработиисключительныхситуацийидр., чтопозволялописатьэффективныепрограммы на низком уровне. Позже, при создании компилятора, который делался в лаборатории IBM в Великобритании, язык был существенно упрощен и отредактирован.

Для того, чтобы получить представление о синтаксисе PL/1, приведем пример простейшей программы, решающей квадратное уравнение Ax2 + Bx + C=0. Значения A, B, C считываются с перфокарт (в эпоху PL/1 это было типичное устройство ввода), а комплексные корни X1 + i Y1 и X2 + i Y2 выдаются на печать.

EXAMPLE: PROCEDURE OPTIONS (MAIN);

ON ENDFILE (SYSIN) GO TO ENDING;

P1: GET LIST (A, B, C);

D = B*B — 4*A*C;

E = —B/(A+A);

IF D<0 THEN DO;

X1, X2 = E;

Y1 = SQRT(—D)/(A+A);

END;

ELSE DO;

R = SQRT(D)/(A+A);

X1 = E+R;

X2 = E — R;

Simula и Smalltalk -
революцияв программировании

188

Y1 = 0;

END;

Y2 = —Y1;

PUT LIST (X1, Y1, X2, Y2);

GO TO P1;

ENDING:;

END EXAMPLE;

ВсинтаксисезаметновлияниеФортранаиАлгола, чтожекасается объявления структур, то они явно заимствованы из Кобола:

DECLARE 1 DATE,

2 MONTH CHAR(2),

2 DAY CHAR(2),

2 YEAR CHAR(2);

Несмотря на теоретическое несовершенство, язык PL/1 сыграл исключительно важную роль в практике программирования для машинклассаIBM 360/370. ВСССРвэпоху АСУ(70-80-егоды) он был основным языком программирования экономических и науч- но-техническихзадачнаЕСЭВМ, атакжестандартнымязыкомдля обученияпрограммистов. КтомужеимеющиесявPL/1 механизмы низкоуровневого программирования (указатели, средства связи с вычислительной средой) позволяли писать весьма эффективные программы. Однако после появления персональных компьютеров популярностьязыкарезкоупала. Первыепоколениямикрокомпьютеров были слишком слабыми для реализации компилятора с PL/1,

акогда компьютеры стали достаточно мощными, было уже поздно

нишу PL/1 заняли Паскаль и Си.

Одним из специализированных расшире- нийАлгола-60 былязыкSimula, разработанный в 1964 году в Норвегии под руководствомДала(Dahl, Ole-Johan; ) и Нюгор-

да (Nygaard, Kristen; ). Этот язык предназначался для записи алгоритмовмоделированиядинамическихпроцессов(simulation — моделирование) и приобрел очень большую популярность среди специалистов, вплоть до наших дней он является живым языком имитационного моделирования. Однако историческое значение Simula

189

выходит далеко за рамки специализированного применения, в нем впервые появилось революционное для программирования понятие объекта. В языке Simula объекты были еще специализированными, авновойверсииязыкаSimula-67 понятиеобъектабылообобщено и ему придан универсальный характер.

Идея объекта далеко не сразу завоевала компьютерный мир. Первым масштабным проектом, воплотившим принцип объектноориентированногопрограммирования, былпроектAlto, реализованыйв1973 годуподруководствомАланаКеявXerox PARC, окотороммыговориливовторойглаве. ПрограммнуючастьпроектаAlto составили язык и система программирования Smalltalk — «разговорчик», развивающие принципы Simula-67, и коренным образом отличающиеся от всего, что было ранее.

Известные языки (Фортран, Алгол, Кобол, PL/1...) основывались на концепции «данные-процедуры», то есть были процедур- но-ориентированными. Smalltalk былпервымязыком, основанным на концепции «объекты-сообщения», то есть объектно-ориентиро- ванным. С точки зрения языка компьютер представляес собой среду, населенную объектами, которые посылают друг другу сообщения. Каждыйобъект— этокакбымикроскопическийкомпьютерсо своейпамятью(переменныеобъекта) исвоейсистемойкоманд(методыобъекта).

Для общения с пользователем в системе были впервые применены особые графические объекты — окна, а для управления ими использовался придуманный Дугласом Энгельбартом в 1968 году манипулятор« мышь». Языкшлифовалсявтечениенесколькихлет, в1980 годупоявиласьверсияSmalltalk/V, котораяинасегодняшний день является недосягаемым идеалом абсолютно-объектного программирования.

Для знакомства с внешним видом Smalltalk приведем пример программы, которая воодит, сортирует по возрастанию и выводит массив из 5 чисел:

|a|

a := Array new: 5.

1 to: 5 do: [:i | a at: i put:

С — язык для профессионалов

190

(Prompter prompt: ’Введите элемент массива’) asNumber]. a := a asSortedCollection.

a do: [:i | Transcript putAll: i printString].

Проект Smalltalk был прорывом в будущее, опередившим свое время на 10-20 лет. Хотя фирма не сумела извлечь из него коммерческую выгоду, могучие идеи проекта имели далекие последствия. После посещения руководством Apple в 1979 году центра PARC в мир ПК были вброшены принципы графического оконного интерфейса, аидеиобъектностистализавоевыватьвсесовременныеязыки программирования. В 1980 году появился «Си с объектами», позднее переименованный в C++, начиная с версии 5.5 объекты вошли в Паскаль, объектным стал Visual Basic, в 1995 году со скоростью эпидемии распространился 100% объектный Java и т. д.

ВместестемвозможностиоригинальногоSmalltalk доконцане исчерпаны. Удивительнаястройность, логичность, изящностьэтой системыпрограммирования, какнампредставляется, ещедолгобудутслужитьисточникомидейдлядругихсистем. НаSmalltalk обратила внимание фирма IBM, она включила его список базовых языковпрограммирования.

Язык Си был создан Деннисом Ричи

(Ritchie, Dennis M.; р. 1941) в 1973 году в

Bell Labs в ходе разработки операционной системыUNIX, окотороймыбудемговоритьвследующемпараграфе. Обычно для того, чтобы добиться максимальной эффективности, ядро ОС писали на языке ассемблера. За это приходилось платить узкой специализированностью: при переходе на новый тип процессорапрограммыпереписывалисьполностью. АвторыUNIX задумали ее как переносимую систему и решили написать ядро в основномнаязыкевысокогоуровня. Сипрекрасносправилсясэтой задачей, на немнаписанооколо90% кодаUNIX. Секрет втом, что, будучивцеломязыкомвысокогоуровня, СичерезуказателиисредствасвязисОСпозволяеточеньгибкоуправлятьпроцессомкомпиляциииисполненияпрограмм. Этикачества, атакжекомпактность сделалиСИлюбимымязыкомпрограммированиядлясистемныхпро-

191

граммистов.

ПосколькуUNIX быланекоммерческойсистемой, языкСивместе с ней разошелся повсем университетам мира. Исходная версия языкабылареализовананамини-ЭВМPDP-11, однаковпоследствии компилятороы появились практически для всех аппаратных платформ.

ЯзыкСиотличаеточеньлаконичныйсинтаксис. Воткаквыглядит, например, известная нам программа сортировки пяти чисел:

float A[5];

for(int i=0;i<5;i++)scanf("%f",&A[i]); i=0;

while(i<4){

if(A[i]<=A[i+1])i++;

else{

z=A[i];

A[i]=A[i+1];

A[i+1]:=z;

i=0;

}

};

for(i=0;i<5;i++)printf("%f\n",A[i]);

«Чистый» Сидосихпороченьширокоиспользуетсясистемными программистами для создания приложений, сравнимых по эффективности с программами, реализованными на языке Ассемблера, однако истинную славу этому изящному и компактному языку принесли его объектно-ориентированные потомки C++, Java и C#.

Вначале80-хгодовдругойсотрудникBell Labs БьярнСтрауструп (Stroustrup, Bjarne; р. 1950) на основе синтаксиса Си разрабо- талуниверсальныйобъектно-ориентированныйязыкпрограммиро- вания C++. Он является надмножеством (расширением) языка Си, поэтомупрограммы, написанныенаСи, могутобрабатыватьсякомпиляторамиC++. Новыйязыкприобрелширокуюпопулярностьиззасвоеймощи, компактностииуниверсальности. Внемреализованы все самые смелые идеи объектного программирования, например, множественноенаследие. Каквсякийобъектныйязык, С++ является неограниченно расширяемым. В нем можно описывать но-

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]