Course website:https://homes.cs.washington.edu/~djg/
https://www.coursera.org/learn/programming-languages
-
Part A Week 2(Standard ML):
- SML Functions
- Pairs, tuples and lists
- Let expressions
- Local variables, nested functions
- Options
- Boolean and comparison operators
-
Part A Week 3(Standard ML):
- Compound types: records and tuples
- Concept of "Syntatic Sugar"
- Datatype bindings and case expressions
- Pattern Matching
- Type synonyms
- Polymorphic datatypes
- Nested patterns
- Tail recursions
- Exceptions
-
Part A Week 4(Standard ML):
- Anonymous functions
- Lexical scope and closures
- Currying
- Mutable references
- Callbacks
- Mutation via ML References
- Use closures in OOP (Java) and procedual languages (C)
-
Part A Week 5(Standard ML):
- Type inferencing
- Mutual recursion
- SML module systems
- Signatures
- Implementing ADTs with signatures and modules
- Equivalence
-
Part B Week 1(Racket):
- Racket definitions, functions and conditionals
- Racket lists
- Dynamic typing
- Local and top-level bindings
- Mutation
- Delayed evaluation and thunks
- Streams use and definition
- Memoization
- Macros: The Key Points
-
Part B Week 2(Racket):
- Datatype programming in Racket
- Implementing programming languages
- Intepreter assumptions
- Implementing variables and closures
-
Part B Week 3(Racket):
- Static typing v.s. dynamic typing
- Weak typing
- The soundness and completeness of a type system, undecidability
- eval and quote
-
Part C Week 1(Ruby):
- Ruby syntax, semantics and scopes
- Rules of Ruby OOP:
- Everything is an object
- Object states, class variables, class constants, class methods
- Visibility
- Class definitions are dynamic
- Duck typing
- Subclassing and overriding
- Dynamic Dispatch
- Arrays, Hashes and Ranges
- Blocks and procs
-
Part C Week 2(Ruby):
- OOP v.s. functional decomposition
- Adding methods or variants
- Double dispatch
- Multiple inheritance
- Mixins
- Interfaces
- Abstract Methods
-
Part C Week 3(Ruby):
- Subtyping
- Depth subtyping
- Function subtyping
- Suptyping and OOP
- Subtyping v.s. generics
- Bounded polymorphism