POP-2 - POP-2
Tento článek obsahuje seznam obecných Reference, ale zůstává z velké části neověřený, protože postrádá dostatečné odpovídající vložené citace.Duben 2010) (Zjistěte, jak a kdy odstranit tuto zprávu šablony) ( |
POP-2 (označovaný také jako POP2) je programovací jazyk vyvinut kolem roku 1970 z dřívějšího jazyka POP-1 (vyvinutý Robinem Popplestoneem v roce 1968, původně pojmenovaný COWSEL ) od Robin Popplestone a Rod Burstall na University of Edinburgh.[1] Kořeny čerpalo z mnoha zdrojů: jazyků LISP a ALGOL 60 a teoretické myšlenky z Peter J. Landin. Využilo to přírůstkový překladač, což jí poskytlo určitou flexibilitu tlumočený jazyk, včetně povolení nových definic funkcí za běhu a modifikace definic funkcí během běhu programu (obě jsou vlastnosti dynamická kompilace ), bez režie tlumočeného jazyka.
Popis
Zásobník
Syntaxe POP-2 byla podobná Algolu, až na to, že úkoly byly naopak: místo psaní
a: = 3;
jeden napsal
3 -> a;
Důvodem bylo to, že jazyk měl výslovnou představu o zásobník operandů; předchozí úkol by tedy mohl být napsán jako dva samostatné příkazy:
3;
který vyhodnotil hodnotu 3 a nechal ji na zásobníku, a
-> a;
který vyskočil nejvyšší hodnotu ze zásobníku a přidělil ji proměnné 'a'. Podobně volání funkce
f (x, y, z);
lze napsat jako
x, y, z; F();
(čárky a středníky jsou do značné míry zaměnitelné) nebo dokonce
x, y, z.f;
nebo
(x, y, z) .f;
Kvůli paradigmatu založenému na zásobníku nebylo třeba rozlišovat mezi prohlášení a výrazy; tedy dva konstrukty
pokud a> b pak c -> e else d -> e zavřít;
a
pokud a> b pak c else d zavřít -> e;
byly ekvivalentní (všimněte si použití zavřít
, tak jako endif
ještě nebyly vynalezeny).
Pole a funkce dubletu
Neexistovaly žádné speciální jazykové konstrukty pro vytváření polí nebo struktur záznamu, jak se běžně rozumí: místo toho byly vytvořeny pomocí speciálních integrovaných funkcí, např. newarray (pro pole, která mohou obsahovat jakýkoli typ položky) a newanyarray pro vytváření omezených typů položek.
Přístupové prvky pole a záznamové pole tedy byly jednoduše speciálními případy a funkce dubletu: toto byla funkce, ke které byla připojena další funkce aktualizátor, který byl povolán na přijímací straně úkolu. Pokud tedy proměnná A
obsahoval tedy pole
3 -> a (4);
byl ekvivalentní s
aktualizátor (a) (3, 4);
vestavěná funkce aktualizátor
vrácení aktualizátoru dubletu. Samozřejmě, aktualizátor
byl sám o sobě dubletem a mohl být použit ke změně komponenty updateru dubletu.
Funkce
Proměnné mohly obsahovat hodnoty jakéhokoli typu, včetně funkcí, které byly prvotřídními objekty. Tedy následující konstrukty
funkce max x y; pokud x> y, pak x else y blízký konec;
a
vars max; lambda x y; pokud x> y pak x else y blízký konec -> max;
byly rovnocenné.
Zajímavá operace s funkcemi byla částečná aplikace, (někdy označované jako „kari "). V částečné aplikaci bylo několik argumentů funkce zcela vpravo (což by byly poslední vložené do zásobníku před zapojením funkce) zamrzlý k daným hodnotám vytvořit novou funkci s menším počtem argumentů, což je a uzavření původní funkce. Zvažte například funkci pro výpočet obecných polynomů druhého stupně:
funkce poly2 x a b c; a * x * x + b * x + c konec;
To by mohlo být vázáno, například jako
vars less1squared; poly2 (% 1, -2, 1%) -> less1squared;
takový, že výraz
less1squared (3)
aplikuje uzavření poly2 se třemi zamrznutými argumenty na argument 3 a vrací druhou mocninu (3 - 1), což je 4. Aplikace částečně aplikované funkce způsobí zmrazené hodnoty (v tomto případě 1, -2, 1 ), které mají být přidány do všeho, co je již na zásobníku (v tomto případě 3), po kterém je vyvolána původní funkce poly2. Poté použije první čtyři položky v zásobníku a vytvoří stejný výsledek jako
poly2 (3, 1, -2, 1)
tj.
1*3*3 + (-2)*3 + 1
Definice operátora
V POP-2 bylo možné definovat nové operace (operátory v moderních termínech).[2]
vars operace 3 + *; lambda x y; x * x + y * y konec -> nonop + *
První řádek deklaruje novou operaci + * s prioritou (prioritou) 3. Druhý řádek vytvoří funkci f (x, y) = x * x + y * y a přiřadí ji k nově deklarované operaci + *.
Dějiny
Původní verze POP-2 byla implementována na Elliott 4130 počítač na University of Edinburgh (pouze s 64 kB RAM, zdvojnásobil na 128 kB v roce 1972).
V polovině 70. let byl portován POP-2 BESM-6 (Systém POPLAN).
Novější verze byly implementovány pro CTL Modulární, PDP-10, Řada ICL 1900 (běží operační systém George). Julian Davies v Edinburghu implementoval rozšířenou verzi POP-2, kterou nazval POP-10 na běžícím počítači PDP-10 TOPS-10. Jednalo se o první dialekt POP-2, který považoval případ za významný v názvech identifikátorů, pro většinu systémových identifikátorů používal malá písmena a podporoval dlouhé identifikátory s více než 8 znaky.
Krátce nato byla zavedena nová implementace známá jako WPOP (pro WonderPop) realizovali Robert Rae a Allan Ramsay v Edinburghu na projektu financovaném výzkumnou radou. Tato verze zavedla meziprostor adresních prostorů, některé syntaktické psaní v době kompilace (např. Pro celá čísla a reálné hodnoty), stejně jako některé konstrukty odpovídající vzorům pro použití s různými datovými strukturami.
Souběžně s tím Steve Hardy na univerzitě v Sussexu implementoval podmnožinu POP-2, kterou nazval POP-11 který běžel na a DEC Počítač PDP-11/40. Původně byl navržen pro provoz na operačním systému DEC RSX-11D v časově sdíleném režimu pro výuku, ale to způsobilo tolik problémů, že časná verze Unix místo toho byl nainstalován a použit. Tato verze Pop-11 byla napsána v unixovém assembleru a kód byl postupně kompilován do mezilehlého bajtového kódu, který byl interpretován. Tento přístav byl dokončen kolem roku 1976 a v důsledku toho byl Pop-11 používán na několika místech pro výuku. Za účelem podpory jeho výukové funkce bylo upraveno mnoho syntaktických funkcí POP-2, např. výměna funkce ... konec s definovat ... enddefine a přidání širší palety smyčkových konstrukcí s uzavíracími závorkami tak, aby odpovídaly jejich úvodním závorkám místo použití zavřít pro všechny smyčky v POP-2. Pop-11 také představil a vzorovač pro struktury seznamu, což výrazně usnadňuje výuku programování AI.
Kolem roku 1980 byl Pop-11 přenesen na a VAX-11/780 počítač Steve Hardy a John Gibson, a brzy poté byl nahrazen úplným přírůstkovým kompilátorem (produkujícím strojový kód místo interpretovaného mezikódu). Existence kompilátoru a všech jeho podprogramů v době běhu umožnila podporovat mnohem bohatší jazykové rozšíření, než jaké bylo možné u maker, a proto byl k produkci použit Pop-11 (Steve Hardy, Chris Mellish a John Gibson) implementace Prolog pomocí standardní syntaxe Prologu a kombinovaný systém se stal známým jako Poplog, ke kterému Společný Lisp a Standardní ML byly později přidány. Tato verze byla později přenesena na různé stroje a operační systémy a ve výsledku se Pop-11 stal dominantním dialektem POP-2, který je v systému Poplog stále k dispozici.
Kolem roku 1986 spolupracovala nová společnost AI Cognitive Applications Ltd. s členy univerzity v Sussexu na výrobě varianty Pop-11 s názvem AlphaPop běží na počítačích Apple Mac s integrovanou grafikou. To bylo použito pro řadu komerčních projektů, stejně jako pro výuku programování AI na několika univerzitách. Skutečnost, že byla implementována v časném dialektu jazyka C pomocí výstředního kompilátoru, velmi ztěžovala údržbu a upgrade na nové verze operačního systému Mac. Kromě toho AlphaPop nebyl „32bitový čistý“ kvůli použití bitů s vysokou adresou jako „bitů tagů“ k označení typu objektů, což bylo nekompatibilní s použitím paměti nad 8 MB na pozdějších počítačích Macintosh.
Viz také
Reference
- Burstall, R .; Collins, J .; Popplestone, R. (1968). Programování v Pop-2. Edinburgh: Edinburgh University Press.
- Davies, D.J.M. (1976). "Uživatelská příručka POP-10". Zpráva o informatice (25).
- Smith, R .; Sloman, A .; Gibson, J. (1992). "Podpora dvouúrovňového virtuálního stroje POPLOG pro interaktivní jazyky". v D. Sleeman a N. Bernsen (ed.). Pokyny k výzkumu v kognitivní vědě. 5: Umělá inteligence. Lawrence Erlbaum Associates. 203–231.
- POP reference
externí odkazy
- Počáteční vývoj POP
- Počítače a myšlení: Praktický úvod do umělé inteligence
- An Introduction to the POP-2 Programming Language, by P. M. Burstall and J. S. Collins. Referenční příručka POP-2, P. M. Burstall a J. S. Collins.
Reference
- ^ [1]
- ^ Referenční příručka pro POP-2, strana 217, a Úvod do studia programovacích jazyků, David William Barron, strana 75