fbpx
Wikipedia

PL/C

PL/C is an instructional dialect of the programming language PL/I, developed at the Department of Computer Science of Cornell University in the early 1970s in an effort headed by Professor Richard W. Conway and graduate student Thomas R. Wilcox.[1] PL/C was developed with the specific goal of being used for teaching programming. The PL/C compiler, which implemented almost all of the large PL/I language, had the unusual capability of never failing to compile a program, through the use of extensive automatic correction of many syntax errors and by converting any remaining syntax errors to output statements. This was important because, at the time, students submitted their programs on IBM punch cards and might not get their output back for several hours.[2] Over 250 other universities adopted PL/C;[3] as one late-1970s textbook on PL/I noted, "PL/C ... the compiler for PL/I developed at Cornell University ... is widely used in teaching programming."[4] Similarly, a mid-late-1970s survey of programming languages said that "PL/C is a widely used dialect of PL/I."[5]

PL/C
Cover of book that described the PL/C dialect
Paradigmprocedural, imperative, structured, educational
DeveloperCornell University
First appeared1970 (1970)
Stable release
Release 7.6 / 1977
Typing disciplinestrong
Dialects
PL/CT, PL/CS, PL/CV
Influenced by
PL/I, CUPL

Origins and rationale edit

 
PL/C came from Cornell University's Department of Computer Science, located in Upson Hall on the Engineering Quadrangle[6] (building on center-left with yellow bands, here seen in the 1990s)

Work on this project was based on a prior Cornell compiler for the programming language CUPL, which in turn was influenced by the earlier Cornell language implementation CORC.[7] Both of these were small, very restricted languages intended for the teaching of beginning programming.[1] CORC had been used at Cornell from 1962 to 1966 and CUPL from 1965 to 1969.[8] Conway's group had been involved in the development of both of those efforts,[9][10] each of which attempted automatic repair of source code errors.[1]

As the 1970s began, Cornell was attempting to find a teaching language that had general commercial acceptance but also contained modern language features.[11] As another Cornell computer science professor, David Gries, wrote at the time, the first criterion effectively eliminated the ALGOL family of languages and the second criteria argued against FORTRAN and BASIC (with COBOL not even being considered); thus, they chose PL/I.[12] While PL/I did have a foothold in educational use,[13] the decision went against the grain of most universities, where one survey found that some 70 percent of American college students were being taught with FORTRAN.[12] However, Cornell was intent on having a language useful for showing computer science principles and best engineering practices and through which methods such as structured programming and stepwise refinement could be taught, and PL/I was a more expressive vehicle for that than FORTRAN.[14]

For educational institutions that did choose to use the language, the production IBM PL/I F compiler then available was much too slow, in both compile time and execution time, for its use to be practical for student programs.[13] A similar situation existed for FORTRAN, where the IBM FORTRAN IV G compiler was too slow and the University of Waterloo's WATFOR implementation had become a very popular alternate solution.[13] So there was an opening for a student compiler for PL/I; indeed, IBM recognized this and contacted Cornell and suggested they make a 'WATFOR for PL/I'.[15] Indeed, this simile would be made explicit; as one university would explain to their computer center users, "PL/C is to PL/I what WATFOR is to FORTRAN IV, a fast compile-and-go system with some batching capabilities intended primarily for student use."[16]

IBM supplied some of the funding for the initial PL/C development effort, which took place during 1968 and 1969,[8] with the "C" in the name standing for Cornell.[9] PL/C began being used on a regular basis in September 1970.[8]

Dialect and features edit

PL/C, a large subset of PL/I, eliminated a few of the more complex features of PL/I – record I/O, list processing, multitasking, and the compile-time preprocessor.[1] It added extensive debugging and error recovery facilities. PL/C was upwardly compatible with PL/I, meaning that a program that runs without error under the PL/C compiler should run under PL/I and produce the same results.[7] The only exception is if certain incompatible diagnostic features of PL/C were used. The PL/C compiler had the unusual capability of never failing to compile any program, through the use of extensive automatic correction of many syntax errors and by converting any remaining syntax errors to output statements.

PL/C provided extensions to PL/I's own CHECK facility for flow tracing, and additionally provided new facilities, such as the PUT ALL; and PUT ARRAY; statements for printing the values of every scalar and every array variable at that point in the program.[14] PL/C also provided pseudo-comments, which could be used to conditionally turn on code based on options supplied in the PL/C job control card:

*PL/C ID='JANE SMITH' COMMENTS=(2) ... /*2 PUT SKIP LIST('AT POINT Y, THE VALUE OF POPULATION IS', POPULATION); */ /*4 PUT ALL; */ ... 

The comments value shown here would result in the first PUT statement being "uncommented" and invoked during the run, while the second one whose number did not match would still be a comment. Pseudo-comments also provided a way to use PL/C-specific statements in an upwardly compatible way with PL/I, as in the second case, since the PL/I compiler would see them as comments only.[14]

PL/C handles floating point arithmetic by computing all single-precision values as double precision, which can complicate attempts by the programmer to validate rounding behavior of particular computations.[17]

A simple example of PL/C's error repair has been presented as:[7]

 PUT LIST (A B) ERROR SY06 MISSING COMMA ERROR SY07 MISSING SEMI-COLON PL/C USES PUT LIST (A, B); 

While many cases such as this one can be successfully repaired, there are also cases where the repair does not achieve what the programmer likely intended.[1]

There were several other education-related PL/I compilers, including PLAGO from the Polytechnic Institute of Brooklyn and SP/k from the University of Toronto, however they tended to use much more restricted subsets of PL/I, whereas PL/C supported almost the entire language.[13][18] And PL/C was the only PL/I educational dialect mentioned in languages expert Jean E. Sammet's extensive survey of programming languages in use for 1976–77.[5]

Design and implementation edit

 
Line printer listing of PL/C program, from a Cornell first-semester programming class in 1973

