This is the course project for MOOC Programming Languages, offered by University of Washington
-
Section 1 (Standard ML):
- SML Functions
- Pairs, tuples and lists
- Let expressions
- Local variables, nested functions
- Options
- Boolean and comparison operators
-
Section 2 (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
-
Section 3 (Standard ML):
- Anonymous functions
- Lexical scope and closures
- Currying
- Mutable references
- Callbacks
- Use closures in OOP (Java) and procedual languages (C)
-
Section 4 (Standard ML):
- Type inferencing
- Mutual recursion
- SML module systems
- Signatures
- Implementing ADTs with signatures and modules
- Equivalent functions
-
Section 5 (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
-
Section 6 (Racket):
- Datatype programming in Racket
- Implementing programming languages
- Intepreter assumptions
- Implementing variables and closures
-
Section 7 (Racket):
- Static typing v.s. dynamic typing
- Weak typing
- The soundness and completeness of a type system, undecidability
-
Section 8 (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
-
Section 9 (Ruby):
- OOP v.s. functional decomposition
- Adding methods or variants
- Double dispatch
- Multiple inheritance
- Mixins
- Interfaces
- Abstract Methods
-
Section 10 (Ruby):
- Subtyping
- Depth subtyping
- Function subtyping
- Suptyping and OOP
- Subtyping v.s. generics
- Bounded polymorphism