Язык обработки информации ( IPL ) - это язык программирования, созданный Алленом Ньюэллом , Клиффом Шоу и Гербертом А. Саймоном в RAND Corporation и Технологическом институте Карнеги примерно в 1956 году. Ньюэлл работал программистом-спецификатором языка, а Шоу - системой. программист, а Саймон работал программистом-пользователем приложения.
Парадигма | сборка |
---|---|
Разработано | Аллен Ньюэлл , Клифф Шоу , Герберт А. Саймон |
Разработчик | Аллен Ньюэлл, Клифф Шоу, Герберт А. Саймон |
Впервые появился | 1956 г. |
Стабильный выпуск | IPL-VI |
Операционные системы | Кроссплатформенность : JOHNNIAC , IBM 650 , IBM 704 , IBM 7090 |
Под влиянием | |
Лисп |
Код включает функции, предназначенные для помощи в программах, которые выполняют простые действия по решению проблем, такие как списки, распределение динамической памяти , типы данных , рекурсия , функции в качестве аргументов, генераторы и совместная многозадачность . IPL изобрела концепцию обработки списков, хотя и в стиле ассемблера .
Основы IPL
Компьютер IPL имеет:
- Набор символов . Все символы - адреса, а ячейки имени. В отличие от символов в более поздних языках, символы состоят из символа, за которым следует число, и записываются как H1, A29, 9-7, 9-100.
- Имена ячеек, начинающиеся с буквы, являются региональными и являются абсолютными адресами.
- Имена ячеек, начинающиеся с «9-», являются локальными и значимы в контексте одного списка. 9-1 одного списка не зависят от 9-1 другого списка.
- Остальные символы (например, чистые числа) являются внутренними .
- Набор ячеек . Списки составляются из нескольких ячеек, включая взаимные ссылки. В ячейках есть несколько полей:
- P, 3-битное поле, используемое для кода операции, когда ячейка используется как инструкция, и не используется, когда ячейка является данными.
- Q, трехзначное поле, используемое для косвенной ссылки, когда ячейка используется как инструкция, и не используется, когда ячейка является данными.
- SYMB, символ, используемый в качестве значения в ячейке.
- Набор примитивных процессов , которые в современных языках называются примитивными функциями .
Структура данных IPL - это список, но списки представляют собой более сложные структуры, чем во многих языках. Список состоит из односвязной последовательности символов, как и следовало ожидать, плюс некоторые списки описаний , которые являются вспомогательными односвязными списками, интерпретируемыми как чередующиеся имена и значения атрибутов. IPL предоставляет примитивы для доступа и изменения значения атрибута по имени. В описательных списках даются местные названия (в форме 9-1). Таким образом, список с именем L1, содержащий символы S4 и S5 и описанный путем связывания значения V1 с атрибутом A1 и V2 с атрибутом A2, будет сохранен следующим образом. 0 указывает конец списка; имена ячеек 100, 101 и т. д. являются автоматически генерируемыми внутренними символами, значения которых не имеют значения. Эти клетки могут быть разбросаны по памяти; только L1, использующий региональное имя, которое должно быть известно во всем мире, должен находиться в определенном месте.
Имя | SYMB | ССЫЛКА НА САЙТ |
---|---|---|
L1 | 9-1 | 100 |
100 | S4 | 101 |
101 | S5 | 0 |
9-1 | 0 | 200 |
200 | A1 | 201 |
201 | V1 | 202 |
202 | A2 | 203 |
203 | V2 | 0 |
IPL - это язык ассемблера для управления списками. В нем есть несколько ячеек, которые используются как специализированные регистры. Например, H1 - это счетчик программ. Поле SYMB H1 - это имя текущей инструкции. Однако H1 интерпретируется как список; LINK H1, говоря современным языком, является указателем на начало стека вызовов. Например, вызов подпрограмм помещает в этот стек SYMB H1.
H2 - это бесплатный список. Процедуры, которым необходимо выделить ячейки захвата памяти из H2; завершенные с памятью процедуры кладут на Н2. При входе в функцию список параметров задается в H0; при выходе результаты должны быть возвращены в H0. Многие процедуры возвращают логический результат, указывающий на успех или неудачу, который помещается в H5. Десять ячеек, W0-W9, зарезервированы для общего рабочего хранилища. Процедуры "морально связаны" (если цитировать статью CACM) сохранять и восстанавливать значения этих ячеек.
Имеется восемь инструкций, основанных на значениях P: вызов подпрограммы, нажатие / выталкивание S в H0; нажмите / вставьте символ в S в список, прикрепленный к S; копировать значение в S; условная ветвь. В этих инструкциях S - это цель. S - это либо значение поля SYMB, если Q = 0, либо символ в ячейке, названной SYMB, если Q = 1, либо символ в ячейке, названной символом в ячейке, названной SYMB, если Q = 2. Во всех случаях, кроме условного перехода, поле LINK ячейки сообщает, какую инструкцию выполнить следующей.
В IPL есть библиотека, содержащая около 150 основных операций. К ним относятся такие операции, как:
- Тестовые символы на равенство
- Найти, установить или стереть атрибут списка
- найти следующий символ в списке; вставить символ в список; стереть или скопировать весь список.
- Арифметические операции (над именами символов).
- Манипулирование символами; например, проверить, обозначает ли символ целое число, или сделать символ локальным.
- Операции ввода / вывода
- «генераторы», которые соответствуют итераторам и фильтрам в функциональном программировании. Например, генератор может принять список чисел и создать список их квадратов. Генераторы могут принимать соответственно спроектированные функции - строго адреса кода соответственно спроектированных функций - в качестве аргументов.
История
IPL был впервые использован для демонстрации того, что теоремы в Principia Mathematica, которые кропотливо доказывались вручную Бертраном Расселом и Альфредом Норт Уайтхедом , на самом деле могут быть доказаны путем вычислений . Согласно автобиографии Саймона « Модели моей жизни» , это приложение изначально было разработано путем моделирования вручную, с использованием его детей в качестве вычислительных элементов, при этом они записывали и держали карточки для заметок в качестве регистров, которые содержали переменные состояния программы.
IPL использовался для реализации нескольких ранних программ искусственного интеллекта , также тех же авторов: Logic Theorist (1956), General Problem Solver (1957) и их компьютерной шахматной программы NSS (1958).
Было создано несколько версий IPL: IPL-I (никогда не реализовывалось), IPL-II (1957 для JOHNNIAC ), IPL-III (существовало недолго), IPL-IV, IPL-V (1958, для IBM 650 , IBM 704 , IBM 7090 , Philco model 212 , многие др. Широко используются), IPL-VI.
Однако вскоре язык был вытеснен Лиспом , который имел гораздо более мощные возможности, более простой синтаксис и преимущества автоматической сборки мусора .
Наследие компьютерного программирования
IPL, возможно, представил несколько функций языка программирования:
- Манипуляции со списками - но только списками атомов, а не общими списками.
- Списки свойств - но только когда они прикреплены к другим спискам.
- Функции высшего порядка - за исключением того, что программирование на ассемблере всегда позволяло вычислять адреса вызываемых функций; IPL была ранней попыткой обобщить это свойство языка ассемблера и принципиальным образом
- Вычисление с использованием символов, за исключением того, что символы представляют собой букву + цифру, а не полные слова.
- Виртуальная машина .
Многие из этих функций были обобщены, рационализированы и включены в Lisp [1], а затем во многие другие языки программирования в течение следующих нескольких десятилетий.
Рекомендации
Источники
- Эта статья основана на материалах, взятых из Free On-line Dictionary of Computing до 1 ноября 2008 г. и включенных в соответствии с условиями «перелицензирования» GFDL версии 1.3 или новее.
дальнейшее чтение
- Ньюэлл, А. и ФК Шоу. «Программирование машины логической теории». Февраль 1957. Труды Западной совместной компьютерной конференции, стр. 230–240.
- Ньюэлл, Аллен и Фред М. Тонг. 1960. "Введение в язык обработки информации V." CACM 3 (4): 205-211.
- Ньюэлл, Аллен. 1964. Руководство по языку обработки информации-V; Второе издание . Rand Corporation [Аллен Ньюэлл], Энглвуд Клиффс, Нью-Джерси: Прентис-Холл.
- Сэмюэл, Артур Л .: Программирование компьютеров для игр. В: Достижения в области компьютеров, т. 1, 1960, pp 165–192 (особенно: 171–175).