The implementation of the PL/C compiler itself was done in IBM 360 Assembly Language, with a heavy use of assembly language macros.[7] It was done as a three-pass compiler, with the first pass doing syntax analysis and error correction of syntactical mistakes, the second pass doing semantic analysis and further error correction, and the third pass doing code generation.[7] PL/C needed to avoid the longstanding problem of "cascading diagnostics", wherein one error is internally but often mistakenly "fixed" by the compiler, resulting in a secondary, tertiary and additional series of unhelpful error messages.[19] The design of the intermediate language used between the passes and of the accompanying symbol table was tailored towards, and key to the achievement of, the error-repair and diagnostic reporting capabilities of PL/C.[1] While a number of these techniques dated from the Cornell CORC and CUPL efforts, here they were being used for the first time on large programming language with a full set of commercial-grade features.[1] This was especially notable given that the PL/I language was notoriously challenging for compilers to deal with.[20]

The compilation speed of PL/C was quite good – some 10,000–20,000 sources lines of code per minute on an IBM System/360 Model 65.[1] The work done on PL/C was described in a paper presented at an AFIPS joint conference in Spring 1971.[7] More prominent was the paper "Design and Implementation of a Diagnostic Compiler for PL/I" by Conway and Wilcox, published in the March 1973 issue of the flagship journal Communications of the ACM, which gave the project considerable visibility within the computer science world.[1]

PL/C was implemented as a compile and go system,[1] similar to WATFOR.[21] It ran on the IBM System/360 and System/370 under OS and HASP.[22] As such, it was designed to run within a 128K byte partition, where the PL/C software and the generated object code took a maximum of 100K bytes.[7] Error correction was attempted at runtime as well, with the PL/C execution supervisor trapping or otherwise detecting use of uninitialized variables, division by zero, out-of-range array indexes, and the like, by issuing a diagnostic and making some adjustment to allow the program to keep running.[1] Overall, use of PL/C significantly reduced the severity of the wait-times-for-batch-runs problem (although Cornell itself developed a job entry system for turning around most student batch jobs very quickly).[8]

Use and distribution edit

 
Assignment using PL/C, from a Cornell second-semester programming class in 1974

As soon as it was ready, PL/C was distributed beyond Cornell itself,[11] in the form of magnetic tapes sent to interested parties.[8] For instance, PL/C was first used at the University of Michigan in the Fall 1970 semester.[16] The PL/C project was considered a research effort, not a commercial endeavor; however, those installations who wanted to use PL/C were asked to pay a "research grant" in exchange.[6] This amount was $1,800 as of 1972,[13] and had risen to $2,400 by 1976.[6] Cornell's further development work on PL/C was partly funded by these payments.[8]

PL/C quickly became the most popular of any education version of PL/I;[10] in 1970–71 alone, it was sent to 100 different institutions, resulting in 60 of them purchasing it.[8] By 1976, there were more than 200 sites around the world that had installed PL/C.[11][23] Eventually, over 250 universities had used it.[3] There was also some interest in PL/C from non-academic entities, thus resulting in PL/C adding support for some business-oriented features such as PICTURE variables.[6]

A survey conducted by New Mexico State University in 1972 looked at various possibilities for teaching languages and implementations and concluded regarding PL/C: "PL/C seems praiseworthy. Its purchase price ($1,800) is probably its biggest drawback. It has all of the built-in functions PL/I has, is much faster in both compilation and execution, and runs in 86K of a 100K partition leaving 14K for the student program. Its only real possible deficiency for student programs is its lack of record I/O capability. The PL/C compiler not only diagnoses errors, but often corrects them properly. It inserts missing parentheses and semicolons and shows both the invalid statement and the corrected statement. If PL/C finds a statement completely unrecognizable it deletes it and attempts execution anyway."[13]

Some universities, including Washington State University, found success in teaching an introductory class that used PL/C first and then Fortran (using WATFIV) second, which was found to be a beneficial order in terms of student learning.[24] Indeed, Cornell at one point restructured their introductory course offering to allow students the option to do that.[22]

PL/C release numbers were to some extent synchronized to releases of the IBM PL/I F compiler, so that for instance Release 4 of PL/C was intended to match Version 4 of the IBM F compiler in terms of upward compatibility.[16] In terms of some instances of PL/C distributions, Release 4 was available by January 1971;[16] Release 6 by August 1971;[1] Release 6.5 by November 1973;[25] Release 7.1 in March 1975;[26] and Release 7.5 in March 1976.[6] The last version of PL/C appears to have been Release 7.6, put out in 1977.[27]

Variants edit

Within the computer science department at Cornell there was a sense of pride about PL/C being associated with the university, and there were several variants of PL/C worked on by Conway, other faculty members, and graduate students.[28]

In 1974, the PL/CT variant of PL/C, for use on interactive terminals rather than in batch job submissions, was first made available at Cornell.[29] A second release was made in 1975,[30] and then it was made available to outside institutions in 1976.[6] PL/CT primarily ran on an IBM System/370 under VM/CMS;[30] it could also run in the IBM TSO environment.[29] Somewhat unusually, PL/CT was not interpreted but rather was still implemented as a compiler.[29]

A variant under development by 1976 was PL/CS, which was a far more restricted subset of PL/I than regular PL/C and which provided direct language support for assertions.[11] The subset was enough, however, that PL/CS would still be suitable for teaching introductory programming classes.[31] It was implemented as an alternate lexical and syntactic analyzer that then plugged into the common PL/C code generator and runtime system.[11] PL/CS was also used in research on the formal semantics of programming languages.[31]

A different implementation of the PL/CS definition came with Professor Tim Teitelbaum and his pioneering Cornell Program Synthesizer work.[32] This early instance of an integrated development environment was developed in 1978 for the PDP-11/60,[33] and contained a structured editor for PL/CS along with an incremental compiler as well as an interpreter.[34] The Cornell Program Synthesizer was soon adapted for the Terak desktop workstation, an early personal computer,[33] which was based on the LSI-11 processor.[2] The Terak computer found popularity for instructional use at Cornell and at other universities, as did the PL/CS available on it.[2][23] In addition, Cornell built a link between the Terak and their IBM 370 mainframe, that would allow batch-mode execution of programs under PL/C and the obtaining of results on printers.[8]

