How can we judge or compare languages?
Technically not interesting; nearly all languages are ``Turing-complete.''
Appropriateness to domain
Scientific (numerical) computing
High-level goals for code
Goals for languages
Maximizes explicit structure
Clear execution model
Efficient implementation model
Costs affected by programming language choice
Execution speed (& space)
Compilation, testing, debugging
Factors affecting programming language choice
Costs (as above)
Availability of implementations
Availability of trained programmers (should this matter?)
Inertia FORTRAN 1954-58 John Backus (IBM)
Domain: Numerical computation
Arithmetic expressions (evaluated using stack)
Iterative control structures
Subroutines (no recursion; call-by-reference; separate compilation (in FORTRAN II))
Common blocks (and EQUIVALENCE declarations)
I/O using FORMAT directives
Fixed run-time storage requirements
Optimization of numerical computations
Still used very widely: FORTRAN IV, FORTRAN 77, FORTRAN 90, HPF
ALGOL 60 1957-60 Committee
(incl. Backus, McCarthy, Naur)
Domain: Numerical computation
Carefully defined by ``report''
Syntax defined with BNF
Block structure (stack-based implementation)
Explicit type declarations
Scope rules and dynamic lifetimes
Relational & boolean expressions
Call-by-value & call-by-name
Dynamic Array Bounds
Never widely used in US; somewhat used in Europe.
Very influential on later languages.
``An improvement on nearly all its successors.'' - Hoare
Cobol 1959-61 DOD-led committee
Domain: Business data processing
Separate data description
Record data structures
File description/ manipulation
English-language-like syntax (``Syntactic sugar'')
Still used very widely.
Ada 1977-83 DOD-sponsored committee
Domain: Everything, but especially embedded systems.
Focus on reliability, safety.
Real-time control and multiprocessing.
Programming support environments.
Very large and verbose language.
Was mandated for much DOD work, but no more. Ada95 now available.
Pascal Family 1971- Niklaus Wirth
Domain: General-purpose programming, education.
Simplicity of language and implementation
Rich type definition facility
Structured programming methodology
Suitable for proving programs correct
Modules for abstraction
Systems programming facilities
Oberon, Oberon-2 1988-90, 1992
Addition of object-oriented features.
Separate development by DEC SRC.
C 1972-74 Dennis Ritchie (Bell Labs)
Domain: Systems Programming; hacking of all kinds.
Implementation language for UNIX kernel and utilities
Rich set of operators
Easy machine access
Very successful; widely used in engineering and education
Standardized as ANSI C
C++ 1980- Bjarne Stroustrup
Domain: As C.
Extended version of C.
Direct support for abstract data types
Large and very complex language
Used very widely. Java 1995- Arnold & Gosling (Sun)
Domain: Internet applet programming; as C++.
Cut-down, cleaned-up version of C++.
Automatic heap storage management (garbage collection).
Type-safety and runtime memory security.
Portable runtime environment (Java Virtual Machine).
Wildly hyped for network applications; may or may not take over C++ territory.
LISP and Functional Languages
LISP 1959-60 John McCarthy (MIT)
Domain: Artificial intelligence; symbolic computing
Extremely simple program syntax; programs can easily manipulate programs
Many variants, including Common Lisp, Scheme; also related to
Standard ML1981- Robin Milner, et al.
Static but flexible typing
Rich, orthogonal type system
Visual Basic1990's Microsoft
Domain: Customizing and extending MS Windows-based office and COM applications.
Very loosely based on BASIC language developed in early '60's.
Programs (especially user-interfaces) usually built using interactive visual program development environment.
Often used to ``glue'' together existing code components.
Supports rapid, ``one-off'' prototyping and large-scale system development.
Conventional procedural language.
Supports COM objects.
Used very widely in Microsoft environments.