CMPS4143 Contemporary Programming Languages
Week 1 – lecture 1
What is a programming language?
- systematic notation by which we describe computational processes to others
- notation for description of algorithms and data structures
computational process – set of steps solve a problem
computer’s built-in abilities: PRIMITIVE/ constitute Machine Language
- arithmetic and logical operations
- I/O
- Some “control” functions
High-level programming languages – less primitive notations/ need system software to translate
Why study programming languages?
- Linguistic theory states: structure of language defines boundaries of thought ?TRUE?
- Language can facilitate or impede certain modes of thought
- A given programming language can influence class of solutions
Benefits of studying languages?
Computer Scientists
- Improve ability to develop algorithms
- Improve existing use of language
- Increase vocabulary of programming constructs
- Allow choice of language
- Easier to learn new language
- Easier to design new language (user interfaces)
Language Designers/Implementers
- insights from motivation of language facilities to make implementation tradeoffs
Hardware Architects
- gain insight into ways machines may better support languages
- design a semantically coherent machine w/ complete sets of data types and operations
System designers
- apply to human interfaces
- JCL’s, DB systems, editors, text formatters, debuggers have many characteristics of a programming language
- Necessary for file systems, linkage editors to interface with programming languages
Software Managers
- choice of language
- choice of extension of language or new language and know costs
Early History
1500-3000 B.C. earliest know algorithm on clay tablets in Babylon (near Baghdad, Iraq)
produced mathematical tables
solved algebraic equations using an “algorithm”
at end put “this is the procedure”
did not have conditional tests (no 0 or negative numbers)
did have repetition
300 B.C. Euclid Greece
algorithm for computing GCD of 2 integers (zero still not recognized, so special cases)
19th, early 20th century
1820-1850 Charles Babbage English
2 machines:
- Difference Engine: finite differences, repeated additions, math tables
- Analytical Engine:many principles of modern computer, any calculation
Store = main memory Mill=ALU barrel = control unit
TABLE 1.2 on Handout – Influences on programming language development
Early Computer programming languages by category
Numerical
WWII 30/40s “electronic calculators” to solve numerical problems
50s symbolic notations/compilation necessary
1955-57 Backus’ team – developed FORTRAN
- numerical calculations
- full-fledged programming language (control structs, cond, I/O statements)
- to compete w/ assembly made very efficient!
- Extremely successful
1958 – Fortran II
Fortran IV
Fortran 77, 90 backwards compatible
Success of FORTRAN -> fear in Europe of domination of IBM
- leader Naur of (German Math Society)
- joined by ACM despite fear
- ALGOL (Algorithmic Language) 58, 60
- Standard in “academia”
- GOALS (4)
- Close to standard math
- Useful to describe algorithm
- Compilable
- Machine independent (no I/O)
- Not successful
- MAJOR IMPACT – syntactic notation BNF
Business Languages
1959 Grace Hopper led development CBL (Common Business Language)
COBOL (Common Business Oriented Language)
Revised in 61, 62, standardized in 68, rev. 74, 84
AI Languages
50s
IPL – Info Processing language by Rand Corp (widely known, but use limited)
John McCarthy of MIT designed LISP (List Processing) for IBM 704 => Scheme and Common Lisp
- list processing FUNCTIONAL Language
- usual problems: searching
text processing => SNOBOL
Prolog – special purpose based on math logic
Systems Languages
Assembly language
CPL, BCPL – not widespread
C – Unix written mostly in C in 1970s
ROLE of Programming Languages
Early: efficient design - computers and time expensive vs programmers minor cost
60s: machines less expensive, programmers more => need portability, maintainability, ease of use
programming languages evolving
COBOL dropping => application generators
APL, PL/1, SNOBOL – practically disappeared
Pascal – past prime, but continued in Ada
Ada – ground lost to C++ and Java
Delphi and C++ Builder
Fortran revised (for supercomputers)
Influences:
- capabilities of computers
- applications: now games, PCs
- programming methods: environment changes, good methods known now
- implementation methods -> effect choices of features
- theory: deepened understanding of strengths and weaknesses
- standards
APP 60s 90s
Business (What if) Cobol Cobol, spreadsheet, C, 4GLs
Scientific Fortran IV Fortran 90, C++
System Assembler C++
AI (searching) Lisp Common Lisp, Prolog, Scheme, DSS
Publishing Tex, WP, postscript
Process unix shell
New paradigms smalltalk, eiffel - OOP
Web Java, Perl
Historical Development of Java
Other references:
http://www.java.com/en/javahistory/index.jsp
http://ils.unc.edu/blaze/java/javahist.html
http://ei.cs.vt.edu/~wwwbtb/book/chap1/java_hist.html
Historical Development of Perl
Other references:
http://www.garybeene.com/perl/prl-hist.htm
http://history.perl.org/PerlTimeline.html
http://www.unix.org.ua/orelly/perl/prog3/ch27_01.htm