There was an even more experimental dialect being worked on, starting in 1975,[35] that was known as PL/CV, which supplied some language support for formal proof of correctness and which ran as a separate verifier step.[11] The PL/CV work was led by Professor Robert L. Constable.[35][36] PL/CV used PL/CS as part of what it did,[35] and indeed Constable had participated in the creation of PL/CS,[11] especially working with Conway and David Gries on the adding of assertions.[36] A second version, PL/CV2, was released in 1978 and was presented at the Symposium on Principles of Programming Languages in 1979.[35]

Cross compilers edit

In the early 1970s, three cross compilers based on PL/C were created at the University of North Carolina; in these, the host platform was the IBM 360,[37] and the target machine was one of several minicomputers in use at the time. The PL/C language subset was used in these cross compilers,[38] as was the PL/C compiler's first two passes for syntax and semantic analysis.[39] However the IBM 360 code generation pass and storage allocation modules were replaced by ones specific to the target architecture.[39]

The first of these cross compilers was PLCV (not to be confused with the PL/CV verifier), a cross compiler for Varian Data Machines minicomputers,[40] specifically the 620/i and 620/f, and was created around 1971.[37] An improved version of PLCV came out around 1973.[39] The second, PLCI, was targeted at the Interdata Model 3; it also had a revised version around the same time.[39] The third was PLCD, used to target the Digital Equipment Corporation's PDP-11/45 minicomputer, which came out in 1973.[40] Again, PLCD used PL/C but with the IBM 360 code generator replaced by one for PDP-11/45.[40]

The University of North Carolina used these cross compilers for real projects, not just education; in particular, PLCD was used in support of a graphical programming environment that would use the same programming language for both a general purpose mainframe and a graphical support minicomputer, thereby allowing easier shifting of code from one to the other.[38] The IBM PL/I F compiler was used on the mainframe, with programmers restricting themselves to the PL/C subset of the language, and PLCD was used to generate code for the PDP-11/45.[40]

Textbooks edit

The textbook An Introduction to Programming: A Structured Approach Using PL/I and PL/C was written by Conway and Gries using PL/C as the programming language and was published in 1973.[14] It presented top-down design,[23] and stressed the discipline of structured programming throughout, becoming one of the most prominent textbooks to do so.[41] One section of the book was devoted to considerations of program correctness, such as the Invariant Relation Theorem;[14] it is said to have been the first programming textbook to incorporate such material.[10] The book had a potential market at any university using PL/C, and Conway later said that the book had sold very well.[15]

A second edition was published in 1975.[41] Besides reorganizing some material on the development and testing of computer programs,[41] it incorporated changes due to Release 7 of the PL/C compiler.[42] A third edition was published in 1979 and, besides pitching the textbook material at a somewhat higher level to reflect that many college students had previous programming exposure in high school, incorporated additions to reflect the PL/CT and PL/CS variants of PL/C.[43]

An Introduction to Programming: A Structured Approach was used as the basis for several offshoot textbooks, sometimes with additional co-authors, that were either aimed at a more beginning level or that covered other languages or dialects.[44]

Legacy edit

PL/C was still in use at the beginning of the 1980s.[2][32] However, by then the Pascal programming language was beginning to come to the fore as a teaching language, and the move of student access towards smaller and more distributed computer systems than IBM mainframes also continued.[2][8] And PL/I itself never gained the dominance its designers had hoped for in either the business or scientific programming fields.[8]

At Cornell itself, the switch to using Pascal in its introductory computer programming classes took place during 1984.[45] Conway has said he does not know how long PL/C remained in use at the various sites where it was installed.[15]

In 2012, an effort was ongoing to resurrect the popular Michigan Terminal System and the software that ran on it as part of an archival effort on IBM 360/370 simulators. Among the things they requested was permission to run the PL/C object code, which was informally granted by those staff associated with it who were still at Cornell.[46]

As of 2022, the source for PL/C appears to have been lost.

See also edit

