Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
розділ_1_28_08_15.doc
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
2 Мб
Скачать
☆

4.5.7. Оцінка мови algol 60

Якщо судити з одних показників, то мова ALGOL 60 мала приголомшливий успіх, якщо з інших — була найбільшим провалом. Успіхом, що проявився практично одразу ж, було те, що вона стала єдиним офіційним засобом представлення алгоритмів у науковій літературі і понад 20 років залишалася ним. Кожна імперативна мова програмування, створена після 1960 року, щось запозичила у мови ALGOL 60. Більшість з них прямо чи опосередковано є нащадками мови ALGOL 60; як приклади можна назвати мови PL/I, SIMULA 67, ALGOL 67, ALGOL 68, З, Pascal, Ada, C++ і Java.

У процесі створення мов ALGOL 58/ALGOL 60 багато чого було зроблено вперше. Вперше інтернаціональна група спробувала розробити мову програмування. Мова ALGOL була першою машинно-незалежною мовою. Вона також була першою мовою з формально описаним синтаксисом. Це успішне використання форми BNF поклало початок декільком важливим галузям теорії обчислювальних систем: формальним мовам, теорії синтаксичного аналізу і теорії розробки компіляторів. У підсумку, структура мови ALGOL 60 вплинула на машинну архітектуру. Одним з найвидатніших прикладів цього є той факт, що розширена версія цієї мови використовувалася як системна мова в серії універсальних обчислювальних машин компанії Burrough: B5000, B6000 і В7000, що були сконструйовані з апаратно-реалізованим стеком для ефективної реалізації блокової структури і рекурсивних процедур мови.

Розглянемо зворотну сторону медалі: у Сполучених Штатах мова ALGOL 60 ніколи не набула широкого поширення чи хоча б значного використання. Навіть у Європі вона так і не стала домінуючою мовою. Можна навести безліч причин, що призвели до цього. По-перше, деякі властивості мови ALGOL 60 сталі занадто гнучкими; вони ускладнювали розуміння і робили реалізацію мови неефективною. Кращим прикладом цього є метод передачі підпрограмам параметрів за ім’ям, докладно описаний у главі 8. Складності реалізації мови ALGOL 60 сформулював Рутішаузер (Rutishauser, 1967), який зазначив, що далеко не всі (якщо такі взагалі є) реалізації містять мова ALGOL 60 повністю.

Відсутність у мові операторів вводу-виводу було ще однією істотною причиною її неприйняття. Залежні від реалізації введення і виведення ускладнювали перенесення програм на інші комп'ютери.

Один з найважливіших пов'язаних з мовою ALGOL 60 внесків у комп'ютерні науки — форма BNF — також не сприяв широкому поширенню мови. Хоча зараз ця форма розглядається як простий і елегантний засіб опису синтаксичної структури, у 1960 році вона здавалася дивною і складною.

На останок відмітимо, що, хоча й існувало безліч інших проблем, мова FORTRAN, що стала звичною у середовищі користувачів, а також відсутність підтримки з боку корпорації IBM, були, імовірно вирішальними факторами провалу мови ALGOL60 як мови широкого застосування.

Робота над мовою ALGOL 60 у дійсності ніколи не закінчувалась в тому розумінні, що неясності і невизначеності завжди були частиною опису цієї мови (Knuth, 1967).

Нижче неведений приклад програми мовою ALGOL 60.

comment Приклад програми мовою ALGOL 60

Введення: Ціле число listlen, менше 100, за яким іде набір цілих чисел у кількості listlen

Виведення: Кількість введених величин, що більше їх середнього арифметичного;

begin

integer array intlist [1:99];

integer listlen, counter, sum, average, result;

sum := 0;

result := 0;

readint (listlen);

if (listlen > 0) ^ (listlen < 100) then

begin

comment Зчитування вхідних величин у масив і обчислення суми;

for counter := 1 step 1 until listlen do

begin

readint (intlist[counter]);

sum := sum + intlist[counter]

end;

comment Обчислення середнього арифметичних;

average := sum / listlen;

comment Обчислення кількості вхідних величин, що більше їх середнього;

for counter := 1 step 1 until listlen do

if intlist[counter] > average

then result := result + 1;

comment Виведення результатів;

printstring("Число величин, що більше їх середнього:);

printint (result)

end

else

printstring ("Помилка — уведена невірна довжина списку");

end

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