CPL(ID:181/cpl001)

Combined Programming Language 


Combined Programming Language. U Cambridge and U London.

A very complex language, syntactically based on ALGOL-60, with a pure functional subset. Provides the ..where.. form of local definitions. Strongly typed but has a "general" type enabling a weak form of polymorphism. Functions may be defined as either normal or applicative order. Typed array and polymorphic list structures. List selection is through structure matching.

Partially implemented on the Titan (Atlas 2) computer at Cambridge. According to Higman (1977, 2nd Edition) the language did not "survive the demise of the machine".

Led to the much simpler BCPL.

Places
People:
Structures:
Related languages
ALGOL 60 Revised => CPL   Implementation
CPL => BCPL   Subset
CPL => CPL1   Subset

References:
  • Barron, D.W. et al, "The Main Features of CPL", pp134-143 view details Abstract: The Computer Journal, Volume 6, Issue 2, pp. 134-143: Abstract.


    The main features of CPL
    DW Barron1, JN Buxton2, DF Hartley1, E Nixon2 and C Strachey1

    1 University Mathematical Laboratory, Cambridge, UK, 2University of London Computer Unit, 44 Gordon Square, London, UK


    The paper provides an informal account of CPL, a new programming language currently being implemented for the Titan at Cambridge and the Atlas at London University. CPL is based on, and contains the concepts of, ALGOL 60. In addition there are extended data descriptions, command and expression structures, provision for manipulating non-numerical objects, and comprehensive input-output facilities. However, CPL is not just another proposal for the extension of ALGOL 60, but has been designed from first principles and has a logically coherent structure.

          in The Computer Journal 6(2) July 1963 view details
  • Cheatham, T. E. Jr. "Editor's note: A successor to ALGOL?" p422 view details Abstract: Publication of the original ALGOL report [1] initiated a series of debates concerning its elegance, generality, implementability, format, ambiguity, and so on. The subsequent publication of the revised ALGOL report [2] stilled some of these debates and initiated others; many are still continuing. Along with sparking these debates, the ALGOL reports have provided the impetus for several significant theoretical studies of programming language specification and analysis as well as several significant practical studies of programming and compiling techniques. However, the number of serious proposals for a language to supersede ALGOL have been relatively few, the paper by Wirth [3], the book by Yershov et al. [4], and the paper by Barron et al. [5] being the most significant exceptions. The reasons for this are apparent: the invention and description of a programming language of the sophistication of ALGOL, taking into account all the theoretical, practical and aesthetic facts known or suspected today, is an extremely difficult task.
    In order to help establish a basis upon which a reasonable successor to ALGOL could be specified, this Department hereby solicits for publication papers, notes, remarks, letters and the like which have to do with one or another of the aspects of a possible successor to ALGOL. The following note by J. Garwick is typical of the kind of thing we would like to receive. The contributions will, as is usual, be refereed; however, we will seriously attempt to print any responsible position or idea. External link: Online copy
          in [ACM] CACM 7(07) July 1964 view details
  • Buxton, J; Gray, J C and Park, D "CPL elementary programming manual. Edition II" (Cambridge). Cambridge University Mathematical Laboratory England 1966 view details
          in [ACM] CACM 7(07) July 1964 view details
  • Strachey, Christopher (ed.): CPL working papers. Cambridge, England: London Institute of Computer Science and the University Mathematical Laboratory 1966. view details
          in [ACM] CACM 7(07) July 1964 view details
  • Balson, A. P. review of Hext 1967 view details Abstract: This paper describes a general procedure for type-matching at compile time, using examples from CPL. The treatment is elegant, with three basic recursive procedures available for compiler functions. Type [ (expression) ] returns the syntactic type of the (expression), inserting transfer functions where necessary, while settype [ (identifier), (type) ] records the type of a variable when it is declared in the CPL sense. Thus the occurrence of let X = E, where E is an expression, would cause the compiler to call settype [ ;{, type [ E ] ]. Finally, the procedure uptype [ (expression), (type) ] will analyze the function in the same way as type, but ends up by making the (expression) have the (type) specified.

    The main part of the paper is a more formal discussion of types, described as a partially ordered set. The ordering is such that, if t1 and t2 are types, then t1 ~ t2 means that any quantity of type t2 may be represented as type if without loss of precision. Thus (double) ~ (real) ~ (index). There is a brief discussion of the compatibility of type structures, which occur in CPL and PL/I. Finally the author presents an interesting discussion of type determination for recursive procedures.

    The paper is interesting and well written, and the practicality of the system is demonstrated by its inclusion in the CPL compiler at Cambridge.
          in ACM Computing Reviews 8(06) November-December 1967 view details
  • Hext, J. B. "Compile-time type-matching" view details Abstract: Run-time type-matching is an inefficient process which can be avoided by a suitably structured language. A procedure is outlined for analyzing a program at compile-time to determine the types of all its expressions and to insert transfer functions on them where necessary. This is given a systematic basis by treating the available types as a partially ordered set. Applications are illustrated from CPL. The treatment is extended to cover structures, arrays and procedures.
          in The Computer Journal 9(4) 1967 view details
  • Coulouris, G. F.; Goodey, T. J.; Hill, R. W.; Keeling, R. W.; Levin, D. "The London CPL 1 compiler" view details Abstract: The CPL language has been described elsewhere, but as yet no implementations of it have been
    described. The authors have been concerned in the implementation of a subset of the full language,
    the implementation proceeding concurrently with the design of the language. Since the majority
    of the designers were not members of the implementation team, the choice of a subset was partly
    dictated by the state of the design process at the time. Some other motivations for the choice are
    given in Coulouris (1967). The implementation was intended to clarify some of the problems of
    implementing CPL, and to gain feedback information from user experience to assist in the design
    process. The authors believe that CPL is a powerful language for the demonstration of computing
    concepts, and that the implementation has therefore provided a useful teaching tool. Extract: Intro
    The compiler which is the subject of this paper is implemented
    on the London Atlas for a language CPLl, very
    similar to CPL (Barron et al., 1963; CPL Working
    Papers, 1966), but less powerful. (It has no types
    general, complex or double length. The list processing
    facilities mentioned in Barron et al. (1963) and Barron
    and Strachey (1966) are not part of CPL as defined by
    the reference manual (2), and are not in CPLl.) Despite
    this CPLl is more powerful than ALGOL 60, and some
    details of its implementation may therefore be of interest.
    The CPLl compiler has been written using the Compiler
    Compiler of Brooker and Morris. This takes a
    'statement' at a time, analyses it, and produces object
    code. In its application to CPLl it has been necessary
    to define the complete program as a single source statement;
    this is forced by the 'where' clause which allows
    trailing definitions and by the labels which are not
    defined at the head of a block. In a situation such as:
    $1 let B = 0.01
    5 let x = B
    . . . Program. . .
    B: $1
    it is not known, until the whole program is read in,
    whether x is of type real or label (in fact it is label).
          in The Computer Journal 11(1) May 1968 view details
  • Richards, M. "CPL: A tool for compiler writing and system programming" pp557-566 view details
          in [AFIPS] Proceedings of the 1969 Spring Joint Computer Conference SJCC 34 view details
  • Stock, Karl F. "A listing of some programming languages and their users" in RZ-Informationen. Graz: Rechenzentrum Graz 1971 64 view details Abstract: 321 Programmiersprachen mit Angabe der Computer-Hersteller, auf deren Anlagen die entsprechenden Sprachen verwendet werden kennen. Register der 74 Computer-Firmen; Reihenfolge der Programmiersprachen nach der Anzahl der Herstellerfirmen, auf deren Anlagen die Sprache implementiert ist; Reihenfolge der Herstellerfirmen nach der Anzahl der verwendeten Programmiersprachen.

    [321 programming languages with indication of the computer manufacturers, on whose machinery the appropriate languages are used to know.  Register of the 74 computer companies;  Sequence of the programming languages after the number of manufacturing firms, on whose plants the language is implemented;  Sequence of the manufacturing firms after the number of used programming languages.]
          in [AFIPS] Proceedings of the 1969 Spring Joint Computer Conference SJCC 34 view details
  • Sammet, Jean E., "Roster of Programming Languages 1972" 68 view details
          in Computers & Automation 21(6B), 30 Aug 1972 view details
  • Stock, Marylene and Stock, Karl F. "Bibliography of Programming Languages: Books, User Manuals and Articles from PLANKALKUL to PL/I" Verlag Dokumentation, Pullach/Munchen 1973 150 view details Abstract: PREFACE  AND  INTRODUCTION
    The exact number of all the programming languages still in use, and those which are no longer used, is unknown. Zemanek calls the abundance of programming languages and their many dialects a "language Babel". When a new programming language is developed, only its name is known at first and it takes a while before publications about it appear. For some languages, the only relevant literature stays inside the individual companies; some are reported on in papers and magazines; and only a few, such as ALGOL, BASIC, COBOL, FORTRAN, and PL/1, become known to a wider public through various text- and handbooks. The situation surrounding the application of these languages in many computer centers is a similar one.

    There are differing opinions on the concept "programming languages". What is called a programming language by some may be termed a program, a processor, or a generator by others. Since there are no sharp borderlines in the field of programming languages, works were considered here which deal with machine languages, assemblers, autocoders, syntax and compilers, processors and generators, as well as with general higher programming languages.

    The bibliography contains some 2,700 titles of books, magazines and essays for around 300 programming languages. However, as shown by the "Overview of Existing Programming Languages", there are more than 300 such languages. The "Overview" lists a total of 676 programming languages, but this is certainly incomplete. One author ' has already announced the "next 700 programming languages"; it is to be hoped the many users may be spared such a great variety for reasons of compatibility. The graphic representations (illustrations 1 & 2) show the development and proportion of the most widely-used programming languages, as measured by the number of publications listed here and by the number of computer manufacturers and software firms who have implemented the language in question. The illustrations show FORTRAN to be in the lead at the present time. PL/1 is advancing rapidly, although PL/1 compilers are not yet seen very often outside of IBM.

    Some experts believe PL/1 will replace even the widely-used languages such as FORTRAN, COBOL, and ALGOL.4) If this does occur, it will surely take some time - as shown by the chronological diagram (illustration 2) .

    It would be desirable from the user's point of view to reduce this language confusion down to the most advantageous languages. Those languages still maintained should incorporate the special facets and advantages of the otherwise superfluous languages. Obviously such demands are not in the interests of computer production firms, especially when one considers that a FORTRAN program can be executed on nearly all third-generation computers.

    The titles in this bibliography are organized alphabetically according to programming language, and within a language chronologically and again alphabetically within a given year. Preceding the first programming language in the alphabet, literature is listed on several languages, as are general papers on programming languages and on the theory of formal languages (AAA).
    As far as possible, the most of titles are based on autopsy. However, the bibliographical description of sone titles will not satisfy bibliography-documentation demands, since they are based on inaccurate information in various sources. Translation titles whose original titles could not be found through bibliographical research were not included. ' In view of the fact that nany libraries do not have the quoted papers, all magazine essays should have been listed with the volume, the year, issue number and the complete number of pages (e.g. pp. 721-783), so that interlibrary loans could take place with fast reader service. Unfortunately, these data were not always found.

    It is hoped that this bibliography will help the electronic data processing expert, and those who wish to select the appropriate programming language from the many available, to find a way through the language Babel.

    We wish to offer special thanks to Mr. Klaus G. Saur and the staff of Verlag Dokumentation for their publishing work.

    Graz / Austria, May, 1973
          in Computers & Automation 21(6B), 30 Aug 1972 view details
  • Burstall, Rod "Christopher Strachey - Understanding Programming Languages" view details
          in Higher-Order and Symbolic Computation April 2000 Volume 13 Issue 1-2 view details
  • Hartley, David "Cambridge and CPL in the 1960s" pp69-70 view details
          in Higher-Order and Symbolic Computation April 2000 Volume 13 Issue 1-2 view details
  • Richards, Martin "Christopher Strachey and the Cambridge CPL Compiler" view details
          in Higher-Order and Symbolic Computation April 2000 Volume 13 Issue 1-2 view details
  • Scott, Dana "Some Reflections on Strachey and His Work" view details
          in Higher-Order and Symbolic Computation April 2000 Volume 13 Issue 1-2 view details
    Resources
    • Events in the early history of the Computer Laboratory: Programming Languages
      CPL: joint project with University of London, Cambirdge team initally led by David Barron and later Christopher Strachey, also included David Hartley, Martin Richards and David Park. Pioneered many new programming language ideas but only partially implemented on Titan. CPL was 'father' of BCPL and subsequently 'great grandfather'of C.
      external link