POP-2

POP-2

POP-2, often referred to as POP2 was a programming language developed around 1970 from the earlier language POP-1 (originally named COWSEL) by Robin Popplestone and Rod Burstall at the University of Edinburgh. It drew roots from many sources: the languages LISP and ALGOL 60, and theoretical ideas from Landin. It used an incremental compiler, which gave it some of the flexibility of an interpreted language, including allowing new function definitions at run time and modification of function definitions while a program was running (both of which are features of dynamic compilation), without the overhead of an interpreted language. It has been described as 'The first true functional language' at [http://hopl.murdoch.edu.au/showlanguage.prx?exp=298&language=POP-2 HOPL, the History of Programming Languages web site] .

Its syntax was Algol-like, except that assignments were backwards: instead of writing

a := 3;

one wrote

3 -> a;

The reason for this was that the language had explicit notion of an "operand stack"; thus, the previous assignment could be written as two separate statements:

3;

which evaluated the value 3 and left it on the stack, and

-> a;

which popped the top value off the stack and assigned it to the variable 'a'. Similarly, the function call

f(x, y, z);

could be written as

x, y, z; f();

(commas and semicolons being largely interchangeable) or even

x, y, z.f;

or

(x, y, z).f;

There were no special language constructs for creating arrays or record structures as they are commonly understood: instead, these were created with the aid of special builtin functions, e.g. [http://www.poplog.org/docs/popdocs/pop11/help/newarray newarray] (for arrays that could contain any type of item) and [http://www.poplog.org/docs/popdocs/pop11/help/newanyarray newanyarray] for creating restricted types of items.

Thus, array element and record field accessors were simply special cases of a "doublet function": this was a function that had another function attached as its [http://www.poplog.org/docs/popdocs/pop11/help/updater "updater"] , which was called on the receiving side of an assignment. Thus, if the variable a contained an array, then

3 -> a(4);

was equivalent to

updater(a)(3, 4);

the builtin function updater returning the updater of the doublet. Of course, updater was itself a doublet and could be used to change the updater component of a doublet.

Because of the stack-based paradigm, there was no need to distinguish between "statements" and "expressions"; thus, the two constructs

if a > b then c -> e else d -> e close;

and

if a > b then c else d close -> e;

were equivalent (note the use of close as endif hadn't been invented yet).

Variables could hold values of any type, including functions, which were first-class objects. Thus, the following constructs

function max x y; if x > y then x else y close end;

and

vars max; lambda x y; if x > y then x else y close end -> max;

were equivalent.

An interesting operation on functions was [http://www.poplog.org/docs/popdocs/pop11/help/partapply "partial application"] ; this was where some number of the rightmost arguments of the function were "frozen" to given values, to produce a new function of fewer arguments. For instance, consider a function for computing general second-degree polynomials:

function poly2 x a b c; a * x * x + b * x + c end;

This could be bound, for instance as

vars less1squared; poly2(% 1, -2, 1 %) -> less1squared;

such that the expression

less1squared(3)

returns the square of (3 - 1), which is 4.

Later Developments

The original version of POP-2 was implemented on an Elliott 4130 computer in the University of Edinburgh (with only 64KB RAM, doubled to 128KB in 1972).

At middle 1970s POP-2 was ported on BESM-6 (POPLAN System).

Later versions were implemented for Modula One, PDP-10, ICL 1900 series (running the George operating system). Julian Davies, in Edinburgh, implemented an extended version of POP-2, which he called POP-10 on the PDP-10 computer running TOPS-10. This was the first dialect of POP-2 that treated case as significant in identifier names, used lower case for most system identifiers, and supported long identifiers with more than 8 characters.

Shortly after that, a new implementation known as WPOP (for WonderPop) was implemented by Robert Rae and Allan Ramsay in Edinburgh, on a research-council funded project. That version introduced caged address spaces, some compile-time syntactic typing (e.g. for integers and reals) as well as some pattern matching constructs for use with a variety of data-structures.

In parallel with that Steve Hardy at Sussex University implemented a subset of POP-2, which he called POP-11 which ran on a DEC PDP-11/40 computer. It was originally designed to run on the DEC operating system RSX-11D, in time-shared mode for teaching, but that caused so many problems that an early version of Unix was installed and used instead. That version was written in Unix assembler, and code was incrementally compiled to an intermediate byte code which was interpreted. That port was completed around 1976 and as a result Pop-11 was used in several places for teaching. In order to support its teaching function many of the syntactic features of POP-2 were modified, e.g. replacing function ... end with define ... enddefine and adding a wider variety of looping constructs with closing brackets to match their opening brackets instead of the use of close for all loops in POP-2. Pop-11 also introduced a [http://www.cs.bham.ac.uk/research/projects/poplog/doc/popteach/matches pattern matcher] for list structures, making it much easier to teach AI programming.

Around 1980 Pop-11 was ported to a VAX-780 computer by Steve Hardy and John Gibson, and soon after that it was replaced by a full incremental compiler (producing machine-code instead of an interpreted intermediate code). The existence of the compiler and all its subroutines at run time made it possible to support far richer language extensions than were possible with Macros, and as a result Pop-11 was used (by Steve Hardy, Chris Mellish and John Gibson)) to produce an implementation of Prolog, using the standard syntax of Prolog, and the combined system became known as Poplog, to which Common Lisp and Standard ML were later added. This version was later ported to a variety of machines and operating systems and as a result Pop-11 became the dominant dialect of POP-2, still available in the Poplog system.

Around 1986 a new AI company Cognitive Applications Ltd., collaborated with members of Sussex university to produce a variant of Pop-11 called AlphaPop running on Apple Mac computers, with integrated graphics. This was used for a number of commercial projects, as well as being used for teaching AI programming in several universities. The fact that it was implemented in an early dialect of C, using an idiosyncratic compiler made it very hard to maintain and upgrade to new versions of the Mac operating system. In addition to this, AlphaPop was not "32-bit clean" due to the use of high address bits as "tag bits" to signify the type of objects, which was incompatible with the use of memory above 8Mb on later Macintoshes.

ee also

* COWSEL programming language
* POP-1 programming language
* POP-11 programming language
* Poplog programming environment

External links

* [http://www-robotics.cs.umass.edu/Popplestone/pop_development.html The Early Development of POP]
* [http://www.informatics.susx.ac.uk/books/computers-and-thought/ Computers and Thought]

References

R. Burstall, J. Collins and R. Popplestone "Programming in Pop-2"University Press, Edinburgh, 1968

D.J.M. Davies, "POP-10 Users' Manual", Computer Science Report #25,University of Western Ontario, 1976

R. Smith, A. Sloman and J. Gibson, POPLOG's two-level virtual machine support for interactive languages, in "Research Directions in Cognitive Science Volume 5: Artificial Intelligence", Eds. D. Sleeman and N. Bernsen, Lawrence Erlbaum Associates, pp. 203--231, 1992.
* [http://www.cs.bham.ac.uk/research/poplog/doc/pophelp/poprefs Further references]


Wikimedia Foundation. 2010.

Игры ⚽ Нужно решить контрольную?

Look at other dictionaries:

  • pop — pop …   Dictionnaire des rimes

  • pop — [ pɔp ] adj. inv. • 1955, diffusé à partir de 1965; mot angl. amér., de popular « populaire » → pop art ♦ Anglic. 1 ♦ Se dit d une forme de musique populaire issue de divers genres en honneur dans les pays anglo saxons (formes de jazz, folk, rock …   Encyclopédie Universelle

  • Pop-up ad — Pop up ads or popups are a form of online advertising on the World Wide Web intended to attract web traffic or capture email addresses. It works when certain web sites open a new web browser window to display advertisements. The pop up window… …   Wikipedia

  • Pop — may refer to: Contents 1 Music and dance 2 Sports and games 3 Computing and technology …   Wikipedia

  • POP-11 — is a powerful reflective, incrementally compiled programming language with many of the features of an interpreted language. It is the core language of the Poplog programming environment developed originally by the University of Sussex, and… …   Wikipedia

  • POP — steht für: Popkultur, eine kulturelle Strömung Popliteratur, eine Literaturgattung Popmusik, eine moderne Musikrichtung Pop Art, eine Kunstrichtung des 20. Jahrhunderts einen Monat im System des Maya Kalenders Haab ein Album der irischen Band U2 …   Deutsch Wikipedia

  • PoP — steht für: Popkultur, eine kulturelle Strömung Popliteratur, eine Literaturgattung Popmusik, eine moderne Musikrichtung Pop Art, eine Kunstrichtung des 20. Jahrhunderts einen Monat im System des Maya Kalenders Haab ein Album der irischen Band U2 …   Deutsch Wikipedia

  • Pop — bezeichnet ein Album der irischen Band U2, siehe Pop (Album) einen britischen Fernsehsender, siehe Pop (Fernsehsender) einen Ort in Usbekistan, siehe Pop (Usbekistan) einen Bezirk in Usbekistan, siehe Pop (Bezirk) einen slowenienischen… …   Deutsch Wikipedia

  • POP —  Pour l’article homophone, voir Popp. Cette page d’homonymie répertorie les différents sujets et articles partageant un même nom …   Wikipédia en Français

  • PoP —  Pour l’article homophone, voir Popp. Cette page d’homonymie répertorie les différents sujets et articles partageant un même nom …   Wikipédia en Français

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”