Programmiersprache Pascal

Evolution der Pascal-Systeme

Aufgeführt werden Sprach(version)en, die bei der Entwicklung der Pascal-Sprachfamilie eine wichtige Rolle gespielt haben. Dabei wird sowohl auf Vorgänger und Nachfolger von Pascal als auch einige der zahlreichen Varianten von Pascal eingegangen.

Die Angaben wurden überwiegend aus der folgenden Quelle entnommen:

  The Language List - Version 2.4, January 23, 1995
  Collected information on about 2350 computer languages, past and present.

  Available online as:
    http://cui_www.unige.ch/langlist
    ftp://wuarchive.wustl.edu/doc/misc/lang-list.txt

  Maintained by:
    Bill Kinnersley, Computer Science Department, University of Kansas

Algol

Als Vorbildsprache für Pascal kann ALGOL 60 gelten.
In der Grundstruktur des Programms und bei der Darstellung von Algorithmen gibt es eine Reihe von Ähnlichkeiten.

IAL
International Algebraic Language. Original name of ALGOL 58. "Preliminary report - International Algebraic Language", CACM 1(12):8 (1958).

ALGOL 60
ALGOrithmic Language. Designed as a portable language for scientific computations. ALGOL 60 was small and elegant. It was block-structured, nested, recursive, and free form. It was also the first language to be described in BNF. There were three lexical representations: hardware, reference, and publication. The only structured data types were arrays, but they were permitted to have lower bounds and could be dynamic. Keywords. Conditional expression. Introduced :=, if-then-else, very general 'for' loops. Switch declaration (an array of statement labels generalizing FORTRAN's computed goto). Parameters were call-by-name and call-by-value. Static local 'own' variables. Lacked user-defined types, character manipulation and standard I/O. "Report on the Algorithmic Language ALGOL 60", Peter Naur ed, CACM 3(5):299-314 (May 1960).

ALGOL W
Derivative of ALGOL 60. Introduced double precision, complex numbers, bit strings and dynamic data structures. Parsed entirely by operator precedence. Used call-by-value-result. "A Contribution to the Development of Algol", N. Wirth, CACM 9(6):413-431 (June 1966). "ALGOL W Implementation", H. Bauer et al, TR CS98, Stanford U, 1968.

EULER
(named for the Swiss mathematician Leonhard Euler (1707-1783)) Revision of ALGOL. A small predecessor of Pascal. "EULER: A Generalization of ALGOL and Its Formal Definition", N. Wirth, CACM 9(1) (Jan 1966) and 9(2) (Feb 1966).
Eine Sprache, die ALGOL 60 als Teilmenge enthält, ist SIMULA.
SIMULA ist die erste Sprache, die Elemente des objektorientierten Programmierens bereitstellt.
SIMULA I
SIMUlation LAnguage. Kristen Nygaard & Ole-Johan Dahl, designed 1962, implemented 1964. Extension to ALGOL 60 for the Univac 1107, for discrete simulation. Coroutines.

SIMULA 67
A general-purpose successor to SIMULA I, in which the simulation support is defined in object-oriented terms. Introduced the record class, leading the way to data abstraction and object-oriented programming. Garbage collection.

SIMULA
Current version of SIMULA 67. Used as the introductory programming language at Lund Inst Tech, Sweden and U Bergen, Norway. "Object-Oriented Programming with SIMULA", Bjorn Kirkerud, A-W 1989. "Data Processing - Programming Languages - SIMULA", Swedish Standard SS 63 61 14 (1987), ISBN 91-7162-234-9, available through ANSI. Association for SIMULA Users, Royal Inst of Tech, S-100 44 Stockholm, Sweden. Simula a.s., Postboks 4403 - Torshov, N-0402 Oslo 4, Norway, versions for almost every computer.
ALGOL 68 hat die Entwicklung von Programmiersprachen durch eine Reihe von Ideen beeinflußt. Die Sprache war zwar kaum im praktischen Einsatz, hat aber beträchtlichen Einfluß auf die Gestaltung der Theorie der Programmiersprachen genommen.
ALGOL 60 und ALGOL 68 unterscheiden sich trotz des gemeinsamen Namensstamms ALGOL wesentlich voneinander.

ALGOL 68
Adriaan van Wijngaarden et al. Discussed from 1963 by Working Group 2.1 of IFIP. Definition accepted Dec 1968. ALGOL 68 was complex, and posed difficulties for both implementors and users. Structural equivalence. Automatic type conversion, including dereferencing. Flexible arrays. Generalized loops (for-from-by-to-while-do-od), if-then-elif-fi, integer case statement with 'out' clause, skip statement, goto. Blocks, procedures and user-defined operators. Procedure parameters. Concurrent execution (cobegin/coend) and semaphores. Generators heap and loc for dynamic allocation. No abstract data types, no separate compilation.

Pascal

Pascal
(named for the French mathematician Blaise Pascal (1623-1662)) N. Wirth, ca. 1970. Designed for simplicity, in reaction to the complexity of ALGOL 68, and intended as a teaching language. Innovations: enumeration types, subranges, sets, variant records, case statement. Pascal has been extremely influential in programming language design, and has led to a great number of variations and descendants. "The Programming Language Pascal", N. Wirth, Acta Informatica 1:35-63 (1971). "PASCAL User Manual and Report", K. Jensen & N. Wirth, Springer 1975 made significant revisions to the language.

ANSI/IEEE770X3.97-1993, very similar to ISO Pascal, but does not include conformant arrays.

BS 6192, "Specification for Computer Programming Language Pascal", British Standards Institute 1982.

ISO 7185-1983(E). Level 0 and Level 1. Changes from Jensen & Wirth's Pascal include: name equivalence; names must be bound before they are used; loop index must be local to the procedure; formal procedure parameters must include their arguments; conformant array schemas.

Extended Pascal
Extended Pascal - ISO, 1992. A superset of ANSI and ISO Pascal. Many enhancements, including modules, separate compilation, type schemata, variable-length strings, direct-access files, complex numbers, initial values, constant expressions. ANSI/IEEE770X3.160-1989 and ISO 10206.

Andere Sprachen

Aufgeführt sind hier einige Sprachen, die einerseits in der Pascal-Tradition stehen, anderseits aber auch Anregungen für die Entwicklung von neuerer Pascal-Versionen sowie für die Pascal-Nachfolgesprachen Modula und Oberon gegeben haben.

CLU
CLUster. 1974-1975. CLU is an object-oriented language of the Pascal family designed to support data abstraction, similar to Alphard. Introduced the iterator: a coroutine yielding the elements of a data object, to be used as the sequence of values in a 'for' loop.
A CLU program consists of separately compilable procedures, clusters and iterators, no nesting. A cluster is a module naming an abstract type and its operations, its internal representation and implementation. Clusters and iterators may be generic. Supplying actual constant values for the parameters instantiates the module.
There are no implicit type conversions. In a cluster, the explicit type conversions 'up' and 'down' change between the abstract type and the representation. There is a universal type 'any', and a procedure force[] to check that an object is a certain type. Objects may be mutable or immutable. Garbage collection is built in.
Exceptions are raised using 'signal' and handled with 'except'. Assignment is by sharing, similar to the sharing of data objects in LISP. Arguments are passed by call-by-sharing, similar to call by value, except that the arguments are objects and can be changed only if they are mutable. CLU has own variables and multiple assignment.
TED (a text editor), R (a document formatter), SWIFT (an operating system), and lp (a proof tool used for formal specification) have been written in CLU.
"Abstraction and Specification in Program Development", Barbara Liskov and John Guttag, McGraw-Hill, 1986. "CLU Reference Manual", Barbara Liskov et al, LNCS 114, Springer 1981.

Mesa
Xerox PARC, 1977. System and application programming for proprietary hardware: Alto, Dolphin, Dorado and Dandelion. Pascal-like syntax, Algol68-like semantics. An early version was weakly typed. Mesa's modules with separately compilable definition and implementation parts directly led to Wirth's design for Modula. Threads, coroutines (fork/join), exceptions, and monitors. Type checking may be disabled. Mesa was used internally by Xerox to develop ViewPoint, the Xerox Star, MDE, and the controller of a high-end copier. It was released to a few universitites in 1985. Succeeded by Cedar. "Mesa Language Manual", J.G. Mitchell et al, Xerox PARC, CSL-79-3 (Apr 1979). "Early Experience with Mesa", Geschke et al, CACM 20(8):540-552 (Aug 1977).

Cedar
Xerox PARC. Superset of Mesa, adding garbage collection, dynamic types and a universal pointer type (REF ANY). A large complex language designed for custom Xerox hardware and the Cedar OS/environment. Data types: atoms, lists, ropes ("industrial strength" strings), conditions. Multiprocessing features include threads, monitors, signals and catch phrases. Used to develop the Cedar integrated programming environment. "A Description of the Cedar Language", Butler Lampson, Xerox PARC, CSL-83-15 (Dec 1983). "The Structure of Cedar", D. Swinehart et al, SIGPLAN Notices 20(7):230-244 (July 1985).

Ada
(named for Ada Lovelace (1811-1852), arguably the world's first computer programmer.) Jean Ichbiah's team at CII Honeywell, for the U.S. Department of Defense, 1979. Ada is a large, complex block-structured language aimed primarily at embedded computer applications. It has facilities for real-time response, concurrency, hardware access, and reliable run-time error handling. In support of large-scale software engineering, it emphasizes strong typing, data abstraction and encapsulation. The type system uses name equivalence and includes both subtypes and derived types. Both fixed and floating point numerical types are supported.
Control flow is fully bracketed: if-then-elsif-end if, case-is-when-end case, loop-exit-end loop, goto. Subprogram parameters are in, out, or inout. Variables imported from other packages may be hidden or directly visible. Operators may be overloaded, and so may enumeration literals. There are user-defined exceptions and exception handlers.
An Ada program consists of a set of packages encapsulating data objects and their related operations. A package has a separately compilable body and interface. Ada permits generic packages and subroutines, possibly parametrized.
Ada programming places a heavy emphasis on multitasking. Tasks are synchronized by the rendezvous, in which a task waits for one of its subroutines to be executed by another. The conditional entry makes it possible for a task to test whether an entry is ready. The selective wait waits for either of two entries or waits for a limited time.
"Reference Manual for the Ada Programming Language", ANSI/MIL STD 1815A, U.S. DoD (Jan 1983). Earlier draft versions appeared in July 1980 and July 1982. ANSI 9183, ISO 1987. Russian: GOST 27831-88.

Ada 9X (now Ada 95)
Revision and extension of Ada begun in 1988, currently under development. Additions include object-orientation (tagged types, abstract types and class-wide types), hierarchical libraries, and synchronization with shared data (protected types) similar to Orca. Lacks multiple inheritance. "Introducing Ada 9X", J.G.P. Barnes, Feb 1993.

Pascal Versionen

Pascal hat die Entwicklung neuerer Sprachen wesentlich entwickelt. Andererseits haben neuere Sprachen gegenüber Pascal einige Verbesserungen gebracht. Diese nehmen nun wiederum Einfluß auf die Weiterentwicklung von Pascal.

Concurrent Pascal
Brinch Hansen, 1972-75. Extension of a Pascal subset, Sequential Pascal. The first language to support monitors. Access to hardware devices through monitor calls. Also processes and classes. "The Programming Language Concurrent Pascal", Per Brinch Hansen, IEEE Trans Soft Eng 1(2):199-207 (Jun 1975).

Pascal Plus
Jim Welsh & D. Bustard, Queens U, Belfast. Pascal with extensions for object-oriented multiprogramming, uses an 'envelope' construct for both packages and classes. "Pascal Plus - Another Language for Modular Multiprogramming", J. Welsh et al, Soft Prac & Exp 9:947 (1979). "Sequential Program Structures", J. Welsh et al, P-H 1984, ISBN 0- 13806828-3.

Object Pascal
Developed jointly by Apple Computer and Niklaus Wirth. An object-oriented Pascal. "Object Pascal Report", Larry Tesler, Structured Language World 9(3):10-17 (1985).

Pascal++
ISO, 1994. An extension of Extended Pascal, inspired by Pascal Plus. Adds concurrency, exceptions and object orientation, including virtual types and multiple inheritance.

Compas Pascal
Predecessor of Turbo Pascal, by POLY Data of Denmark. Later renamed POLY Pascal, and afterwards sold to Borland.

Turbo Pascal
Borland Intl's Pascal. Perhaps the first integrated development environment for MS-DOS. Versions 1.0-3.0: standard Pascal with a few extensions Versions 4.0 (1987) and 5.0: separate compilation Version 5.5: object-oriented facilities Version 6.0: Turbo Vision OOP library

Version 7.0: Borland Pascal with Objects
(Version 8.0:) Borland Delphi for Windows with Object Pascal

Pascal Nachfolger

Modula
MODUlar LAnguage. Wirth, 1977. Predecessor of Modula-2, more oriented towards concurrent programming but otherwise quite similar. "Modula - A Language for Modular Multiprogramming", N. Wirth, Soft Prac & Exp 7(1):3-35 (Jan 1977).

Modula-2
Wirth, ETH 1978. Developed as the system language for the Lilith workstation. The central concept is the module which may be used to encapsulate a set of related subprograms and data structures, and restrict their visibility from other portions of the program. Each module has a definition part giving the interface, and an implementation part. The language provides limited single-processor concurrency (monitors, coroutines and explicit transfer of control) and hardware access (absolute addresses and interrupts). Uses name equivalence. "Programming in Modula-2", N. Wirth, Springer 1985.

Modula-3
L. Cardelli et al, DEC and Olivetti, 1988. A descendant of Modula-2+ and Cedar, designed for safety and simplicity. Objects, generics, threads, exceptions and garbage collection. Modules are explicitly safe or unsafe. As in Mesa, any set of variables can be monitored. No multiple inheritance, no operator overloading. Uses structural equivalence. "Modula-3 Report", Luca Cardelli et al, TR 52, DEC SRC, and Olivetti Research Center, Aug 1988 (revised Oct 1989). The changes are described in "System Programming with Modula-3", Greg Nelson ed, P-H 1991, ISBN 0-13-590464-1. "Modula-3", Sam Harbison, P-H 1992. Version: SRC Modula-3 V1.5.
Oberon
Wirth, 1988. A descendant of Modula-2 eliminating many things: variant records, enumeration types, subranges, lower array indices and 'for' loops. Additions are extensible record types, multidimensional open arrays and garbage collection. "The Programming Language Oberon", N. Wirth, Soft Prac & Exp 18(7):671-690 (July 1988). "Programming in Oberon: Steps Beyond Pascal and Modula", M. Reiser & N. Wirth, A-W 1992.

Oberon-2
H. Moessenboeck, 1991. A superset of Oberon-1 to include object-orientation. A redesign of Object Oberon. Type-bound procedures (equivalent to methods), read-only export of variables and record fields, open array variables, and a 'with' statement with variants. The 'for' statement is reintroduced. Second Intl Modula-2 Conf, Sept 1991.


P. Böhme, 02.09.1996