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