54-473 Programming Languages
Topics and terms to study for final

Description
Become familiar with declarative and imperative paradigms, and be able to classify most popular languages according to the applicable paradigm. Cite reasons for studying comparative programming languages.
  • Imperative paradigm (facilitate computation by state changes): 
    • block structured languages(partitions state into bleocks representing subroutines and common data) : Ada, ALGOL, Pascal, C
    • Object-based (support interacting objects) : Ada, C++, Smalltalk
    • Distributed Programming(more than one CPU or process operating simultaneously or in parallel): Ada, Linda, Occam
  • Declarative paradigm(program specifies a relation or function):
    • Logic Programming (based on subset of predicate calculaus to derive new facts from other facts): Prolog
    • Functional paradigm(operates only through functions): Lisp, Haskell, ML
    • Database language paradigm(deal with databases and persistence):sql, dara modeling languages 
Describe the history of the development of one programming language.
Trace the ancestry of currently used languages. Recognize the features contributed to current languages by older languages and become familiar with the developers of significant languages and paradigms.
Use and create BNF grammars and syntax diagrams to generate and recognize language constructs. Draw parse trees for expressions and statements to assure syntax correctness. 
Produce BNF grammars for expressions showing associativity and precedence, drawing of parse trees given grammars. 
Define tools for describing semantics: operational, axiomatic and denotational. Find weakest precondition for assignment statements, logical pretest loops through use of loop invariant.
Finding of weakest precondition, loop invariant
Discuss fundamental semantic issues of variables, and binding times 
    static variables 
    stack-dynamic variables 
    explicit heap-dynamic variables 
    implicit heap-dynamic variables
Coercion 
Strong-typing 
Declarations 

elaboration 
initialization 
referencing environment 
manifest constant 
static vs. dynmaic scoping 
aliases 
 

pointer variables issues 
    allocation 
    deallocation 
    dangling pointers 
    dangling references 
    tombstones 
    garbage collection
See  exam #1  and  exam #2 review for specifics.
Characteristics and implementation issues surrounding user-defined types, arrays, records, etc. 
array component selection mechanisms 
variant records 
Precedence, evaluation order, associativty, complex assignment statements(multiple target, multiple targets, conditional targets), 
short circuit evaluation 
 Basic characteristics of Prolog -- list structures, rules, facts, goals, resolution, list structures, and cut  Cite applications for Prolog.
Introduction to pure LISP, function evaluation, s-expressions, car, cdr, cons. Function defintion with cond and recursion as control mechanism 
Function form 
Lambda binding 
 
Discussion of control mechanisms for selection and repetition. Including implementation issues. 
Distinction between procedures and functions, flat files, parameter passing techniques--call be reference, call by value, call by value result, and call by name. 
 "GOTO Considered Harmful" from CACM, Sebesta Ch. 8
Discussion of activation records. How storage allocation differs between single activiation records and multiple ar's.
Elements of Object-oriented languages. 
    Inheritance, polymorphism, encapsulation, information hiding, interacting objects 
    class, method, message, object
Characteristics of Concurrency. 
    deadlock 
    SIMD 
    MIMD 
    recursion 
    shared memory versus non-communicating 
    cooperation vs. competition 
    semaphore, monitor
    Java thread example use
Discussion of built in features for exception handling. 
    propogation 
    languages which support
    try .. catch in C++ and Java