Expose the student to an analytic and comparative way of looking at programming languages and their implementation.
Basic concepts in design and use of programming languages, including abstraction, modularity, control mechanisms, types, declarations, syntax, and semantics. Study of several different language paradigms, including functional, object-oriented, and logic programming.
- OCaml
- Java
- Prolog
- Scheme
- Python
- Kotlin
- H1 (OCaml) - Fixpoints and grammar filters
- OCaml warmup -- writing simple functions on sets (e.g. subset, union, intersection, etc.)
- H2 (OCaml) - Naive parsing of context-free grammars
- Simple parser generator of a context-free grammar
- H3 (Java) - Java shared memory performance races
- Deep dive into multi-threading and synchronization issues in Java
- H4 (Prolog) - Towers solver
- Solver of an arithmetical-logical puzzle known as Towers
- H5 (Scheme) - Scheme code difference analyzer
- Generates diff summary given two pieces of text
- Project (Python) - Proxy herd with asyncio
- Herd of servers that communicate amongst each other as well as a large number of clients asynchronously
- H6 (Kotlin) - Language bindings for TensorFlow
- Comparison of Java, OCaml, and Kotlin in terms of programming flexibility, generality, performance, and reliability