Язык обработки информации - Information Processing Language
Парадигма | сборка |
---|---|
Разработано | Аллен Ньюэлл, Клифф Шоу, Герберт А. Саймон |
Разработчик | Аллен Ньюэлл, Клифф Шоу, Герберт А. Саймон |
Впервые появился | 1956 |
Стабильный выпуск | IPL-VI |
Операционные системы | Кроссплатформенность: ДЖОННИАК, IBM 650, IBM 704, IBM 7090 |
Под влиянием | |
Лисп |
Язык обработки информации (IPL) это язык программирования сделано Аллен Ньюэлл, Клифф Шоу, и Герберт А. Саймон в RAND Corporation и Технологический институт Карнеги примерно в 1956 году. Ньюэлл работал программистом приложений-спецификаторов языка, Шоу был системным программистом, а Саймон выполнял работу программиста-пользователя приложений.
Код включает функции, предназначенные для помощи с программами, которые выполняют простые действия по решению проблем, такие как списки, распределение динамической памяти, типы данных, рекурсия, функции как аргументы, генераторы и совместная многозадачность. IPL изобрела концепцию обработки списков, хотя и в язык ассемблера стиль.
Основы IPL
Компьютер IPL имеет:
- Набор символы. Все символы - адреса, а ячейки имени. В отличие от символов в более поздних языках, символы состоят из символа, за которым следует число, и записываются как H1, A29, 9-7, 9-100.
- Имена ячеек, начинающиеся с буквы: региональный, и являются абсолютными адресами.
- Имена ячеек, начинающиеся с "9-", являются местный, и значимы в контексте одного списка. 9-1 одного списка не зависят от 9-1 другого списка.
- Другие символы (например, чистые числа) внутренний.
- Набор клетки. Списки составляются из нескольких ячеек, включая взаимные ссылки. В ячейках есть несколько полей:
- P, 3-битное поле, используемое для кода операции, когда ячейка используется в качестве инструкции, и не используется, когда ячейка является данными.
- Q, 3-значное поле, используемое для косвенной ссылки, когда ячейка используется как инструкция, и не используется, когда ячейка является данными.
- 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 интерпретируется как список; ССЫЛКА H1, говоря современным языком, является указателем на начало стека вызовов. Например, вызовы подпрограммы помещают в этот стек SYMB H1.
H2 - это бесплатный список. Процедуры, которым необходимо выделить ячейки захвата памяти из H2; завершенные с памятью процедуры помещают его на Н2. При входе в функцию список параметров задается в H0; при выходе результаты должны быть возвращены в H0. Многие процедуры возвращают логический результат, указывающий на успех или неудачу, который помещается в H5. Десять ячеек, W0-W9, зарезервированы для общественной рабочей памяти. Процедуры «морально связаны» (если цитировать статью CACM) сохранять и восстанавливать значения этих ячеек.
Есть восемь инструкций, основанных на значениях P: вызов подпрограммы, push / pop S на H0; нажмите / вставьте символ в S в список, прикрепленный к S; копировать значение в S; условная ветвь. В этих инструкциях S является целью. S - это либо значение поля SYMB, если Q = 0, либо символ в ячейке, названной SYMB, если Q = 1, либо символ в ячейке, названной символом в ячейке, названной SYMB, если Q = 2. Во всех случаях, кроме условного перехода, поле LINK ячейки сообщает, какую инструкцию выполнить следующей.
IPL имеет библиотеку, содержащую около 150 основных операций. К ним относятся такие операции, как:
- Тестовые символы на равенство
- Найти, установить или стереть атрибут списка
- найти следующий символ в списке; вставить символ в список; стереть или скопировать весь список.
- Арифметические операции (над именами символов).
- Манипулирование символами; например, проверить, обозначает ли символ целое число, или сделать символ локальным.
- Операции ввода / вывода
- «генераторы», которые соответствуют итераторам и фильтрам в функциональном программировании. Например, генератор может принять список чисел и создать список их квадратов. Генераторы могут принимать соответственно спроектированные функции - строго адреса кода соответственно спроектированных функций - в качестве аргументов.
История
IPL был впервые использован для демонстрации того, что теоремы в Principia Mathematica которые были тщательно проверены вручную, Бертран Рассел и Альфред Норт Уайтхед, на самом деле может быть доказано расчетом. Согласно автобиографии Саймона Модели моей жизни, это приложение изначально было разработано путем моделирования вручную, с использованием его детей в качестве вычислительных элементов, при этом они записывали и держали карточки для заметок в качестве регистров, которые содержали переменные состояния программы.
IPL использовался для реализации нескольких ранних искусственный интеллект программы, также тех же авторов: Теоретик логики (1956), Решение общих проблем (1957), а их компьютерные шахматы программа НСС (1958).
Было создано несколько версий IPL: IPL-I (не реализовано), IPL-II (1957 г. для ДЖОННИАК ), IPL-III (существовал недолго), IPL-IV, IPL-V (1958, для IBM 650, IBM 704, IBM 7090, Philco модель 212, многие другие. Широко используется), IPL-VI.
Однако вскоре язык был вытеснен Лисп, который имел гораздо более мощные функции, более простой синтаксис и преимущества автоматического вывоз мусора.
Наследие компьютерного программирования
IPL, возможно, представил несколько функций языка программирования:
- Управление списком- но только списки атомов, а не общие списки.
- Списки недвижимости- но только при включении в другие списки.
- Функции высшего порядка- за исключением того, что программирование на ассемблере всегда позволяло вычислять адреса вызываемых функций; IPL была ранней попыткой обобщить это свойство языка ассемблера и принципиальным образом
- Вычисление с символами- за исключением того, что символы представляют собой букву + цифру, а не полные слова.
- Виртуальная машина.
Многие из этих функций были обобщены, рационализированы и включены в Lisp.[1] и оттуда на многие другие языки программирования в течение следующих нескольких десятилетий.
Рекомендации
Источники
- Статья основана на материалах, взятых из Бесплатный онлайн-словарь по вычислительной технике до 1 ноября 2008 г. и зарегистрированы в соответствии с условиями «перелицензирования» GFDL, версия 1.3 или новее.
дальнейшее чтение
- Ньюэлл, A. и F.C. Шоу. «Программирование машины логической теории». Февраль 1957. Труды Объединенной западной компьютерной конференции, стр. 230-240.
- Ньюэлл, Аллен и Фред М. Тонг. 1960. "Введение в язык обработки информации V." CACM 3 (4): 205-211.
- Ньюэлл, Аллен. 1964 г. Руководство по обработке информации Language-V; Второе издание. Rand Corporation [Аллен Ньюэлл], Энглвуд Клиффс, Нью-Джерси: Прентис-Холл.
- Сэмюэл, Артур Л .: Программирование компьютеров для игр. В кн .: Достижения в области компьютеров, т. 1, 1960, pp 165-192 (особенно: 171-175).