Skip to content

bugczw/programming-languages

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Coursera: Programming Languages, UW, CSE341

Course website:https://homes.cs.washington.edu/~djg/

https://www.coursera.org/learn/programming-languages

The content of this course includes:

  1. Part A Week 2(Standard ML):

    • SML Functions
    • Pairs, tuples and lists
    • Let expressions
    • Local variables, nested functions
    • Options
    • Boolean and comparison operators
  2. 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
  3. 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)
  4. Part A Week 5(Standard ML):

    • Type inferencing
    • Mutual recursion
    • SML module systems
    • Signatures
    • Implementing ADTs with signatures and modules
    • Equivalence
  5. 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
  6. Part B Week 2(Racket):

    • Datatype programming in Racket
    • Implementing programming languages
    • Intepreter assumptions
    • Implementing variables and closures
  7. 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
  8. 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
  9. Part C Week 2(Ruby):

    • OOP v.s. functional decomposition
    • Adding methods or variants
    • Double dispatch
    • Multiple inheritance
    • Mixins
    • Interfaces
    • Abstract Methods
  10. Part C Week 3(Ruby):

    • Subtyping
    • Depth subtyping
    • Function subtyping
    • Suptyping and OOP
    • Subtyping v.s. generics
    • Bounded polymorphism