Draft talk:Storage class
PL/I BASED dates back to at least 1968
[https://bitsavers.org/pdf/ibm/360/pli/C28-8201-1_PLIrefMan_Jan69.pdf The March 1968 Second Edition of the IBM System/360 PL/I Reference Manual] states in the Preface that
:The following features, discussed in this publication., are implemented in the fourth version of the F Compiler but are not implemented in the third version:
:* Based storage facilities:
::The BASED, POINTER, AREA, and OFFSET attributes;
so it looks as if it predated ANSI PL/I by a fair bit. Guy Harris (talk) 00:24, 26 March 2025 (UTC)
:Yes. I’m trying to sort that out, with difficulty. NPL BASED seems to be what is now called CONTROLLED - the manual talks about popping up previous generations on FREE. I suspect PL/I(F) thru version three followed the NPL definition. Unfortunately we don’t have a records of the standards committee deliberations. I’ll have to refer back to the standard and IBM’s compiler-independent language definition. I need to check to see if the standard includes CONTROLLED, but it appears that BASED was redefined at some point, and the old BASED morphed into CONTROLLED.
:So far I’ve looked at languages up to Pascal, and PL/I seems to have the most complete set of storage classes, so probably should be used as the model. Among the others only C seems to use the term (and adds the REGISTER storage class). I don‘t know much about any newer languages. PL/I AREA is a storage class also. Peter Flass (talk) 23:25, 26 March 2025 (UTC)
::[https://bitsavers.org/pdf/ibm/npl/320-0908_NPL_Technical_Report_Dec64.pdf The December 1964 NPL Technical Report] mentions {{code|CONTROLLED}}, but does not mention {{code|BASED}} and does not have pointers. If there was a version of NPL in which {{code|BASED}} was like what ended up as {{code|CONTROLLED}}, rather than meaning "pointed to by a pointer", it presumably predated December 1964.
::[https://bitsavers.org/pdf/ibm/360/pli/C28-6571-1_PL_I_Language_Specifications_Jul65.pdf IBM's July 1965 PL/I specification], which was the second edition, has {{code|CONTROLLED}} but not {{code|BASED}} or any mention of based variables or pointers.
::[https://bitsavers.org/pdf/ibm/360/pli/C28-6571-3_PL_I_Language_Specifications_Jul66.pdf IBM's July 1966 PL/I specification], which was the fourth edition, has {{code|CONTROLLED}} and a mention of based controlled variables and pointer variables, but no {{code|BASED}} storage class.
::[https://bitsavers.org/pdf/ibm/360/pli/Y33-6003-0_PL1LangSpecMar68.pdf IBM's non-public March 1968 PL/I specification], which was a successor to the fifth edition, has {{code|CONTROLLED}} and {{code|BASED}} storage classes.
::{{section link|PL/I|Standardization}} says that standardization began in 1966, so presumably it was dealing with a language in which {{code|CONTROLLED}} has its current meaning, and wasn't responsible for converting old NPL {{code|BASED}} into {{code|CONTROLLED}}.
::ANSI INCITS 53-1976 (R1998), a/k/a ANSI X3.53-1976 (R1998) and ISO 6160, has both {{code|BASED}} and {{code|CONTROLLED}}. Guy Harris (talk) 02:56, 27 March 2025 (UTC)