Введение
Язык программирования POP 2 (также называемый POP2) — это язык программирования, разработанный около 1970 года на основе более раннего языка POP 1 (разработанного Робином Попплстоуном в 1968 году, изначально под названием COWSEL) Робином Попплстоуном и Родом Берсталлом в Эдинбургском университете. Он унаследовал идеи из различных источников: языков Lisp и ALGOL 60, а также теоретических разработок Питера Дж. Ландина. В нем использовался инкрементальный компилятор, который обеспечивал некоторую гибкость, характерную для интерпретируемых языков, включая возможность определения новых функций во время выполнения и изменения определений функций в процессе работы программы (оба эти свойства присущи динамической компиляции), но без издержек, свойственных интерпретируемым языкам.
POP 2 (also called POP2) is a programming language developed around 1970 from the earlier language POP 1 (developed by Robin Popplestone in 1968, originally named COWSEL) by Robin Popplestone and Rod Burstall at the University of Edinburgh. It drew roots from many sources: the languages Lisp and ALGOL 60, and theoretical ideas from Peter J. Landin. It used an incremental compiler, which gave it some of the flexibility of an interpreted language, including allowing new function definitions at run time and modification of function definitions while a program runs (both of which are features of dynamic compilation), without the overhead of an interpreted language.
История
Первоначальная версия POP 2 была реализована на компьютере Elliott 4130 в Эдинбургском университете (с оперативной памятью всего 64 КБ, увеличенной до 128 КБ в 1972 году). POP 2 был портирован на серию ICT 1900 на машине 1909 в Ланкастерском университете Джоном Скотом в 1968 году. В середине 1970-х годов POP 2 был портирован на БЭСМ-6 (система POPLAN). Более поздние версии были реализованы для Computer Technology Limited (CTL) Modular One, PDP 10, серии ICL 1900 (с операционной системой George). Джулиан Дэвис в Эдинбурге разработал расширенную версию POP 2, которую он назвал POP 10, для компьютера PDP 10 под управлением TOPS 10. Это был первый диалект POP 2, в котором регистр символов имел значение в именах идентификаторов, использовались строчные буквы для большинства системных идентификаторов и поддерживались длинные идентификаторы, состоящие более чем из 8 символов. Вскоре после этого Роберт Рей и Аллан Рамси в Эдинбурге реализовали новую версию, известную как WPOP (от WonderPop), в рамках проекта, финансируемого исследовательским советом. Эта версия представила огражденные адресные пространства, некоторую синтаксическую типизацию во время компиляции (например, для целых и вещественных чисел) и некоторые конструкции сопоставления с образцом для использования с различными структурами данных. Параллельно с этим Стив Харди из Университета Сассекса реализовал подмножество POP 2, которое он назвал POP 11, для компьютера PDP 11/40 производства Digital Equipment Corporation (DEC). Изначально он был разработан для работы на операционной системе DEC RSX 11D в режиме разделения времени для обучения, но это вызвало так много проблем, что была установлена и использована ранняя версия Unix. Эта версия Pop 11 была написана на языке ассемблера Unix, а код постепенно компилировался в промежуточный байт-код, который затем интерпретировался. Этот порт был завершен примерно в 1976 году, и в результате Pop 11 использовался во многих учебных заведениях. Для поддержки учебного процесса многие синтаксические особенности POP 2 были изменены, например, замена на и добавление более разнообразных конструкций циклов с закрывающими скобками, соответствующими открывающим, вместо использования для всех циклов в POP 2. Pop 11 также представил сопоставление с образцом для списков, что значительно упростило обучение программированию искусственного интеллекта (ИИ). Около 1980 года Стив Харди и Джон Гибсон портировали Pop 11 на компьютер VAX 11/780, а вскоре после этого он был заменен полноценным инкрементальным компилятором (генерирующим машинный код вместо интерпретируемого промежуточного кода). Наличие компилятора и всех его подпрограмм во время выполнения позволило поддерживать гораздо более широкие языковые расширения, чем с помощью макросов, и в результате Pop 11 был использован (Стивом Харди, Крисом Меллишем и Джоном Гибсоном) для создания реализации Prolog со стандартным синтаксисом Prolog, и объединенная система стала известна как Poplog, к которой позже были добавлены Common Lisp и Standard ML. Эта версия была портирована на различные машины и операционные системы, и в результате Pop 11 стал доминирующим диалектом POP 2, который до сих пор доступен в системе Poplog. Около 1986 года новая компания по ИИ Cognitive Applications Ltd. сотрудничала с сотрудниками Университета Сассекса для создания варианта Pop 11 под названием AlphaPop, работающего на компьютерах Apple Mac с интегрированной графикой. Он использовался для многих коммерческих проектов и для обучения программированию ИИ в нескольких университетах. Реализация на раннем диалекте C с использованием своеобразного компилятора затрудняла его поддержку и обновление до новых версий операционной системы Mac. Кроме того, AlphaPop не был "32-битным", поскольку использовал старшие биты адреса в качестве теговых битов для обозначения типа объектов, что было несовместимо с использованием памяти объемом более 8 МБ на более поздних Macintosh.