^^ Problems of Informatics. 2017. N 2
EVOLUTION OF PROGRAMMING LANGUAGES
A. P. Ershov, S.B. Pokrovskiy
References
1. Higman B. Sravnitcrnoc izuchcnic vazykov programmirovaniva. M.: „Mir", 1974.
2. Sammet .J. E. Programming languages: History and future. .July 1972. CACM 15:7.
3. Sammet .J. E. Roster of programming languages for 1973. Nov. 1974. SIGPLAN Notices, 9:11.
4. Cheatham T. E. The recent evolution of programming languages. IEIP Congress'71 Ljubljana, Ang. 1971 (Invited papers).
5. Rosen S. Programming systems and languages: 1965 1975. .July 1972. CACM 15:7.
6. Ingerman P. Z. Taksonomiva diva programmirovaniva. Trudy Vtoroj Vsesovuznoj konferencii po programmirovanivu. Novosibirsk, 1970.
7. Bauehr F. YAzvki programmirovaniva s obrazovatel'noj i professional'noj tochek zreniva. Trudy Vtoroj Vsesovuznoj konferencii po programmirovanivu. Novosibirsk, 1970.
8. Babenko L. P., Rogach V. D., YUshchenko E. L. K voprosu sravneniva i klassifikaeii vazykov programmirovaniva /7 Kibernetika. 1975. N 2.
9. Ershov A. P. Algoritmicheskie vazvki programmirovaniva /7 Vestnik AN SSSR. 1968. N 3.
10. Proceeding of a symposium on very high level languages /7 (March 1974, Santa Monica, California). SIGPLAN Notices, 9:4 (April 1974).
11. Leavenworth B. M. and Sammet .J. E. Overview of nonprocedural languages. Ibid.
12. Bobrow D. G., Raphael B. New programming languages for AI research /7 ACM Computing Surveys. 1974. N 3.
13. Rabinovitz I. N. Report on the algorithmic languages FORTRAN 11 /7 CACM 5. 1962. P. 327 337.
14. IBM Operating System/360: FORTRAN IV, Form C28-6515-2, 1965.
15. Pcrvin YU. A. Osnovv Fortrana. „Nauka", 1972.
16. Naur P. (red.). Algoritmicheskij vazvk Algol 60, Peresmotrennoe soobshchenie. „Mir", M. 1965.
17. YUshchenko E. L. i dr. KOBOL. „Visheha shkola", Kiev, 1974.
18. American National Standard: Programming language COBOL. ANSI 1974.
19. A. vann Vejngaarden (red.) i dr. Soobshchenie ob algoritmicheskom vazyke Algol 68 /7 Kibernetika. 1969. N 6. 1970. N 1.
20. Lindsi CH. i Van dcr Mvujlen S. Neformal'noe vvcdcnic v Algol 68. M.: „Mir", 1973.
21. A. van Wijngaarden (ed.) et al. Revised report on the algorithmic language ALGOL 68 /7 Act a Informatica. 1975. Vol. 3. P. 1 3.
22. Sb. „Algoritmv i organizaciya resheniva algoritmicheskih zadach". M., 1974. Vvp. 3.
23. Virt N. YAzvk programmirovaniva Paskal' (peresmotrennoe soobshchenie). Novosibirsk, VC SO AN SSSR, 1974.
24. K. .Jensen, N. Wirth. PASCAL: User manual and report /7 Lecture Notes in Computer Science. 1974. Vol. 18.
Eptuoe A.n., noKpoecKuü C. E.
71
25. Universal'nyj yazvk programmirovaniva PL/1. AI.: „Mir", 1968.
26. Dal U.-I., Mvurhaug B., Nvugord K. SIMULA-67: Universal'nyj yazvk programmirovaniva. M.: „Mir", 1975. * * * * * *
27. Lavrov S. S., Silagadze G. S. Vhodnoj yazvk i interpretator sistemv programmirovaniva na baze yazvka LISP diva mashinv BEHSM-6. ITM i VT AN SSSR, M., 1969.
28. Iverson K. A Programming Language. Wiley, N.Y. 1962.
29. CHernobrod L. V. Obzor osnovnvh ponvatij vazvka programmirovaniva SETL. Sb. „Sistemnoe i teoreticheskoe programmirovanie", VC SO AN SSSR, Novosibirsk, 1972.
30. Hoare C. A. R. Hints on programming language design. MEMO AIM 224, CS-403, Stanford University, Oct. 1973.
31 Abrahams P. „Structured Programming" considered harmful. SIGPLAN Notices, April 1975. 10:4.
32. Dal U., Dejkstra EH., Hoor K. Strukturnoe programmirovanie. M.: „Mir", 1975.
33. Rehdin Dzh., Roguehj P. Osnovnve chertv NPL — novogo vazvka programmirovaniva. Sb. „Sovremennoe programmirovanie", vvp. 2, izd. „Sovetskoe radio", M., 1967.
34. Kleshchev A. S., Temov V. L. YAzvk programmirovaniva INF i ego realizaciva. L.: „Nauka", 1973. S. 3-18.
35. SIGPLAN Notices, 10:7 (Special issue on programminglanguage design, July 1925).
36. Wirth N. On the of programming languages (Invited paper). IFIP'74, North-Holland Publ. Co., Amsterdam, 1974.
37. Proceedings of the International Conference on the Production of Reliable Software, Los Angeles, California, USA, April 1975.
38. George J. E., Sager G. R. Variables — Bindings Protection. SIGPLAN Notices. Dec. 1973, 8:12.
39. Schumann S. (ed.). Proceedings of the International Symposium on Extensible Languages. SIGPLAN Notices. Dec. 1971. 6:12.
40. Weinberg J. M. The psychology of computer programming. N.Y., 1971.
41. EHnciklopediva kibernetiki, tt. 1, 2.
42. Gould I. H. (ed.). IFIP gide to concepts and terms in data processing. North-Holland Publ. Co., Amsterdam-London, 1971.
43. Ershov A. P. Programmirovanie. BSEH. 3-e izd. T. 27.
ЭВОЛЮЦИЯ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ
А. П. Ершов, С. Б. Покровский
В докладе мы попытаемся описать и свойства языков программирования высокохх) уровня; терминологию; историю; критерии оценки языков программирования; дадим обзор важнейших языков общмх) назначения (ПЛ/1, Алгол 68, Симула 67, Паскаль) с указанием важнейшей библиографии.
Терминология. Характерной чертой информатики, возможно, объясняемой ее быстрым ростом и молодостью, является разнобой в терминологии и определениях даже дня таких важных понятий, как „язык программирования". Нижеследующие определения приведены не только для справки, по и дня того, чтобы показать ограничения, наложенные нами па соответствующие понятия.
Данные суть представление информации в некотором формализованном виде, т. е. на некотором языке представления данных, создающем возможность ее передачи, храпения или обработки процессом.
Все дальнейшее изложение ведется в контексте автоматической обработки данных па автоматических цифровых вычислительных машинах.
Программа есть спецификация (данных и) действий над данными (действия хотя бы частично упорядочены во времени), подлежащих исполнению дня достижения некоторого желаемого результата.
Программирование есть разработка программы, обычно состоящая в анализе задачи (разбиении задачи па части или модули, спецификации форматов входных и выходных данных или сопряжений), кодировании, отладке и документировании.
Язык программирования, есть формальный язык (семиотическая система) дня представления программ или их частей.
Как и всякая семиотическая система, каждый язык программирования характеризуется — семантикой, т. е. совокупностью изображаемых в нем объектов и операций над этими объектами; — синтаксисом, т. е. правилами изображения этих объектов и операций; — прагматикой, т. е. совокупностью отношений между данной семиотической системой и ее пользователями (в частности — с задачей, которую пользователь пытается решить, используя данный язык программирования; другой пример — стоимость такого решения).
В дальнейшем мы будем рассматривать только такие языки программирования (мы будем называть их просто „языками"), которые предназначены дня программирования па них программистом-человеком (пользователем-человеком). Обычно такие языки включают не только конструкции дня представления алгоритма (собственно программ), по и некоторые средства, обнегчающие разработку, отладку и эксплуатацию программы.
Статья была написана для доклада на Второй всесоюзной конференции по исследованию операций в Петрозаводске в мае 1976 г. Ссылки на источнике в тексте даны в авторской редакции. А. П. Ершов. С. Б. Покровский. Эволюция языков программирования // Тез. докл. 2-й Всесоюз. конф. по исследованию операций. Петрозаводск. 10 14 мая 1976 г. М.. 1976. С. 39 54.
С другой стороны, каждый язык характеризуется областью приложений. По характеру использования программ можно выделить — системное программирование, связанное с разработкой программ, делающих использование вычислительных машин более удобным или вообще возможным, — разработку прикладных программ для прочих областей регулярных приложений (научных или коммерческих расчетов, моделирования и т, п.), из которых часто выделяют составление разовых программ, представляющих решение частной задачи из некоторого класса регулярных приложений.
По используемым при этом методам программирования можно выделить области, где преобладают или даже нужны исключительно символьная обработка и работа со списками, либо алгоритмы численных методов.
Языки программирования, пригодные (практичные) для использования в обеих указанных областях, часто называют „универсальными".
Язык, удобный для программирования преимущественно в некоторой, более или менее широкой области приложения (за счет, например, наличия специальных конструкций, облегчающих составление программ в соответствующей области, или высокой эффективности таких программ) называется специализированным.
Отметим, что особенности области приложений могут требовать включения в соответствующий специализированный язык всех возможностей „универсальных" языков (таково, например, положение с языками дискретного моделирования); однако использование этих языков вне их области приложений часто оказывается нецелесообразным ввиду издержек, к которым ведет наличие ненужных данной задаче возможностей. Универсальный язык, не имеющий такой особенности, называется языком общего назначения.
Далее мы рассматриваем почти исключительно языки высокого уровня, (процедурно-ориентированные языки). Это понятие относительно и неформально; оно предполагает, во всяком случае, что [2]: — для программирования на таком языке не требуется знания машинных команд; — в принципе возможен перенос написанных на таком языке программ с одной вычислительной системы на другую; — используемая в таком языке нотация „человечнее" (ближе к языку формулирования задачи), чем допускаемая ассемблером.
Еще менее определено понятие языков очень высокого уровня, (другие, более или менее синонимичные термины суть [10] „непроцедурные", „проблемно-ориентированные", „декларативные", „функциональные" языки; „языки отношений", „языки формулировки задач"; „языки искусственного интеллекта", „языки систем автоматического программирования (синтеза алгоритмов)" и проч.). Обычное определение состоит в том, что в таких языках программист может описанием желаемого результата (что ему нужно) в той или иной степени заменить алгоритм его получения (т, е, описание того, как этого результата достичь),
Наконец, хотелось бы обратить внимание на существенное различие между самим языком и его реализацией. Например, язык, как правило, недоопределяет особенности исполнения и способы реализации некоторых действий, имеющих (более или менее существенные) отличия на разных вычислительных системах.
Еще два термина из системного программирования, В большинстве рассматриваемых нами языков трансляция программы может быть отделена от ее исполнения. Статическими в таком случае называют те аспекты, свойства, конструкции языка, полная отработка (установление) которых может быть произведена во время трансляции. Напротив, динамические или интерпретационные конструкции или свойства суть те, которые необходимо отрабатываются в ходе счета программы.
История, В этом разделе мы постараемся дать не столько фактографию возникновения и исчезновения языков, сколько эволюцию точек зрения на роль языка в процессе программирования, а также критерии оценки и принципы разработки языков программирования.
Само понимание программирования на разных стадиях развития было различным. Расширялись области приложений, и менялась относительная роль разных стадий разработки программы,
В момент появления ориентированных на человека языков программирования (в начале 50-х годов) „автоматическим программированием" называли использование языка более или менее высокого уровня (вроде Фортрана) для написания программы — то, что впоследствии стали называть „автоматическим кодированием" (по крайней мере, по-английски [10]),
И в общем, и по сей день общераспространенные языки программирования высокого уровня (это справедливо, пожалуй, даже для Кобола и бесспорно для всех языков общего назначения) ориентированы почти исключительно на эту часть общего процесса программирования, В целом для „раннего периода" (1952-1958 гг.) характерны языки программирования, называемые „языками ассемблера" (Фортран, по существу, также является языком ассемблера, правда, с некоторыми ограничениями).
Далее последовали „наиболее плодовитые" [2] 1958 и 1959 гг., характеризующиеся, в частности
— появлением I А!.. или .\IgoI58:
— сообщением в 1959 г, о бэкуеовом формализме для описания Алгола;
— образованием в мае 1959 г, комитета КОДАСИЛ, создавшего язык Кобол;
— началом работы над Лиспом (1959 г.) [27],
В этот период в проектировании языков программирования сильно влияние чисто теоретических подходов (Алгол — алгоритмический язык, Лисп с его формульной структурой и ламбда-исчислением, математическая ориентация информационной алгебры КО-
ДАСИЛа).
Расширение области приложений вычислительного дела на коммерческие задачи привело к появлению Кобола [17, 18], довольно специализированного языка, интересного наличием настоящего стандарта (позволяющего переносить программы, а порой также и данные, безо всяких изменений с одной вычислительной системы на другую); и по сей день немного найдется языков, обращающих такое внимание на спецификацию данных и обстановки.
Все еще в круге тех же идей конца 50-х — начала 60-х годов начал разрабатываться 11.1 1 25 — первый „выживший" язык общего назначения, являющийся синтезом идей, заложенных в структуре Алгола 60 и Кобола, При этом разработчики языка руководствовались причудливой смесью „теоретических" и прагматических соображений, И хотя многие его черты (циклы, передача параметров, классы памяти) регулярнее, чем их аналоги в Алголе 60, в целом язык выглядит менее стройным из-за многочисленных исключений и, отчасти, из-за принципа „все проходит" (придания смысла даже малоестественным конструкциям), который продолжает то, что было неудачно в Алголе 60, и затрудняет понимание и отладку программы. Однако в целом 11.1 1 остается наиболее мощным и (потенциально) наиболее эффективным из существующих языков общего назначения, весьма полезным в областях, требующих универсального языка. Не заменив Фортран или Кобол, 11.1 1 прочно занял видное место в ряду „стандартных" языков программирования.
Продолжением той же линии явилась и разработка Алгола 68 [19-21], Еще в большей степени, чем 11.1 1. Алгол 68 „етатизирует" анализ программы и выявление ошибок. Еще в большей степени, чем 11.1 1. Алгол 68 выделяет наиболее эффективные и безопас-надеконетрукции (ср. циклы, подвижные массивы). Цели разработки, указанные в Сообщении [19], выглядят более убедительно, чем формулировка исходных установок 11.1 1 33, и в целом цели эти достигнуты. Хотя Алгол 68 гораздо более простой язык, чем 11.1 1. использованный в его официальном описании [19] формализм (который многие считают большим шагом вперед в методах описания языка) в целом произвел еще более тяжелое впечатление, чем в свое время бэкуеовы нормальные формы, и это впечатление не смогли сгладить даже появившиеся позднее более удобочитаемые пособия [20], Хотя в настоящее время имеется уже довольно много реализаций Алгола 68, до сих пор его теоретическое значение (как исходной точки многих работ по созданию новых языков) еще, пожалуй, превышает его практические применения.
Наиболее ярко тенденция к разумному ограничению предоставляемых пользователю возможностей (что позволяет улучшить диагностику и застраховать пользователя от некоторых семантических ошибок) проявилась в разработке еще одного языка общего назначения — языка Паскаль [22-24], Этот язык не содержит новых конструкций, которые давали бы пользователю „еще больший контроль над машиной", зато в нем впервые появились новые черты (идентификаторные типы — перечисления, метки выбора в выбирающих предложениях), делающие особенно легкими модификации написанных на этом языке программ и тем самым создающие предпосылки для использования языка не только при кодировании, но и при „программировании методом последовательного приближения (уточнения)",
Из специализированных универсальных языков отметим Симулу 67, которая, благодаря понятию класса, наиболее полно представляет идею языка модульного программирования, Концепция класса важна также как прообраз „акторов" в языках искусственного интеллекта; она является ярким выражением тезиса о языке, в своих конструкциях воплощающем определенный подход к задачам данной области как материализованной методике программирования. Шестидесятые годы характеризуются также развитием мультипрограммирования; уже 11.1 1 претендовал на пригодность для программирования решения задач в реальном времени; появилась и новая линия языков, предназначенных для диалога. Наибольшее распространение получили Бейсик (основанный на подмножестве Фортрана) и язык работы с „матрицами"АРЬ [28],
В целом по влиянию на „вычислительное сообщество" наиболее выделяются (по-прежнему!) Фортран, Алгол 60, Лисп, АРЬ, Несколько слабее (пока?) влияние новшеств Алгола 68 и Паскаля,
Работы по описанию и реализации языков программирования составили целую дисциплину — „программистскую лингвистику". Исследования в этой области ведутся в интересах
— систем, построения трансляторов (СИТ), т, е, автоматизированных систем, генерирующих по описанию языка (при более или менее активном участии системного программиста — „реализатора языка"), а иногда — и по описанию машины, транслятор с данного языка для данной машины;
— разработки расширяемых языков, т, е, языков со встроенным механизмом описания некоторого „нового языка" и автоматической генерацией трансляции для так созданных языков; тема эта, очень популярная в 60-х гг., в настоящее время полностью растворилась
в некоторых средствах новых языков программирования (описываемые виды и операции Алгола 68, например), и работах по СПТ;
— теоретических исследований и систем доказательства правильности алгоритмов (программ),
В конце 60-х и начале 70-х гг. стали появляться языки очень высокого уровня [10, 11]. Здесь следует упомянуть (появившуюся еще в 1962 г., но долго остававшуюся чисто экспериментальной) Кодасиловскую информационную алгебру, языки моделирования с их „ассоциативностью" и встроенным механизмом упорядочения и планирования процессов, языки искусственного интеллекта (Плэннер, Коннайвер, Сейл и проч.), характеризующиеся автоматическим бэктрэкингом, возможностями поиска в базах данных по образцам и вызовом процедур по образцам, и более теоретические работы над так называемыми теоретико-множественными языками, например, СЕТЛ [29].
Число „живых" языков программирования очень велико; Дж. Сэммит [3] приводит список таких языков для США на 1973 г., состоящий из 171 языка (из них 85 суть языки численных методов, символьной и строковой обработки, аналитических преобразований и языки общего назначения; остальные 86 лежат в менее традиционных языках). Отметим, что на 1972 г. Дж. Сэммит насчитала 184 языка, и что в промежутке в ее списке появилось 33 новых языка. Причины появления новых языков она резюмирует так [2]:
— появляются действительно новые изобразительные средства, или обнаруживается, что еще одна (новая) область приложений заслуживает собственного языка;
— опыт использования некоторого языка показывает, что для исправления его недостатков придется разработать язык заново;
— удобно соединить средства нескольких языков в одном языке;
— может оказаться, что увеличить изобразительную силу языка или изменить (улучшить) стиль программирования на нем легче, разработав совершенно новый язык, чем расширить или изменить уже существующий;
— разработка нового языка — занятие увлекательное, и порой удается найти заказчика;
— воспользоваться уже существующим языком для данной области приложений мешают антипатии или предрассудки;
— разработчик языка не знает о наличии достаточного для его целей языка и полагает, что он находится в условиях одного из первых двух пунктов.
Критерии оценки. При проектировании языков программирования было разработано несколько критериев, относительная важность которых в разное время и разными разработчиками оценивалась по-разному. Кроме того, следует учитывать класс языков, к которому эти критерии прилагаются (для нас это, в основном, языки общего назначения).
Универсальность особо ценилась в конце 50-х — начале 60-х гг. и сильно повлияла на Алгол 60 и 11.1 1: стремление к универсализации, обобщению приводило порой к предпочтению наиболее общих (не всегда самых эффективных) вариантов конструкций (ср. циклы и подстановку параметров в Алголе 60).
Полный доступ ко всем возможностям вычислительной системы.
Независимость от конкретной вычислительной системы, т. е. переносимость программ и совместимость реализаций (например, для возможности обмена файлами).
Модульность построения языка, позволяющая программисту работать только с нужной ему частью языка, не изучая всего языка в целом (в наибольшей степени достигнута в 11.1 1. хотя иногда для уяснения сообщения об ошибке программист будет вынужден выйти за границы своего „подмножества").
Легкость изучения (имеется в виду возможность охватить язык целиком). Ортогональность построения, выражающаяся в неограниченной сочетаемости разных конструкций без изменения их смысла в разных позициях; первоначально подразумевалась также независимость этих конструкций.
Лаконизм, в частности отсутствие избыточности, особенно такой, которая затрудняет модификации программы.
Защита от ошибок (надежность), основанная на некоторой избыточности языка. Статический контроль ошибок бесспорно надежнее динамических проверок. Иногда его расширяют до систем доказательств о программах, все еще совершенно непрактичных.
Эффективная реализуемость, имеющая много аспектов, В частности, пользователь не должен платить за наличие в языке дорогостоящих конструкций, которые ему в данной задаче не нужны (например, это может относиться к динамической поддержке).
Эффективность и удобство программирования. Также имеет много проявлений, В частности, язык должен подсказывать метод, или, во всяком случае, стиль представления, формы решения задачи, и предрасполагать к использованию наиболее эффективно исполняемых конструкций. Сюда же примыкает и
Легкость структурирования и модификации, особенно важная при коллективной разработке большой системы. Сюда относятся: локальность (пере)определений, средства членения на модули и защиты этих модулей от незаконного доступа, средства комплексации, пригодность языка для так называемого „структурного программирования" [31, 32], Наглядность или удобочитаемость программ.
Ниже следует аранжировка изученных авторами языков программирования Паскаль, Алгол 68 и Симула 67, Первым упоминается язык, наиболее полно удовлетворяющий критерию. Точка с запятой разделяет языки, заметно отличающиеся по данной оценке. Естественно, по каждому критерию аранжировка является ориентировочной, возможно, субъективной.
Универсальность применений: ПЛ/1; Алгол 68, Симула 67; Паскаль, Полнота доступа к возможностям машины: ПЛ/1 (события, упаковки, ситуации и проч.); Паскаль (упаковки), Алгол 68 (длины в видах, параллелизм); Симула 67, Переносимость программ: Кобол; Паскаль; ПЛ/1; Симула 67, Алгол 68, Модульность языка: ПЛ/1, Симула 67, Паскаль; Алгол 68 (много зарезервированных служебных слов).
Легкость изучения: Паскаль (язык скромен и логичен); Алгол 68, Симула 67 (языки побольше, но весьма логичны); ПЛ/1 (язык велик и довольно нерегулярен). Ортогональность: Алгол 68; ПЛ/1; Паскаль, Симула 67, Лаконичность: Алгол 68; Симула 67; ПЛ/1; Паскаль, Защита от ошибок: Алгол 68; Симула 67, Паскаль; ПЛ/1,
Эффективная, реализуемость: Паскаль, Алгол 68 (не считая сборки мусора!); ПЛ/1; Симула 67,
Эффективность программирования: Симула 67 (особенно в моделировании!), Паскаль; Алгол 68, ПЛ/1,
Легкость структурирования: Симула 67; ПЛ/1; Паскаль, Алгол 68, Легкость модификации программ,: Паскаль; ПЛ/1; Алгол 68,Симула 67, Наглядность (удобочитаемость программ); Паскаль; ПЛ/1; Алгол 68, Симула 67,
Список литературы
1. Хигман Б. Сравнительное изучение языков программирования. М.: „Мир", 1974.
2. Sammet J. Е. Programming languages: History and future. July 1972. CACM 15:7.
3. Sammet J. E. Roster of programming languages for 1973. Nov. 1974. SIGPLAN Notices, 9:11.
4. Cheatham Т. E. The recent evolution of programming languages. IEIP Congress'71 Ljubljana, Ang. 1971 (Invited papers).
5. Rosen S. Programming systems and languages: 1965-1975. July 1972. CACM 15:7.
6. Ингерман П. 3. Таксономия для программирования. Труды Второй Всесоюзной конференции по программированию. Новосибирск, 1970.
7. Бауэр Ф. Языки программирования с образовательной и профессиональной точек зрения. Труды Второй Всесоюзной конференции по программированию. Новосибирск, 1970.
8. Бабенко Л. П., Рогач В. Д., Ющенко Е. Л. К вопросу сравнения и классификации языков программирования // Кибернетика. 1975. № 2.
9. Ершов А. П. Алгоритмические языки программирования // Вестник АН СССР. 1968. № 3.
10. Proceeding of a symposium on very high level languages // (March 1974, Santa Monica, California). SIGPLAN Notices, 9:4 (April 1974).
11. Leavenworth В. M. and Sammet J. E. Overview of nonprocedural languages. Ibid.
12. Bobrow D. G., Raphael B. New programming languages for AI research // ACM Computing Surveys. 1974. N 3.
Описания языков
13. Rabinovitz I. N. Report on the algorithmic languages FORTRAN 11 // CACM 5. 1962. P. 327-337.
14. IBM Operating Svstem/360: FORTRAN IV, Form C28-6515-2, 1965.
15. Первин Ю. А. Основы Фортрана. „Наука", 1972.
16. Havp П. (ред.). Алгоритмический язык Алгол 60, Пересмотренное сообщение. „Мир", М. 1965.
17. Ющенко Е. Л. и др. КОБОЛ. „Вища школа", Киев, 1974.
18. American National Standard: Programming language COBOL. ANSI 1974.
19. А. ванн Вейнгаарден (ред.) и др. Сообщение об алгоритмическом языке Алгол 68 // Кибернетика. 1969. № 6. 1970. № 1.
20. Линдси Ч. и Ван дер Мюйлен С. Неформальное введение в Алгол 68. М.: „Мир", 1973.
21. A. van Wijngaarden (ed.) et al. Revised report on the algorithmic language ALGOL 68 // Act a Informática. 1975. Vol. 3. P. 1-3.
22. Сб. „Алгоритмы и организация решения алгоритмических задач". \!.. 1974. Вып. 3.
23. Вирт Н. Язык программирования Паскаль (пересмотренное сообщение). Новосибирск, ВЦ СО АН СССР, 1974.
24. К. Jensen, N. Wirth. PASCAL: User manual and report // Lecture Notes in Computer Science. 1974. Vol. 18.
25. Универсальный язык программирования PL/1. M.: „Мир", 1968.
26. Дал У.-И., Мюрхауг Б., Нюгорд К. СИМУЛА-67: Универсальный язык программирования. М.: „Мир", 1975.
27. Лавров С. С., Силагадзе Г. С. Входной язык и интерпретатор системы программирования на базе языка ЛИСП для машины БЭСМ-6. ИТМ и ВТ АН СССР, \!.. 1969.
28. Iverson К. A Programming Language. Wiley, N.Y. 1962.
29. Черноброд Л. В. Обзор основных понятий языка программирования СЕТЛ. Сб. „Системное и теоретическое программирование", ВЦ СО АН СССР, Новосибирск, 1972.
Критерии и методология
30. Ноаге С. A. R. Hints on programming language design. MEMO AIM 224, CS-403, Stanford University, Oct. 1973.
31 Abrahams P. „Structured Programming" considered harmful. SIGPLAN Notices, April 1975. 10:4.
32. Дал У., Дейкстра Э., Хоор К. Структурное программирование. М.: „Мир", 1975.
33. Рэдин Дж., Рогуэй П. Основные черты NPL — нового языка программирования. Сб. „Современное программирование", вып. 2, изд. „Советское радио", \!.. 1967.
34. Клещев А. С., Темов В. Л. Язык программирования ИНФ и его реализация. Л.: „Наука", 1973. С. 3-18. *
35. SIGPLAN Notices, 10:7 (Special issue on programminglanguage design, July 1925).
36. Wirth N. On the of programming languages (Invited paper). IFIP'74, North-Holland Publ. Co., Amsterdam, 1974.
37. Proceedings of the International Conference on the Production of Reliable Software, Los Angeles, California, USA, April 1975.
38. George J. E., Sager G. R. Variables — Bindings Protection. SIGPLAN Notices. Dec. 1973, 8:12.
39. Schumann S. (ed.). Proceedings of the International Symposium on Extensible Languages. SIGPLAN Notices. Dec. 1971. 6:12.
40. Weinberg J. M. The psychology of computer programming. N.Y., 1971. Терминология
41. Энциклопедия кибернетики, тт. 1, 2.
42. Gould I. Н. (ed.). IFIP gide to concepts and terms in data processing. North-Holland Publ. Co., Amsterdam-London, 1971.
43. Ершов А. П. Программирование. БСЭ. 3-е изд. Т. 27.