Syntax of programming languages: regular expressions, finite automata, context-free grammars, parsing. Scoping, binding, parameter passing, exception handling. Declarative programming languages. Typing, polymorphism. Runtime systems: dynamic loading, byte-code verification, security managers, garbage collection, versioning.
Programming paradigms and language concepts: functional programming; comparison of object-oriented languages; type systems for functional and object-oriented languages; runtime systems for functional and objectoriented languages. A variety of programming languages will be used to illustrate concepts, e.g., C, C++, Haskell, JavaScript, Ruby, Rust, Scala, Scheme.