CS 541 Lecture -*- Outline -*- * Basic concepts in programming langauges ** Discussion of questionnaire ** Different kinds of semantics differences shown in semantics of while or recursion Operational (meaning is a translation, e.g., rewrite rules) Fixed-point (or denotational) (meaning is a map on states) Axiomatic (meaning is a predicate transformer) Algebraic (meaning is an object in an algebra) ** Historical survey of developments in programming langauges *** FORTRAN organization: declarations vs. control flow vs. I/O subprograms, compilation (separate), linking, loading. *** LISP recursion, short-circuit evaluation, closures, dynamic scoping (a mistake corrected later) *** Algol 60 environment (scope, block, compound stmt), contour diagrams, static scoping, static type checking, semidynamic arrays, *** Algol 68 coercions, user-defined types, reference types, dynamic arrays *** Data abstraction (Simula 67, CLU) abstract data types, enforcement by type checking (up and down in CLU) relation to design concerns strong type checking modules, export, import opaque types *** Object-oriented (Simula 67, Smalltalk) objects and message passing inheritance *** Logic-oriented (Prolog) programming with Horn clauses backtracking, logical variables, unification ** Taxonomy of paradigms (styles of programming) *** algorithmic (procedural) **** imperative ***** data abstraction ***** object-oriented **** applicative (no mutation or assignment) ***** functional (first-class functions) *** declarative **** logic-oriented **** rewriting