Язык обработки информации
Эта статья нуждается в дополнительных цитатах для проверки . ( январь 2022 г. ) |
Парадигма | Сборка |
---|---|
Разработано | Аллен Ньюэлл , Клифф Шоу , Герберт А. Саймон |
Разработчик | Аллен Ньюэлл, Клифф Шоу, Герберт А. Саймон |
Впервые появился | 1956 |
Стабильная версия | IPL-V
|
ТЫ | Кроссплатформенность : JOHNNIAC , IBM 650 , IBM 704 , IBM 7090. |
Под влиянием | |
Лисп |
Язык обработки информации ( IPL ) — язык программирования, созданный Алленом Ньюэллом , Клиффом Шоу и Гербертом А. Саймоном в корпорации RAND и Технологическом институте Карнеги примерно в 1956 году. Ньюэлл работал прикладным программистом спецификаторов языка, Шоу был системой. программист, а Саймон работал программистом-пользователем приложений.
Код включает функции, предназначенные для помощи программам, выполняющим простые действия по решению проблем, такие как списки, динамическое распределение памяти , типы данных , рекурсия , функции в качестве аргументов, генераторы и совместная многозадачность . 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, который использует региональное имя, которое должно быть известно во всем мире, должен находиться в определенном месте.
Имя | СИМВОЛ | СВЯЗЬ |
---|---|---|
Л1 | 9-1 | 100 |
100 | С4 | 101 |
101 | С5 | 0 |
9-1 | 0 | 200 |
200 | А1 | 201 |
201 | V1 | 202 |
202 | А2 | 203 |
203 | V2 | 0 |
IPL — это язык ассемблера для управления списками. Он имеет несколько ячеек, которые используются как регистры специального назначения. H1, например, является счетчиком программ. Поле SYMB в H1 представляет собой имя текущей инструкции. Однако H1 интерпретируется как список; Говоря современным языком, LINK H1 — это указатель на начало стека вызовов. Например, вызовы подпрограмм помещают в этот стек SYMB H1.
H2 — свободный список. Процедуры, которым необходимо выделить ячейки захвата памяти из H2; процедуры, завершающие работу с памятью, кладут ее на H2. При входе в функцию список параметров задается в 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 Task 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 212 и многие другие). IPL-VI был предложением по аппаратному обеспечению IPL. [ 1 ] [ 2 ] [ 3 ]
Для CDC 3600 в Аргоннских национальных библиотеках был разработан сопроцессор «IPL-VC», который мог выполнять команды IPL-V. [ 4 ] [ 5 ] На нем была реализована еще одна программа для игры в шашки. [ 6 ] Эта аппаратная реализация не улучшила время работы в достаточной степени, чтобы «выгодно конкурировать с языком, более непосредственно ориентированным на структуру современных машин». [ 7 ]
IPL вскоре был вытеснен Lisp , который имел гораздо более мощные функции, более простой синтаксис и преимущества автоматической сборки мусора .
Наследие компьютерного программирования
[ редактировать ]IPL, возможно, представил несколько функций языка программирования:
- Манипулирование списками — но только списками атомов, а не общими списками.
- Списки свойств — но только если они прикреплены к другим спискам.
- Функции высшего порядка - хотя программирование на ассемблере всегда позволяло выполнять вычисления с адресами функций, IPL была ранней попыткой принципиально обобщить это свойство языка ассемблера.
- Вычисления с помощью символов — хотя в IPL символы имеют ограниченную форму (за буквой следует цифра).
- Виртуальная машина
Многие из этих функций были обобщены, рационализированы и включены в Lisp. [ 8 ] а оттуда во многие другие языки программирования в течение следующих нескольких десятилетий.
Ссылки
[ редактировать ]- ^ Эта статья основана на материалах, взятых из раздела «Информация+Обработка+Язык» в Бесплатном онлайн-словаре вычислительной техники до 1 ноября 2008 г. и включенных в соответствии с условиями «повторного лицензирования» GFDL версии 1.3 или более поздней.
- ^ Шоу и др. 1958 год .
- ^ Бархат 1969 , стр. 389.
- ^ Ходжес 1964 .
- ^ Бархат 1969 , стр. 393–394.
- ^ Коуэлл и Рид 1965 .
- ^ Карсон и Робинсон 1966 , с. 5.
- ^ Джон Маккарти (1979) История Лиспа «Предыстория LISP - с лета 1956 по лето 1958 года».
Источники
[ редактировать ]- Карсон, Дэниел Ф.; Робинсон, Джордж А. (май 1966 г.). Gyro II, макроопределенная система для обработки списков (отчет). Отдел прикладной математики Аргоннских национальных лабораторий. АНЛ-7149.
- Коуэлл, WR; Рид, MC (октябрь 1965 г.). Программа игры в шашки для компьютера IPL-VC (Отчет). Отдел прикладной математики Аргоннских национальных лабораторий. АНЛ-7109.
- Ходжес, Дональд (май 1964 г.). IPL-VC: Компьютерная система, имеющая набор инструкций IPL-V (отчет). Отдел прикладной математики Аргоннских национальных лабораторий. АНЛ-6888.
- Саммет, Жан Э. (1969). Языки программирования: история и основы . Энглвуд Клиффс, Нью-Джерси: Прентис Холл. стр. 388–400.
- Шоу, Джей Си; Ньюэлл, А.; Саймон, штат Ха; Эллис, Т.О. (1958). «Командная структура для сложной обработки информации». Материалы Западной объединенной компьютерной конференции 6–8 мая 1958 г.: Контрасты в компьютерах . IRE-ACM-AIEE '58 (вестерн). Ассоциация вычислительной техники. стр. 119–128. дои : 10.1145/1457769.1457803 . ISBN 9781450378642 .
Дальнейшее чтение
[ редактировать ]- Ньюэлл, Аллен; Шоу, Дж. К. (1957). «Программирование логической теоретической машины». Доклады, представленные 26–28 февраля 1957 г. на Западной объединенной компьютерной конференции: методы обеспечения надежности . IRE-AIEE-ACM '57 (вестерн). Ассоциация вычислительной техники. стр. 230–240. дои : 10.1145/1455567.1455606 . ISBN 9781450378611 .
- Ньюэлл, Аллен; Тонге, Фред М. (1960). «Введение в язык обработки информации V» . Коммуникации АКМ . 3 (4). Нью-Йорк, штат Нью-Йорк, США: Ассоциация вычислительной техники: 205–211. дои : 10.1145/367177.367205 . ISSN 0001-0782 . S2CID 16609075 .
- Ньюэлл, Аллен; Тонге, Фред М.; и др. (1964). Руководство по языку обработки информации-V . Энглвуд Клиффс, Нью-Джерси: Прентис Холл.
- Сэмюэл, Артур Л. (1960). «Программирование компьютеров для игр». В Alt, Франц Л. (ред.). Достижения в области компьютеров, том 1 . Достижения в области компьютеров. Том. 1. Эльзевир. стр. 165–192. дои : 10.1016/S0065-2458(08)60608-7 . ISBN 9780120121014 . ISSN 0065-2458 .