Talk:POP-2

Untitled
http://www.cs.bham.ac.uk/research/projects/cogaff/sloman-clowestribute.html — Preceding unsigned comment added by 88.113.96.60 (talk) 13:29, 18 March 2011 (UTC)

caged address spaces
How about a definition? HughesJohn (talk) 19:28, 25 March 2011 (UTC)

There's a description about two thirds of the way through http://www-robotics.cs.umass.edu/Popplestone/pop_development.html

''"In extending the storage control to handle multi-word blocks of store my initial proposal was to divide the store into what I called `cages'. Each cage would contain only one class of data-object. The idea was that one had a `zoo' of data-objects. The zoo consisted of cages, and one knew what kind of animal (data-object) was in a cage by looking at the label on the cage. Since the cages were to be all of the same size 2^n words say, and aligned on store boundaries of address k2^n, the cage to which an item belonged could be determined by shifting the item address down n bits. A given data-class might occupy more than one cage, but a table-lookup on the cage-bits would give the actual data-class of an object.

''"However the zoo approach would have been complicated to implement, and on a visit to the University of Aberdeen, Michael Foster told me of the system he was currently using for the Absys development. This was to employ an extra key-word at the beginning of every data-object to indicate its type. I believe that he subsequently decided to use the caged system, but I thought that the key-word, pointing to a key-cell was the best for our purposes: it was simple to implement, and did not leave us with lots of partially filled cages. Since we were anxious to provide user-defined record classes, each of which would have required the setting up of a cage, it seemed that the saving of the key-word would be more than counterbalanced by the existence of unused space in cages.

''"In later years, when we had a larger 4130 system, we were forced into a semi-caged implementation because the machine architecture placed addressing restrictions on certain classes of item."

That also gives some evidence that POP-2 was initially implemented on a 4120. 131.111.85.79 (talk) 09:43, 14 October 2016 (UTC)

Implementation dates
I think there's a mistake in the list of implementations and associated dates. The page says:

"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).

In the mid-1970s, POP-2 was ported to BESM-6 (POPLAN System).

Later versions were implemented for CTL Modular One, PDP-10, ICL 1900 series (running the George operating system)."

I note that some of Popplestone's papers refer to a 4120 rather than a 4130, but that's not what I'm concerned about.

I know I used POP-2 at Lancaster University whilst I was still at school and I left school at the end of 1970. Lancaster had an ICT 1909 and I believe I used POP-2 on that, so I think the notion that a 1900 implementation was only available in the mid to late 1970s is wrong. The only other machine I remember using there was a PDP-8 but I think I only used FOCAL on that. I will see if I can find any evidence of my sessions with dates. — Preceding unsigned comment added by 131.111.85.79 (talk) 10:13, 12 October 2016 (UTC)

I asked Andrew Colin, who was in charge of the Lancaster computers at the time. He says POP-2 was implemented on the 1909 by somebody called Robin John Scott, which confirms my memory. I haven't found any links about that person yet. 131.111.85.79 (talk) 09:43, 14 October 2016 (UTC)

I just realized I mistyped the name of the person who implemented POP-2 on the ICT 1909. It was John Scott rather than Robin Scott. With that change I found his LinkedIn profile https://uk.linkedin.com/in/johnscottgb which confirms that he did the implementation in 1968

"January 1968 – September 1968 (9 months)Lancaster, United Kingdom Implemented product "POP-2 Interactive Programming Language System" on ICL1900-series mainframes."

131.111.85.79 (talk) 10:08, 14 October 2016 (UTC)

Commercial Derivatives
About 1982, a derivative of POP-2 called STAB was obtained from Strathclyde University and used commercially to build a new machine, which would microcode the associated pcode. During the project, a VAX 11/750 was re-microcoded to execute the pcode directly for testing. However, the STAB language was also modified to support independent compilation, and its compiler re-written to generate machine code across a range from mini to mainframe. At the time, this proprietary language was more portable than C, to the extent that another derivative (ACPL) was used by a different company, in 1987, to build a large multi-platform business intelligence and OLAP database product. This product was still active as late as 2002. Unfortunately, being within the commercial sector, there are few (if any) citable references that could be used here. I can write this note, for the record, as I was intimately involved with both projects. TonyP (talk) 11:27, 6 December 2018 (UTC)

Trivia
I used POP when I was an undergraduate 75-78 at the University College Swansea. I can not remember if it ran on the ICL 1903 or the PDP-11. Also for my final year project I used STAB and this had a middle language STAB-80. The idea was that STAB-80 could be processed by an interpreter running on the Intel 8008 (8 bit Intel) and my third year project was to generate a complier so some STAB-80 was interpreted and some compiled. Hence optimising the speed (compiled) or memory (interpreted).

Multipop?
Between COWSEL and Pop-2 was Multipop, which doesn't have a wikipedia entry yet. From Robin's page:

The Multipop Timesharing System It is conventional to regard an operating system and a programming language implementation as being distinct entities. There are however distinct advantages to an integrated approach, since many of the constructs required for each are in fact common, for example storage management and interpreting user commands. The Multipop, timesharing system, first operational in late 1967, was based on the concurrently developed implementation of POP-2. Making POP-2 be the command language for the operating system and the only language available to the user made it possible, on a relatively cheap computer (64K 24-bit words of memory), to support the time-shared development of quite complex programs, with relatively rapid responses to user interactions. Incorporating device handlers `cannibalised' from the earlier MiniMac project, it supported much of the symbolic computation work at Edinburgh until the early-70's. Using a functional language with a properly implemented concept of closure is of considerable benefit in supporting the presentation of devices such as disks to a user in an encapsulated form. Multipop employed no conventional hardware protection mechanisms; instead its security was guaranteed by the fact that access to system resources was obtained via closures of device access functions, and on built in restrictions on code-generation embodied in the compiler. Being system-generated and opaque, there was no way in which a user could obtain inappropriate access to system resources via these closures. Moreover, as compared with a context switch, a closure is a light-weight means of encapsulating capabilities. 70.124.38.160 (talk) 20:34, 31 March 2024 (UTC)

FYI assignments
"The reason for this is that the language has explicit notion of an operand stack." That may have been a minor factor but the primary argument was that assignments in most programming languages fly in the face of mathematical convention - If A holds 2 and B holds 3, then "A = B" (or any syntactic variation of it such as "A := B") is not asserting an equality in the mathematical sense, so B -> A was chosen to unambiguously express that B is being assigned to A, or B maps to A. I remember hearing this first hand in one of Rod Burstall's lectures. (I was also one of Pop's students but I don't think that subject ever came up in conversation). Not worth an edit I don't think but I wanted you all to know the history. 70.124.38.160 (talk) 02:19, 23 May 2024 (UTC)

Updaters
Re "updater(a)(3, 4);" My recollection is that the actual word 'updater' was explicit only in the definition of a function's updater part, but it was implicit when used, i.e. an assignment such as 3 -> A would be mapped internally to a call such as A.UPDATER(3). I don't have any of my old POP2 code (actually it was specifically RaeR's Wonderpop I used most) still around to confirm but I bet it's in the manual somewhere. Some of the syntax in the main page here seems strange, I wonder if some of the examples here came from someone more familiar with one of the later hybrid languages that contained a POP2 component rather than the original POP2 itself? 70.124.38.160 (talk) 02:30, 23 May 2024 (UTC)