CS334 Principles of Programming Languages
Lecture 1
Dan Norcross is TA - will arrange for a few evening hours when learning a new
language.
Does the language matter?
Absolutely!!!
Otherwise, why would the Java folks have rejected C++ for their
programming language?
Explore in this course all aspects of programming languages, including their
features, type systems, programming styles supported, and implementations.
Programming languages mediate between computers and humans, allowing us to
express or understand algorithms to be executed by the computer.
By providing abstractions (or mechanisms to create abstractions) they influence
the way we think about problems.
Data abstractions:
Control abstractions:
For all constructs need to have clearly specified syntax and semantics:
Syntax always given formally (as well as informally).
Semantics usually given informally (English), but more and more formally.
Both necessary in order to ensure programs give predictable results.
How can programming languages support the software development process?
Phases in the development process are:
Need to evaluate languages with respect to overall picture. Not good if just
supports one aspect. Important to evaluate language based on what its goals
are. I.e.,
Languages which are good for quick hacking together of programs may not be
suitable for large-scale software development.
Ada, Modula-2, Clu, object-oriented languages like C++, Eiffel, etc.
Most languages today designed to support specific software development
methodology or philosophy. E.g., top-down design, object-based design,
encapsulation, information-hiding.
Languages influence the way people think about programming process.
Faculty always complain about BASIC hackers.
Important to be aware of different programming language paradigms, allow one to
think about problems in different ways.
Partially driven by new architectures (or at least not constrained by old).
Imperative is closest to machine architecture.
Other paradigms:
Minimum requirements for programming languages:
History of Programming Languages
Machine language -> Assembly language -> High-level languages
Programmers: Single highly trained programmer -> large teams which must
cooperate
Early:
Early Schisms:
Consolidation:
Next Leap Forward:
Abstract Data Types:
Other paradigms:
Family tree of important programming languages
Topics to be covered in course:
Start out by learning ML so can explore some new ideas & rapidly program
interesting applications.
Write our own interpreters for simple languages so can see impact of various
design decisions.