References edit

  1. ^ a b c d e f g h i j k l Conway, Richard W.; Wilcox, Thomas R. (March 1973). "Design and implementation of a diagnostic compiler for PL/I". Communications of the ACM. 16 (3): 169–179. doi:10.1145/361972.361992.
  2. ^ a b c d e Stillman, Rich (1980). "Technology marches on: Using microcomputers to deliver elementary computer science instruction". Proceedings of the 8th annual ACM SIGUCCS conference on User services (SIGUCCS '80). Association for Computing Machinery. pp. 135–139. doi:10.1145/800086.802776.
  3. ^ a b Cornell University Announcements: Graduate School of Management, 1984–85. Cornell University. August 10, 1984. p. 22.
  4. ^ Barnes, Robert Arthur (1979). PL/I for Programmers. New York: North Holland. p. xv. ISBN 9780444002846.
  5. ^ a b Sammet, Jean E. (November 1978). "Roster of programming languages for 1976–77". SIGPLAN Notices. 13 (11): 56–85. doi:10.1145/953777.953783. S2CID 13509254.
  6. ^ a b c d e f Leavitt, Don (March 1, 1976). "PL/C Gains Interactive Version". Computerworld. p. 15.
  7. ^ a b c d e f g Morgan, Howard L.; Wagner, Robert A. (1971). "PL/ C:—The design of a high-performance compiler for PL/I". Proceedings of the May 18–20, 1971, spring joint computer conference (AFIPS '71 (Spring)). Association for Computing Machinery. pp. 503–510. doi:10.1145/1478786.1478858.
  8. ^ a b c d e f g h i j Rudan, John W. (2005). The History of Computing at Cornell University (PDF). Ithaca, New York: The Internet-First University Press. pp. 48, 57, 62, 65–66, 86–87.
  9. ^ a b "Richard Conway". Production and Operations Management. 19 (3): 2-ix, x. May 2010. ProQuest 356759223 – via ProQuest.
  10. ^ a b c "Cornell Department of Computer Science: 50 Years of Innovation". Cornell Bowers CIS. Retrieved September 15, 2022.
  11. ^ a b c d e f g Conway, Richard W.; Constable, Robert L. (November 1976). PL/CS – A Disciplined Subset of PL/I (Report). Cornell University. TR76-293.
  12. ^ a b Gries, David (January 1974). "What should we teach in an introductory programming course?". SIGCSE '74: Proceedings of the fourth SIGCSE technical symposium on Computer science education. Association for Computing Machinery. pp. 81–89. doi:10.1145/800183.810447.
  13. ^ a b c d e f Adams, J. Mack; Inmon, William H.; Shirley, Jim (March 1972). "PL/I in the computer science curriculum". ACM SIGCSE Bulletin. 4 (1): 116–126. doi:10.1145/873684.873713. S2CID 32179236.
  14. ^ a b c d e Conway, Richard W.; Gries, David (1973). An Introduction to Programming: A Structured Approach Using PL/I and PL/C. Cambridge, Massachusetts: Winthrop Publishers. pp. (iii), 3, 9, 192–206, 232−236, and passim. ISBN 9780876264065. (Note the first edition uses "PL/1" on the cover but "PL/I" on the title page and in the text itself.)
  15. ^ a b c Conway, Richard W. (July 31, 2015). "A Conversation with Richard W. Conway". An Oral History of Computer Science (Interview). Interviewed by David Gries. Cornell University Library. See segments at 35:00 and 40:30.
  16. ^ a b c d "Availability of PL/C in MTS". Computing Center Newsletter. University of Michigan. January 21, 1971. p. 5.
  17. ^ Hull, T.E. (1977). "Semantics of floating point arithmetic and elementary functions". In Cowell, Wayne (ed.). Portability of numerical software. Berlin: Springer-Verlag. p. 42. ISBN 0-387-08446-0. OCLC 3311037.
  18. ^ Holt, Richard C.; Wortman, David B. (July 1975). "SP/K (PL/1 Subset) compilers now available for 360/370 and PDP-11". SIGMINI Newsletter. 1 (1): 8–9. doi:10.1145/1164857.1164862. S2CID 29890098.
  19. ^ Zeil, Steven. "Dealing with Error Messages". Department of Computer Science, Old Dominion University. Retrieved September 24, 2022.
  20. ^ Pratt, Terrence W. (1975). Programming Languages: Design and Implementation. Englewood Cliffs, New Jersey: Prentice-Hall. pp. 385–386, 415.
  21. ^ Dhotre, I.A.; Puntambekar, A.A. (2008). Systems Software. Technical Publications. p. 3-2.
  22. ^ a b Conway, Richard W. (1974). "Introductory instruction in programming". Proceedings of the fourth SIGCSE technical symposium on Computer science education (SIGCSE '74). Association for Computing Machinery. pp. 6–10. doi:10.1145/800183.810430.
  23. ^ a b c Palazzo, Michael (November 15, 1978). "Computer Dept. Wins Prominence Throughout U.S." The Cornell Daily Sun. pp. 1, 10, 11.
  24. ^ Newton, Glen E.; Starkey, J. Denbigh (1976). "Teaching both PL/I and Fortran to Beginners". Proceedings of the sixth SIGCSE technical symposium on Computer science education (SIGCSE '76). Association for Computing Machinery. pp. 106–107. doi:10.1145/800144.804769.
  25. ^ See program listing image.
  26. ^ "New Version of PL/C". Computing Center Newsletter. University of Michigan. March 12, 1975. p. 2.
  27. ^ See for example Sebesta, Robert W. (2010). Concepts of Programming Languages (Ninth ed.). Addison-Wesley. p. 739. ISBN 9780136073475.
  28. ^ Gries, David (July 21, 2015). "A Conversation with David Gries". An Oral History of Computer Science (Interview). Interviewed by Robert L. Constable. Cornell University Library. See segment at 28:30.
  29. ^ a b c Conway, Richard; Moore, Charles; Worona, Steven (1977). "An interactive version of the PL/C compiler". Proceedings of the 1977 annual conference (ACM '77). Association for Computing Machinery. pp. 308–314. doi:10.1145/800179.810220. hdl:1813/7028.
  30. ^ a b Moore, Charles G. III; Worona, Steven L.; Conway, Richard W. (September 1975). PL/CT – A Terminal Version of PL/C – Release 2 (Report). Cornell University. TR75-259.
  31. ^ a b Constable, Robert L.; Donahue, James E. (July 1979). "A Hierarchical Approach to Formal Semantics With Application to the Definition of PL/CS". ACM Transactions on Programming Languages and Systems. 1 (1): 98–114. doi:10.1145/357062.357069. S2CID 7915928.
  32. ^ a b Teitelbaum, Tim; Reps, Thomas (September 1981). "The Cornell Program Synthesizer: A Syntax-Directed Programming Environment". Communications of the ACM. 24 (9): 563–573. doi:10.1145/358746.358755. S2CID 14317073.
  33. ^ a b Teitelbaum, Tim (September 10, 2015). "A Conversation with Tim Teitelbaum". An Oral History of Computer Science (Interview). Interviewed by David Gries. Cornell University Library. See segments at 10:15 and 16:18.
  34. ^ Reps, Thomas W.; Teitelbaum, Tim (1989). The Synthesizer Generator: A System for Constructing Language-Based Editors. New York: Springer Verlag. pp. 3, 9. ISBN 9781461396239.
  35. ^ a b c d Constable, Robert L.; Johnson, Scott D. (1979). "A PL/CV Precis". Proceedings of the 6th ACM SIGACT-SIGPLAN symposium on Principles of programming languages (POPL '79). Association for Computing Machinery. pp. 7–20. doi:10.1145/567752.567754.
  36. ^ a b Constable, Robert L. (July 21, 2015). "A Conversation with Robert L. Constable". An Oral History of Computer Science (Interview). Interviewed by David Gries. Cornell University Library. See segment at 16:30.
  37. ^ a b ERDA Research Abstracts. Vol. 1 / #3. Oak Ridge, Tennessee: United States Energy Research and Development Administration. March 1976. p. 474. Entry 4422.
  38. ^ a b Hamlin, Griffith; Foley, James D. (1975). "Configurable applications for graphics employing satellites (CAGES)". Proceedings of the 2nd annual conference on Computer graphics and interactive techniques (SIGGRAPH '75). Association for Computing Machinery. pp. 9–19. doi:10.1145/563732.563734.
  39. ^ a b c d ERDA Research Abstracts. Vol. 1 / #2. Oak Ridge, Tennessee: United States Energy Research and Development Administration. February 1976. p. 311. Entry 2956; also entry 2957.
  40. ^ a b c d Foley, James D. (1973). "Software for satellite graphics systems". Proceedings of the ACM annual conference (ACM '73). Association for Computing Machinery. pp. 76–80. doi:10.1145/800192.805684.
  41. ^ a b c "Computer Text Is Updated". The Ithaca Journal. June 30, 1975. p. 6 – via Newspapers.com.
  42. ^ See Second Edition, "Preface", p. xiv.
  43. ^ See Third Edition, "Preface", pp. xv–xvi.
  44. ^ "Texts by David Gries". Department of Computer Science, Cornell University. Retrieved September 23, 2022.
  45. ^ Compare Cornell University Announcements: Courses of Study, 1983–84. Cornell University. July 15, 1983. p. 261. with Cornell University Announcements: Courses of Study, 1984–85. Cornell University. July 16, 1984. p. 268.
  46. ^ "For *PLC". Michigan Terminal System Archive. April 3, 2012. Retrieved September 19, 2022.

External links edit

  • Finding aids for PL/C Project, Cornell Information Technologies records, Cornell University Library
  • PL/C artifacts at the Computer History Museum
  • John Daintith, "PL/I", A Dictionary of Computing, 2018, as hosted at Encyclopedia.com

instructional, dialect, programming, language, developed, department, computer, science, cornell, university, early, 1970s, effort, headed, professor, richard, conway, graduate, student, thomas, wilcox, developed, with, specific, goal, being, used, teaching, p. PL C is an instructional dialect of the programming language PL I developed at the Department of Computer Science of Cornell University in the early 1970s in an effort headed by Professor Richard W Conway and graduate student Thomas R Wilcox 1 PL C was developed with the specific goal of being used for teaching programming The PL C compiler which implemented almost all of the large PL I language had the unusual capability of never failing to compile a program through the use of extensive automatic correction of many syntax errors and by converting any remaining syntax errors to output statements This was important because at the time students submitted their programs on IBM punch cards and might not get their output back for several hours 2 Over 250 other universities adopted PL C 3 as one late 1970s textbook on PL I noted PL C the compiler for PL I developed at Cornell University is widely used in teaching programming 4 Similarly a mid late 1970s survey of programming languages said that PL C is a widely used dialect of PL I 5 PL CCover of book that described the PL C dialectParadigmprocedural imperative structured educationalDeveloperCornell UniversityFirst appeared1970 1970 Stable releaseRelease 7 6 1977Typing disciplinestrongDialectsPL CT PL CS PL CVInfluenced byPL I CUPL Contents 1 Origins and rationale 2 Dialect and features 3 Design and implementation 4 Use and distribution 5 Variants 6 Cross compilers 7 Textbooks 8 Legacy 9 See also 10 References 11 External linksOrigins and rationale edit nbsp PL C came from Cornell University s Department of Computer Science located in Upson Hall on the Engineering Quadrangle 6 building on center left with yellow bands here seen in the 1990s Work on this project was based on a prior Cornell compiler for the programming language CUPL which in turn was influenced by the earlier Cornell language implementation CORC 7 Both of these were small very restricted languages intended for the teaching of beginning programming 1 CORC had been used at Cornell from 1962 to 1966 and CUPL from 1965 to 1969 8 Conway s group had been involved in the development of both of those efforts 9 10 each of which attempted automatic repair of source code errors 1 As the 1970s began Cornell was attempting to find a teaching language that had general commercial acceptance but also contained modern language features 11 As another Cornell computer science professor David Gries wrote at the time the first criterion effectively eliminated the ALGOL family of languages and the second criteria argued against FORTRAN and BASIC with COBOL not even being considered thus they chose PL I 12 While PL I did have a foothold in educational use 13 the decision went against the grain of most universities where one survey found that some 70 percent of American college students were being taught with FORTRAN 12 However Cornell was intent on having a language useful for showing computer science principles and best engineering practices and through which methods such as structured programming and stepwise refinement could be taught and PL I was a more expressive vehicle for that than FORTRAN 14 For educational institutions that did choose to use the language the production IBM PL I F compiler then available was much too slow in both compile time and execution time for its use to be practical for student programs 13 A similar situation existed for FORTRAN where the IBM FORTRAN IV G compiler was too slow and the University of Waterloo s WATFOR implementation had become a very popular alternate solution 13 So there was an opening for a student compiler for PL I indeed IBM recognized this and contacted Cornell and suggested they make a WATFOR for PL I 15 Indeed this simile would be made explicit as one university would explain to their computer center users PL C is to PL I what WATFOR is to FORTRAN IV a fast compile and go system with some batching capabilities intended primarily for student use 16 IBM supplied some of the funding for the initial PL C development effort which took place during 1968 and 1969 8 with the C in the name standing for Cornell 9 PL C began being used on a regular basis in September 1970 8 Dialect and features editPL C a large subset of PL I eliminated a few of the more complex features of PL I record I O list processing multitasking and the compile time preprocessor 1 It added extensive debugging and error recovery facilities PL C was upwardly compatible with PL I meaning that a program that runs without error under the PL C compiler should run under PL I and produce the same results 7 The only exception is if certain incompatible diagnostic features of PL C were used The PL C compiler had the unusual capability of never failing to compile any program through the use of extensive automatic correction of many syntax errors and by converting any remaining syntax errors to output statements PL C provided extensions to PL I s own CHECK facility for flow tracing and additionally provided new facilities such as the PUT ALL and PUT ARRAY statements for printing the values of every scalar and every array variable at that point in the program 14 PL C also provided pseudo comments which could be used to conditionally turn on code based on options supplied in the PL C job control card PL C ID JANE SMITH COMMENTS 2 2 PUT SKIP LIST AT POINT Y THE VALUE OF POPULATION IS POPULATION 4 PUT ALL The comments value shown here would result in the first PUT statement being uncommented and invoked during the run while the second one whose number did not match would still be a comment Pseudo comments also provided a way to use PL C specific statements in an upwardly compatible way with PL I as in the second case since the PL I compiler would see them as comments only 14 PL C handles floating point arithmetic by computing all single precision values as double precision which can complicate attempts by the programmer to validate rounding behavior of particular computations 17 A simple example of PL C s error repair has been presented as 7 PUT LIST A B ERROR SY06 MISSING COMMA ERROR SY07 MISSING SEMI COLON PL C USES PUT LIST A B While many cases such as this one can be successfully repaired there are also cases where the repair does not achieve what the programmer likely intended 1 There were several other education related PL I compilers including PLAGO from the Polytechnic Institute of Brooklyn and SP k from the University of Toronto however they tended to use much more restricted subsets of PL I whereas PL C supported almost the entire language 13 18 And PL C was the only PL I educational dialect mentioned in languages expert Jean E Sammet s extensive survey of programming languages in use for 1976 77 5 Design and implementation edit nbsp Line printer listing of PL C program from a Cornell first semester programming class in 1973The implementation of the PL C compiler itself was done in IBM 360 Assembly Language with a heavy use of assembly language macros 7 It was done as a three pass compiler with the first pass doing syntax analysis and error correction of syntactical mistakes the second pass doing semantic analysis and further error correction and the third pass doing code generation 7 PL C needed to avoid the longstanding problem of cascading diagnostics wherein one error is internally but often mistakenly fixed by the compiler resulting in a secondary tertiary and additional series of unhelpful error messages 19 The design of the intermediate language used between the passes and of the accompanying symbol table was tailored towards and key to the achievement of the error repair and diagnostic reporting capabilities of PL C 1 While a number of these techniques dated from the Cornell CORC and CUPL efforts here they were being used for the first time on large programming language with a full set of commercial grade features 1 This was especially notable given that the PL I language was notoriously challenging for compilers to deal with 20 The compilation speed of PL C was quite good some 10 000 20 000 sources lines of code per minute on an IBM System 360 Model 65 1 The work done on PL C was described in a paper presented at an AFIPS joint conference in Spring 1971 7 More prominent was the paper Design and Implementation of a Diagnostic Compiler for PL I by Conway and Wilcox published in the March 1973 issue of the flagship journal Communications of the ACM which gave the project considerable visibility within the computer science world 1 PL C was implemented as a compile and go system 1 similar to WATFOR 21 It ran on the IBM System 360 and System 370 under OS and HASP 22 As such it was designed to run within a 128K byte partition where the PL C software and the generated object code took a maximum of 100K bytes 7 Error correction was attempted at runtime as well with the PL C execution supervisor trapping or otherwise detecting use of uninitialized variables division by zero out of range array indexes and the like by issuing a diagnostic and making some adjustment to allow the program to keep running 1 Overall use of PL C significantly reduced the severity of the wait times for batch runs problem although Cornell itself developed a job entry system for turning around most student batch jobs very quickly 8 Use and distribution edit nbsp Assignment using PL C from a Cornell second semester programming class in 1974As soon as it was ready PL C was distributed beyond Cornell itself 11 in the form of magnetic tapes sent to interested parties 8 For instance PL C was first used at the University of Michigan in the Fall 1970 semester 16 The PL C project was considered a research effort not a commercial endeavor however those installations who wanted to use PL C were asked to pay a research grant in exchange 6 This amount was 1 800 as of 1972 13 and had risen to 2 400 by 1976 6 Cornell s further development work on PL C was partly funded by these payments 8 PL C quickly became the most popular of any education version of PL I 10 in 1970 71 alone it was sent to 100 different institutions resulting in 60 of them purchasing it 8 By 1976 there were more than 200 sites around the world that had installed PL C 11 23 Eventually over 250 universities had used it 3 There was also some interest in PL C from non academic entities thus resulting in PL C adding support for some business oriented features such as PICTURE variables 6 A survey conducted by New Mexico State University in 1972 looked at various possibilities for teaching languages and implementations and concluded regarding PL C PL C seems praiseworthy Its purchase price 1 800 is probably its biggest drawback It has all of the built in functions PL I has is much faster in both compilation and execution and runs in 86K of a 100K partition leaving 14K for the student program Its only real possible deficiency for student programs is its lack of record I O capability The PL C compiler not only diagnoses errors but often corrects them properly It inserts missing parentheses and semicolons and shows both the invalid statement and the corrected statement If PL C finds a statement completely unrecognizable it deletes it and attempts execution anyway 13 Some universities including Washington State University found success in teaching an introductory class that used PL C first and then Fortran using WATFIV second which was found to be a beneficial order in terms of student learning 24 Indeed Cornell at one point restructured their introductory course offering to allow students the option to do that 22 PL C release numbers were to some extent synchronized to releases of the IBM PL I F compiler so that for instance Release 4 of PL C was intended to match Version 4 of the IBM F compiler in terms of upward compatibility 16 In terms of some instances of PL C distributions Release 4 was available by January 1971 16 Release 6 by August 1971 1 Release 6 5 by November 1973 25 Release 7 1 in March 1975 26 and Release 7 5 in March 1976 6 The last version of PL C appears to have been Release 7 6 put out in 1977 27 Variants editWithin the computer science department at Cornell there was a sense of pride about PL C being associated with the university and there were several variants of PL C worked on by Conway other faculty members and graduate students 28 In 1974 the PL CT variant of PL C for use on interactive terminals rather than in batch job submissions was first made available at Cornell 29 A second release was made in 1975 30 and then it was made available to outside institutions in 1976 6 PL CT primarily ran on an IBM System 370 under VM CMS 30 it could also run in the IBM TSO environment 29 Somewhat unusually PL CT was not interpreted but rather was still implemented as a compiler 29 A variant under development by 1976 was PL CS which was a far more restricted subset of PL I than regular PL C and which provided direct language support for assertions 11 The subset was enough however that PL CS would still be suitable for teaching introductory programming classes 31 It was implemented as an alternate lexical and syntactic analyzer that then plugged into the common PL C code generator and runtime system 11 PL CS was also used in research on the formal semantics of programming languages 31 A different implementation of the PL CS definition came with Professor Tim Teitelbaum and his pioneering Cornell Program Synthesizer work 32 This early instance of an integrated development environment was developed in 1978 for the PDP 11 60 33 and contained a structured editor for PL CS along with an incremental compiler as well as an interpreter 34 The Cornell Program Synthesizer was soon adapted for the Terak desktop workstation an early personal computer 33 which was based on the LSI 11 processor 2 The Terak computer found popularity for instructional use at Cornell and at other universities as did the PL CS available on it 2 23 In addition Cornell built a link between the Terak and their IBM 370 mainframe that would allow batch mode execution of programs under PL C and the obtaining of results on printers 8 There was an even more experimental dialect being worked on starting in 1975 35 that was known as PL CV which supplied some language support for formal proof of correctness and which ran as a separate verifier step 11 The PL CV work was led by Professor Robert L Constable 35 36 PL CV used PL CS as part of what it did 35 and indeed Constable had participated in the creation of PL CS 11 especially working with Conway and David Gries on the adding of assertions 36 A second version PL CV2 was released in 1978 and was presented at the Symposium on Principles of Programming Languages in 1979 35 Cross compilers editIn the early 1970s three cross compilers based on PL C were created at the University of North Carolina in these the host platform was the IBM 360 37 and the target machine was one of several minicomputers in use at the time The PL C language subset was used in these cross compilers 38 as was the PL C compiler s first two passes for syntax and semantic analysis 39 However the IBM 360 code generation pass and storage allocation modules were replaced by ones specific to the target architecture 39 The first of these cross compilers was PLCV not to be confused with the PL CV verifier a cross compiler for Varian Data Machines minicomputers 40 specifically the 620 i and 620 f and was created around 1971 37 An improved version of PLCV came out around 1973 39 The second PLCI was targeted at the Interdata Model 3 it also had a revised version around the same time 39 The third was PLCD used to target the Digital Equipment Corporation s PDP 11 45 minicomputer which came out in 1973 40 Again PLCD used PL C but with the IBM 360 code generator replaced by one for PDP 11 45 40 The University of North Carolina used these cross compilers for real projects not just education in particular PLCD was used in support of a graphical programming environment that would use the same programming language for both a general purpose mainframe and a graphical support minicomputer thereby allowing easier shifting of code from one to the other 38 The IBM PL I F compiler was used on the mainframe with programmers restricting themselves to the PL C subset of the language and PLCD was used to generate code for the PDP 11 45 40 Textbooks editThe textbook An Introduction to Programming A Structured Approach Using PL I and PL C was written by Conway and Gries using PL C as the programming language and was published in 1973 14 It presented top down design 23 and stressed the discipline of structured programming throughout becoming one of the most prominent textbooks to do so 41 One section of the book was devoted to considerations of program correctness such as the Invariant Relation Theorem 14 it is said to have been the first programming textbook to incorporate such material 10 The book had a potential market at any university using PL C and Conway later said that the book had sold very well 15 A second edition was published in 1975 41 Besides reorganizing some material on the development and testing of computer programs 41 it incorporated changes due to Release 7 of the PL C compiler 42 A third edition was published in 1979 and besides pitching the textbook material at a somewhat higher level to reflect that many college students had previous programming exposure in high school incorporated additions to reflect the PL CT and PL CS variants of PL C 43 An Introduction to Programming A Structured Approach was used as the basis for several offshoot textbooks sometimes with additional co authors that were either aimed at a more beginning level or that covered other languages or dialects 44 Legacy editPL C was still in use at the beginning of the 1980s 2 32 However by then the Pascal programming language was beginning to come to the fore as a teaching language and the move of student access towards smaller and more distributed computer systems than IBM mainframes also continued 2 8 And PL I itself never gained the dominance its designers had hoped for in either the business or scientific programming fields 8 At Cornell itself the switch to using Pascal in its introductory computer programming classes took place during 1984 45 Conway has said he does not know how long PL C remained in use at the various sites where it was installed 15 In 2012 an effort was ongoing to resurrect the popular Michigan Terminal System and the software that ran on it as part of an archival effort on IBM 360 370 simulators Among the things they requested was permission to run the PL C object code which was informally granted by those staff associated with it who were still at Cornell 46 As of 2022 update the source for PL C appears to have been lost See also editSP k WATFIV WATBOLReferences edit a b c d e f g h i j k l Conway Richard W Wilcox Thomas R March 1973 Design and implementation of a diagnostic compiler for PL I Communications of the ACM 16 3 169 179 doi 10 1145 361972 361992 a b c d e Stillman Rich 1980 Technology marches on Using microcomputers to deliver elementary computer science instruction Proceedings of the 8th annual ACM SIGUCCS conference on User services SIGUCCS 80 Association for Computing Machinery pp 135 139 doi 10 1145 800086 802776 a b Cornell University Announcements Graduate School of Management 1984 85 Cornell University August 10 1984 p 22 Barnes Robert Arthur 1979 PL I for Programmers New York North Holland p xv ISBN 9780444002846 a b Sammet Jean E November 1978 Roster of programming languages for 1976 77 SIGPLAN Notices 13 11 56 85 doi 10 1145 953777 953783 S2CID 13509254 a b c d e f Leavitt Don March 1 1976 PL C Gains Interactive Version Computerworld p 15 a b c d e f g Morgan Howard L Wagner Robert A 1971 PL C The design of a high performance compiler for PL I Proceedings of the May 18 20 1971 spring joint computer conference AFIPS 71 Spring Association for Computing Machinery pp 503 510 doi 10 1145 1478786 1478858 a b c d e f g h i j Rudan John W 2005 The History of Computing at Cornell University PDF Ithaca New York The Internet First University Press pp 48 57 62 65 66 86 87 a b Richard Conway Production and Operations Management 19 3 2 ix x May 2010 ProQuest 356759223 via ProQuest a b c Cornell Department of Computer Science 50 Years of Innovation Cornell Bowers CIS Retrieved September 15 2022 a b c d e f g Conway Richard W Constable Robert L November 1976 PL CS A Disciplined Subset of PL I Report Cornell University TR76 293 a b Gries David January 1974 What should we teach in an introductory programming course SIGCSE 74 Proceedings of the fourth SIGCSE technical symposium on Computer science education Association for Computing Machinery pp 81 89 doi 10 1145 800183 810447 a b c d e f Adams J Mack Inmon William H Shirley Jim March 1972 PL I in the computer science curriculum ACM SIGCSE Bulletin 4 1 116 126 doi 10 1145 873684 873713 S2CID 32179236 a b c d e Conway Richard W Gries David 1973 An Introduction to Programming A Structured Approach Using PL I and PL C Cambridge Massachusetts Winthrop Publishers pp iii 3 9 192 206 232 236 and passim ISBN 9780876264065 Note the first edition uses PL 1 on the cover but PL I on the title page and in the text itself a b c Conway Richard W July 31 2015 A Conversation with Richard W Conway An Oral History of Computer Science Interview Interviewed by David Gries Cornell University Library See segments at 35 00 and 40 30 a b c d Availability of PL C in MTS Computing Center Newsletter University of Michigan January 21 1971 p 5 Hull T E 1977 Semantics of floating point arithmetic and elementary functions In Cowell Wayne ed Portability of numerical software Berlin Springer Verlag p 42 ISBN 0 387 08446 0 OCLC 3311037 Holt Richard C Wortman David B July 1975 SP K PL 1 Subset compilers now available for 360 370 and PDP 11 SIGMINI Newsletter 1 1 8 9 doi 10 1145 1164857 1164862 S2CID 29890098 Zeil Steven Dealing with Error Messages Department of Computer Science Old Dominion University Retrieved September 24 2022 Pratt Terrence W 1975 Programming Languages Design and Implementation Englewood Cliffs New Jersey Prentice Hall pp 385 386 415 Dhotre I A Puntambekar A A 2008 Systems Software Technical Publications p 3 2 a b Conway Richard W 1974 Introductory instruction in programming Proceedings of the fourth SIGCSE technical symposium on Computer science education SIGCSE 74 Association for Computing Machinery pp 6 10 doi 10 1145 800183 810430 a b c Palazzo Michael November 15 1978 Computer Dept Wins Prominence Throughout U S The Cornell Daily Sun pp 1 10 11 Newton Glen E Starkey J Denbigh 1976 Teaching both PL I and Fortran to Beginners Proceedings of the sixth SIGCSE technical symposium on Computer science education SIGCSE 76 Association for Computing Machinery pp 106 107 doi 10 1145 800144 804769 See program listing image New Version of PL C Computing Center Newsletter University of Michigan March 12 1975 p 2 See for example Sebesta Robert W 2010 Concepts of Programming Languages Ninth ed Addison Wesley p 739 ISBN 9780136073475 Gries David July 21 2015 A Conversation with David Gries An Oral History of Computer Science Interview Interviewed by Robert L Constable Cornell University Library See segment at 28 30 a b c Conway Richard Moore Charles Worona Steven 1977 An interactive version of the PL C compiler Proceedings of the 1977 annual conference ACM 77 Association for Computing Machinery pp 308 314 doi 10 1145 800179 810220 hdl 1813 7028 a b Moore Charles G III Worona Steven L Conway Richard W September 1975 PL CT A Terminal Version of PL C Release 2 Report Cornell University TR75 259 a b Constable Robert L Donahue James E July 1979 A Hierarchical Approach to Formal Semantics With Application to the Definition of PL CS ACM Transactions on Programming Languages and Systems 1 1 98 114 doi 10 1145 357062 357069 S2CID 7915928 a b Teitelbaum Tim Reps Thomas September 1981 The Cornell Program Synthesizer A Syntax Directed Programming Environment Communications of the ACM 24 9 563 573 doi 10 1145 358746 358755 S2CID 14317073 a b Teitelbaum Tim September 10 2015 A Conversation with Tim Teitelbaum An Oral History of Computer Science Interview Interviewed by David Gries Cornell University Library See segments at 10 15 and 16 18 Reps Thomas W Teitelbaum Tim 1989 The Synthesizer Generator A System for Constructing Language Based Editors New York Springer Verlag pp 3 9 ISBN 9781461396239 a b c d Constable Robert L Johnson Scott D 1979 A PL CV Precis Proceedings of the 6th ACM SIGACT SIGPLAN symposium on Principles of programming languages POPL 79 Association for Computing Machinery pp 7 20 doi 10 1145 567752 567754 a b Constable Robert L July 21 2015 A Conversation with Robert L Constable An Oral History of Computer Science Interview Interviewed by David Gries Cornell University Library See segment at 16 30 a b ERDA Research Abstracts Vol 1 3 Oak Ridge Tennessee United States Energy Research and Development Administration March 1976 p 474 Entry 4422 a b Hamlin Griffith Foley James D 1975 Configurable applications for graphics employing satellites CAGES Proceedings of the 2nd annual conference on Computer graphics and interactive techniques SIGGRAPH 75 Association for Computing Machinery pp 9 19 doi 10 1145 563732 563734 a b c d ERDA Research Abstracts Vol 1 2 Oak Ridge Tennessee United States Energy Research and Development Administration February 1976 p 311 Entry 2956 also entry 2957 a b c d Foley James D 1973 Software for satellite graphics systems Proceedings of the ACM annual conference ACM 73 Association for Computing Machinery pp 76 80 doi 10 1145 800192 805684 a b c Computer Text Is Updated The Ithaca Journal June 30 1975 p 6 via Newspapers com See Second Edition Preface p xiv See Third Edition Preface pp xv xvi Texts by David Gries Department of Computer Science Cornell University Retrieved September 23 2022 Compare Cornell University Announcements Courses of Study 1983 84 Cornell University July 15 1983 p 261 with Cornell University Announcements Courses of Study 1984 85 Cornell University July 16 1984 p 268 For PLC Michigan Terminal System Archive April 3 2012 Retrieved September 19 2022 External links editFinding aids for PL C Project Cornell Information Technologies records Cornell University Library PL C artifacts at the Computer History Museum John Daintith PL I A Dictionary of Computing 2018 as hosted at Encyclopedia com Retrieved from https en wikipedia org w index php title PL C amp oldid 1184641540, wikipedia, wiki, book, books, library,

article

, read, download, free, free download, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, picture, music, song, movie, book, game, games.