The following topics are fair game for the final:
- Readably vs. Writability vs. Maintainability
- Programming language paradigms (focus on imperative vs. functional)
- Syntax
- BNF
- Operator precedence
- Memory allocation
- Heap
- Stack
- Garbage collection
- Scope
- Names and bindings
- Information hiding
- Static scope
- Declaration scope
- Modules
- Dynamic scope
- Aliases
- Overloading
- Types
- Views of types (definitions)
- Classes and kinds of types / their properties
- Boxing/unboxing
- Type conversion
- Type equivalence
- Type compatibility
- Determining types (type inference)
- Programming language features
- Cons cells
- Pointers
- Data-is-code-is-data
- Control structures
- Object Oriented Programming
- Class vs. instance variables/methods
- Multiple inheritance (incl. diamond problem and solutions to it)
- Mixins and traits
- Information hiding
- Scripting Languages + DSLs
- What characterizes them?
- Turing completeness of DSLs
Questions about what code does are fair game in:
- Java
- C
- Clojure
- Haskell
- Prolog
- Python
- Pseudocode styles as used in class
You should be sure that you can do any of the kinds of tasks we worked out together in class.