Język przetwarzania informacji - Information Processing Language

Język przetwarzania informacji (IPL)
Paradygmat montaż
Zaprojektowany przez Allen Newell , Cliff Shaw , Herbert A. Simon
Deweloper Allen Newell, Cliff Shaw, Herbert A. Simon
Po raz pierwszy pojawiły się 1956
Wersja stabilna
IPL-VI
OS Wieloplatformowy : JOHNNIAC , IBM 650 , IBM 704 , IBM 7090
Pod wpływem
Seplenienie

Information Processing Language ( IPL ) to język programowania stworzony przez Allena Newella , Cliffa Shawa i Herberta A. Simona w RAND Corporation i Carnegie Institute of Technology około 1956 roku. Newell miał pracę programisty aplikacji językowych, Shaw był systemem programista, a Simon miał pracę programisty-użytkownika aplikacji.

Kod zawiera funkcje przeznaczone do pomocy w programach wykonujących proste czynności rozwiązywania problemów, takie jak listy, dynamiczna alokacja pamięci , typy danych , rekursja , funkcje jako argumenty, generatory i kooperacyjna wielozadaniowość . IPL wymyślił koncepcję przetwarzania list, aczkolwiek w stylu języka asemblera .

Podstawy IPL

Komputer IPL ma:

  1. Zestaw symboli . Wszystkie symbole to adresy i komórki nazw. W przeciwieństwie do symboli w późniejszych językach, symbole składają się ze znaku, po którym następuje liczba, i są zapisywane jako H1, A29, 9-7, 9-100.
    1. Nazwy komórek zaczynające się na literę są adresami regionalnymi i są adresami bezwzględnymi.
    2. Nazwy komórek zaczynające się od „9-” są lokalne i mają znaczenie w kontekście pojedynczej listy. 9-1 jednej listy jest niezależne od 9-1 innej listy.
    3. Inne symbole (np. czyste liczby) są symbolami wewnętrznymi .
  2. Zestaw komórek . Listy składają się z kilku komórek, w tym wzajemnych odwołań. Komórki mają kilka pól:
    1. P, 3-bitowe pole używane do kodu operacji, gdy komórka jest używana jako instrukcja i nieużywane, gdy komórka zawiera dane.
    2. Q, pole o wartości 3 używane do pośredniego odwołania, gdy komórka jest używana jako instrukcja i nieużywane, gdy komórka zawiera dane.
    3. SYMB, symbol używany jako wartość w komórce.
  3. Zbiór procesów pierwotnych , które we współczesnych językach nazwano by funkcjami pierwotnymi .

Strukturą danych IPL jest lista, ale listy są bardziej skomplikowanymi strukturami niż w wielu językach. Lista składa się z sekwencji symboli połączonych pojedynczo, jak można się spodziewać, oraz kilku list opisowych , które są listami pomocniczymi, połączonymi pojedynczo, interpretowanymi jako naprzemienne nazwy i wartości atrybutów. IPL udostępnia operacje podstawowe umożliwiające dostęp i mutowanie wartości atrybutu według nazwy. Listy opisowe otrzymują nazwy lokalne (w postaci 9-1). Tak więc lista o nazwie L1 zawierająca symbole S4 i S5 i opisana przez powiązanie wartości V1 z atrybutem A1 i V2 z A2 byłaby przechowywana w następujący sposób. 0 oznacza koniec listy; nazwy komórek 100, 101 itd. są automatycznie generowanymi symbolami wewnętrznymi, których wartości są nieistotne. Te komórki mogą być rozproszone w pamięci; tylko L1, który używa nazwy regionalnej, która musi być znana globalnie, musi znajdować się w określonym miejscu.

Przykład struktury listy IPL-V
Nazwa SYMBOL POŁĄCZYĆ
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 jest językiem asemblerowym do manipulowania listami. Posiada kilka komórek, które są używane jako rejestry specjalnego przeznaczenia. Na przykład H1 to licznik programu. Pole SYMB w H1 to nazwa bieżącej instrukcji. Jednak H1 jest interpretowane jako lista; LINK w H1 jest, we współczesnych terminach, wskaźnikiem do początku stosu wywołań. Na przykład, wywołania podprogramów wypychają SYMB z H1 na ten stos.

H2 to lista wolna. Procedury, które muszą przydzielić pamięć, pobierają komórki z H2; procedury, które kończą się pamięcią, umieszczają go na H2. Przy wejściu do funkcji lista parametrów jest podana w H0; przy wyjściu wyniki powinny zostać zwrócone w H0. Wiele procedur zwraca wynik logiczny wskazujący na sukces lub porażkę, który jest umieszczany w H5. Dziesięć komórek, W0-W9, jest zarezerwowanych dla publicznego magazynu roboczego. Procedury są „moralnie związane” (by zacytować artykuł CACM), aby zapisać i przywrócić wartości tych komórek.

