Введение

Язык программирования POP 2 (также называемый POP2) — это язык программирования, разработанный около 1970 года на основе более раннего языка POP 1 (разработанного Робином Попплстоуном в 1968 году, изначально под названием COWSEL) Робином Попплстоуном и Родом Берсталлом в Эдинбургском университете. Он унаследовал идеи из различных источников: языков Lisp и ALGOL 60, а также теоретических разработок Питера Дж. Ландина. В нем использовался инкрементальный компилятор, который обеспечивал некоторую гибкость, характерную для интерпретируемых языков, включая возможность определения новых функций во время выполнения и изменения определений функций в процессе работы программы (оба эти свойства присущи динамической компиляции), но без издержек, свойственных интерпретируемым языкам.

История

Первоначальная версия 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.