Topic Outline
(still under construction)
- Formally defining practical programming languages
- Store/environments
- single-assignment/dataflow
- value
- trigger
- mutable
- Declarative kernel concepts
- value creation
- partial values
- types (set of values plus set of operations)
- basic: numbers, records, closures (procedures which may have external references)
- dynamic type checking
- variable creation
- variable-variable binding
- empty statement
- sequence of statements
- conditional
- pattern matching
- procedure application
- Abstract machine
- concepts:
- environments
- semantic statement
- statement stack
- execution state (env + stack)
- computation (sequence of states)
- program execution
- changes to environments
- activation condition
- Memory management
- last call optimization (including techniques that dataflow variables offer)
- memory life cycle/garbage collection
- programmer responsibilities
- avoiding memory leaks
- managing external resources
- Translating full language to kernel language
- syntactic conveniences
- linguistic abstractions
- interactive interface (declare statement)
- Exceptions
- Unification
- Declarative programming techniques
- Recursion
- as iteration
- over integers, lists, and trees
- using accumulators and invariants
- using local procedures
- control abstractions
- type-directed program design
- difference lists
- Higher-order programming
- Procedure abstraction and nestability
- Genericity (passing a procedure as an argument)
- Map, ForAll, Filter, Fold, Some/All
- Instantiation (returning a procedure)
- Embedding
- explicit lazy evaluation, modules, components
- Abstract data types
- declarative implementation alternatives
- security
- wrapping/unwrapping, futures, names
- functors
- Declarative concurrency
- Lazy execution (with or without concurrency)
- Soft real-time programming
- Message-passing concurrency
- Explicit state (cells)
- Objects
- Relational Programming
- Specialized Computation Models