Istnieje osiem instrukcji, opartych na wartościach P: wywołanie podprogramu, push/pop S do H0; wciśnij/wysuń symbol w S do listy dołączonej do S; skopiuj wartość do S; gałąź warunkowa. W tych instrukcjach S jest celem. S jest albo wartością pola SYMB, jeśli Q=0, symbolem w komórce o nazwie SYMB, jeśli Q=1, albo symbolem w komórce o nazwie symbol w komórce o nazwie SYMB, jeśli Q=2. We wszystkich przypadkach oprócz gałęzi warunkowej, pole LINK komórki mówi, którą instrukcję wykonać jako następną.

IPL posiada bibliotekę około 150 podstawowych operacji. Należą do nich takie operacje jak:

  • Testuj symbole równości
  • Znajdź, ustaw lub usuń atrybut listy
  • znajdź następny symbol na liście; wstawić symbol na listę; usunąć lub skopiować całą listę.
  • Operacje arytmetyczne (na nazwach symboli).
  • Manipulacja symbolami; np. sprawdź, czy symbol oznacza liczbę całkowitą, lub ustaw symbol jako lokalny.
  • Operacje we/wy
  • "generatory", które odpowiadają iteratorom i filtrom w programowaniu funkcjonalnym. Na przykład generator może zaakceptować listę liczb i wygenerować listę ich kwadratów. Generatory mogły przyjmować jako argumenty odpowiednio zaprojektowane funkcje — a ściślej adresy kodu odpowiednio zaprojektowanych funkcji.

Historia

IPL został po raz pierwszy wykorzystany do wykazania, że ​​twierdzenia z Principia Mathematica, które zostały mozolnie udowodnione ręcznie, przez Bertranda Russella i Alfreda North Whiteheada , można w rzeczywistości udowodnić za pomocą obliczeń . Według autobiografii Simona „ Modele mojego życia” , ta aplikacja została pierwotnie opracowana przez symulację ręczną, używając jego dzieci jako elementów obliczeniowych, podczas pisania i trzymania kartek nutowych jako rejestrów, które zawierały zmienne stanu programu.

IPL został wykorzystany do zaimplementowania kilku wczesnych programów sztucznej inteligencji , również przez tych samych autorów: The Logic Theorist (1956), General Problem Solver (1957) i ich program do szachów komputerowych NSS (1958).

Powstało kilka wersji IPL: IPL-I (nigdy nie wdrożony), IPL-II (1957 dla JOHNNIAC ), IPL-III (istniał krótko), IPL-IV, IPL-V (1958, dla IBM 650 , IBM 704 , IBM 7090 , Philco model 212 , wiele innych.Szeroko stosowane), IPL-VI.

Jednak język ten został wkrótce wyparty przez Lisp , który miał znacznie potężniejsze funkcje, prostszą składnię i zaletę automatycznego usuwania śmieci .

Legacy do programowania komputerowego

IPL prawdopodobnie wprowadził kilka funkcji języka programowania:

  • Manipulowanie listami — ale tylko listami atomów, a nie listami ogólnymi.
  • Listy właściwości — ale tylko wtedy, gdy są dołączone do innych list.
  • Funkcje wyższego rzędu — z wyjątkiem tego, że programowanie w asemblerze zawsze było w stanie obliczyć z adresami funkcji do wywołania; IPL był wczesną próbą uogólnienia tej właściwości języka asemblera iw sposób zasadniczy
  • Obliczenia za pomocą symboli — z wyjątkiem tego, że symbole to litera+liczba, a nie pełne słowa.
  • Maszyna wirtualna .

Wiele z tych cech zostało uogólnionych, zracjonalizowanych i włączonych do Lispa, a stamtąd do wielu innych języków programowania w ciągu następnych kilku dekad.

Bibliografia

Dalsza lektura

  • Newell, A. i FC Shaw. „Programowanie maszyny teorii logiki”. Luty 1957. Proceedings of the Western Joint Computer Conference, s. 230–240.
  • Newell, Allen i Fred M. Tonge. 1960. „Wprowadzenie do języka przetwarzania informacji V.” CACM 3(4): 205-211.
  • Newell, Allen. 1964. Język Przetwarzania Informacji – V Podręcznik; Wydanie drugie . Rand Corporation [Allen Newell], Englewood Cliffs, NJ: Prentice-Hall.
  • Samuel, Arthur L.: Programowanie komputerów do grania w gry. W: Postępy w komputerach, tom. 1, 1960, s. 165–192 (szczególnie: 171-175).

Zewnętrzne linki