Jump to content

ПОП-2

ПОП-2
Парадигма Мультипарадигмальность : структурированная , рефлексивная , процедурная.
Семья Лисп : ПОП
Разработано Робин Попплстоун ; Род Берстолл , Стив Харди; Роберт Рэй, Аллан Рэмзи
Разработчики Эдинбургский университет
Университет Сассекса
Впервые появился 1970 год ; 54 года назад ( 1970 )
Стабильная версия
1975 год / 1975 ; 49 лет назад ( 1975 )
Дисциплина набора текста динамичный
Язык реализации сборка
Платформа Эллиотт 4130 , ИКТ 1909 , БЭСМ-6 , ПДП-10 , ПДП-11
ТЫ Джордж , TOPS-10 , Unix
Лицензия Собственный
Основные реализации
WPOP
Диалекты
ПОП-10
Под влиянием
Lisp , ALGOL 60 , COWSEL (переименованный в POP-1)
Под влиянием
ПОП-11

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

Описание [ править ]

Стек [ править ]

POP-2 Синтаксис аналогичен ALGOL , за исключением того, что назначения выполняются в обратном порядке: вместо записи

a  := 3;

один пишет

3 -> a;

Причина этого в том, что в языке имеется явное понятие стека операндов . Таким образом, предварительное присваивание можно записать в виде двух отдельных операторов :

3;

который оценивает значение 3 и оставляет его в стеке, и

-> a;

который извлекает верхнее значение из стека и присваивает его переменной « a». Аналогично, вызов функции

f(x, y, z);

можно записать как

x, y, z; f();

(запятые и точки с запятой в основном взаимозаменяемы) или даже

x, y, z.f;

или

(x, y, z).f;

Благодаря парадигме , основанной на стеке , нет необходимости различать операторы и выражения ; таким образом, две конструкции

if a > b then
       c -> e
   else
       d -> e
   close;

и

if a > b then
       c
   else
       d
   close -> e;

эквивалентны (использование close, как endif не стал обычным явлением end-of-if-clause обозначения еще).

Массивы и дублетные функции [ править ]

Не существует специальных языковых конструкций для создания массивов или структур записи в обычном понимании: вместо этого они создаются с помощью специальных встроенных функций, например, newarray[2] (для массивов, которые могут содержать элементы любого типа) и newanyarray[3] для создания ограниченных типов предметов.

Таким образом, средства доступа к элементу массива и полю записи являются просто частными случаями дублетной функции : это функция, к которой в качестве средства обновления прикреплена другая функция , [4] который вызывается на принимающей стороне задания. Таким образом, если переменная a содержит массив, то

3 -> a(4);

эквивалентно

updater(a)(3, 4);

встроенная функция updater возвращение средства обновления дублета. Конечно, updater является дублетом и может использоваться для изменения компонента средства обновления дублета.

Функции [ править ]

Переменные могут содержать значения любого типа, включая функции, которые являются объектами первого класса. Таким образом, следующие конструкции

function max x y; if x > y then x else y close end;

и

vars max;
   lambda x y; if x > y then x else y close end -> max;

эквивалентны.

Интересная операция над функциями — частичное применение (иногда называемое каррированием ). При частичном применении некоторое количество самых правых аргументов функции (последних, помещенных в стек перед использованием функции) замораживается до заданных значений, чтобы создать новую функцию с меньшим количеством аргументов, что замыканием является оригинальная функция. Например, рассмотрим функцию для вычисления общих полиномов второй степени:

function poly2 x a b c; a * x * x + b * x + c end;

Это может быть связано, например, как

vars less1squared;
   poly2(% 1, -2, 1%) -> less1squared;

такое, что выражение

less1squared(3)

применяет замыкание poly2 с тремя замороженными аргументами к аргументу 3, возвращая квадрат (3 - 1), который равен 4. Применение частично примененной функции приводит к замораживанию значений (в данном случае 1, -2, 1 ) для добавления к тому, что уже находится в стеке (в данном случае 3), после чего вызывается исходная функция poly2. Затем он использует четыре верхних элемента стека, получая тот же результат, что и

poly2(3, 1, -2, 1)

то есть

1*3*3 + (-2)*3 + 1

Определение оператора [ править ]

В POP-2 появилась возможность определять новые операции (операторов в современном понимании). [5]

vars operation 3 +*;
    lambda x y; x * x + y * y end -> nonop +*

Первая строка объявляет новую операцию +* с приоритетом (приоритетом) 3. Вторая строка создает функцию f(x,y)=x*x+y*y и присваивает ее вновь объявленной операции +*.

История [ править ]

Первоначальная версия POP-2 была реализована на компьютере Elliott 4130 в Эдинбургском университете (всего с 64 КБ ОЗУ, увеличенным вдвое до 128 КБ в 1972 году). [6]

POP-2 был портирован в серию ICT 1900 в 1909 году в Ланкастерском университете Джоном Скоттом в 1968 году.

В середине 1970-х годов ПОП-2 была портирована на БЭСМ-6 (Система ПОПЛАН).

В 1978 году Хэмиш Дьюар реализовал версию POP-2 специально для использования студентами Эдинбургского университета на уроке AI2 (искусственный интеллект, уровень 2-го курса) с использованием операционной системы EMAS . Эта реализация была написана с нуля на эдинбургском языке программирования IMP . [7]

Более поздние версии были реализованы для 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 году, и в результате Поп-11 использовался в нескольких местах для обучения. Для поддержки обучающей функции многие синтаксические особенности POP-2 были изменены, например, заменены function ... end с define ... enddefine и добавление более широкого разнообразия циклических конструкций с закрывающими скобками, соответствующими открывающим скобкам, вместо использования close для всех шлейфов в POP-2. Pop-11 также представил средство сопоставления шаблонов для списковых структур, что значительно облегчило обучение программированию искусственного интеллекта (ИИ).

Примерно в 1980 году Pop-11 был портирован на компьютер VAX-11/780 Стивом Харди и Джоном Гибсоном, и вскоре после этого он был заменен полным инкрементальным компилятором (генерирующим машинный код вместо интерпретируемого промежуточного кода). Существование компилятора и всех его подпрограмм во время выполнения позволило поддерживать гораздо более широкие расширения языка, чем это возможно с помощью макросов, и в результате Pop-11 был использован (Стивом Харди, Крисом Меллишом и Джоном Гибсоном) для создания реализация Пролога с использованием стандартного синтаксиса Пролога, и объединенная система стала известна как 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.

См. также [ править ]

Ссылки [ править ]

Общий
  • Берстолл, Р.; Коллинз, Дж.; Попплстоун, Р. (1968). Программирование в Pop-2 . Эдинбург: Издательство Эдинбургского университета.
  • Дэвис, DJM (1976). «Руководство пользователя POP-10». Отчет по информатике (25).
  • Смит, Р.; Сломан, А.; Гибсон, Дж. (1992). «Поддержка двухуровневой виртуальной машины POPLOG для интерактивных языков». В Д. Слимане и Н. Бернсене (ред.). Направления исследований в когнитивной науке . Том. 5: Искусственный интеллект. Лоуренс Эрлбаум Ассошиэйтс. стр. 203–231.
  • POP-ссылки
В соответствии
  1. ^ Берстолл, РМ ; Коллинз, Дж. С.; Попплстоун, Р.Дж. (1968). Документы POP-2 (PDF) . Лондон: Круглый стол.
  2. ^ Рубинштейн, Марк; Сломан, А. (октябрь 1985 г. - апрель 1989 г.). «Помощь Newarray» . Университет Бирмингема . Проверено 22 марта 2024 г.
  3. ^ Харди, Стивен; Уильямс, Джон; Сломан, А. (январь 1978 г. - апрель 1986 г.). «Помощь Ньюаньярраю» . Университет Бирмингема . Проверено 22 марта 2024 г.
  4. ^ Сломан, А. (апрель 1985 г.). «Помощь обновлению» . Университет Бирмингема . Проверено 21 марта 2024 г.
  5. ^ Справочное руководство POP-2 , стр. 217, и «Введение в изучение языков программирования» Дэвида Уильяма Бэррона, стр. 75.
  6. ^ Данн, Раймонд Д. (февраль 1970 г.). «Руководство пользователя POP-2/4100» (PDF) . Школа искусственного интеллекта . Эдинбургский университет . Проверено 3 июня 2022 г.
  7. ^ Дьюар, Хэмиш. «Исходный код EMAS Pop-2» .

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: fdd9311ead4fec3e447014f127aae7a7__1716314580
URL1:https://arc.ask3.ru/arc/aa/fd/a7/fdd9311ead4fec3e447014f127aae7a7.html
Заголовок, (Title) документа по адресу, URL1:
POP-2 - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)