CMPT 383 Lecture Notes

  1. Course Introduction [“Course Introduction” slides]
    1. This Course [This Course slides]
    2. Online Offering Strategy [Online Offering Strategy slides]
    3. Topics (1) [Topics (1) slides]
    4. Overall Goals [Overall Goals slides]
    5. Grades [Grades slides]
    6. Weekly Exercises [Weekly Exercises slides]
    7. Assignments [Assignments slides]
    8. Quizzes [Quizzes slides]
    9. Project [Project slides]
    10. References [References slides]
    11. Expectations [Expectations slides]
    12. What is a program? [What is a program? slides]
    13. Imperative Programming [Imperative Programming slides]
    14. Declarative Programming [Declarative Programming slides]
  2. Functional Programming & Haskell [“Functional Programming & Haskell” slides]
    1. Haskell [Haskell slides]
    2. Haskell Basics [Haskell Basics slides]
    3. Haskell Functions [Haskell Functions slides]
    4. Pattern Matching [Pattern Matching slides]
    5. Conditionals [Conditionals slides]
    6. Repetition [Repetition slides]
    7. List Comprehensions [List Comprehensions slides]
    8. Let and Where [Let and Where slides]
    9. Recursion [Recursion slides]
    10. Isn't Recursion Slow? [Isn't Recursion Slow? slides]
    11. Tail Recursion [Tail Recursion slides]
    12. Creating Tail Recursion [Creating Tail Recursion slides]
    13. Aside: C and Tail Recursion [Aside: C and Tail Recursion slides]
  3. Haskell: Types & Functions [“Haskell: Types & Functions” slides]
    1. Functions and Operators [Functions and Operators slides]
    2. Parts of Lists [Parts of Lists slides]
    3. More List Processing [More List Processing slides]
    4. Haskell Types [Haskell Types slides]
    5. Type Classes [Type Classes slides]
    6. Partially-Applied Functions [Partially-Applied Functions slides]
    7. Curried Functions [Curried Functions slides]
    8. Manipulating Functions [Manipulating Functions slides]
    9. Lambda Expressions [Lambda Expressions slides]
  4. Haskell: Expression Evaluation [“Haskell: Expression Evaluation” slides]
    1. Assignment 1 [Assignment 1 slides]
    2. Lazy Evaluation [Lazy Evaluation slides]
    3. Controlling Laziness [Controlling Laziness slides]
    4. Function Application [Function Application slides]
    5. Pure Functions [Pure Functions slides]
    6. Concurrent Programming [Concurrent Programming slides]
    7. Monads [Monads slides]
    8. Monad: Maybe [Monad: Maybe slides]
    9. Monad: Random Numbers [Monad: Random Numbers slides]
    10. Haskell Tips [Haskell Tips slides]
    11. Functional Programming Context [Functional Programming Context slides]
    12. Functional + Imperative [Functional + Imperative slides]
  5. What Do Processors Do? [“What Do Processors Do?” slides]
    1. What Does A Programming Language Do? [What Does A Programming Language Do? slides]
    2. What Does A Compiler Do? [What Does A Compiler Do? slides]
    3. What Do Processors Do? [What Do Processors Do? slides]
    4. Pipelines [Pipelines slides]
    5. SIMD [SIMD slides]
    6. Multiple Cores [Multiple Cores slides]
    7. Memory Cache [Memory Cache slides]
    8. Summary [Summary slides]
  6. Language Implementations [“Language Implementations” slides]
    1. Language Choice [Language Choice slides]
    2. Compilers & Interpreters [Compilers & Interpreters slides]
    3. Virtual Machines [Virtual Machines slides]
    4. Compiler Optimization [Compiler Optimization slides]
    5. Just-In-Time Compilation [Just-In-Time Compilation slides]
    6. Language Implementations [Language Implementations slides]
    7. A Silly Benchmark [A Silly Benchmark slides]
  7. Languages: Types & Memory [“Languages: Types & Memory” slides]
    1. Static/Dynamic Typing [Static/Dynamic Typing slides]
    2. Static/Dynamic Binding [Static/Dynamic Binding slides]
    3. Generics & Polymorphism [Generics & Polymorphism slides]
    4. Type Inference [Type Inference slides]
    5. Duck Typing [Duck Typing slides]
    6. Type Checking [Type Checking slides]
    7. Mutable/Immutable Data [Mutable/Immutable Data slides]
    8. Memory Management [Memory Management slides]
    9. Managing Memory [Managing Memory slides]
    10. Manual Memory Mgmt. [Manual Memory Mgmt. slides]
    11. Garbage Collection [Garbage Collection slides]
    12. Tracking Ownership [Tracking Ownership slides]
    13. First-Class Functions [First-Class Functions slides]
    14. Closures [Closures slides]
    15. Callbacks [Callbacks slides]
    16. Coroutines [Coroutines slides]
    17. Undefined Behaviour [Undefined Behaviour slides]
  8. Languages & Concurrency [“Languages & Concurrency” slides]
    1. Concurrent Programming [Concurrent Programming slides]
    2. Threads & Processes [Threads & Processes slides]
    3. Kernel/User Threads [Kernel/User Threads slides]
    4. Thread Communication [Thread Communication slides]
    5. Language Concurrency [Language Concurrency slides]
    6. Concurrency Tools [Concurrency Tools slides]
  9. Language Productivity [“Language Productivity” slides]
    1. Programmer Efficiency [Programmer Efficiency slides]
    2. Library Availability [Library Availability slides]
    3. High- vs Low-Level [High- vs Low-Level slides]
    4. Programming Paradigm [Programming Paradigm slides]
    5. Language Features [Language Features slides]
  10. Languages: Mixing Languages [“Languages: Mixing Languages” slides]
    1. Foreign Function Calls [Foreign Function Calls slides]
    2. Remote Procedure Calls [Remote Procedure Calls slides]
    3. Summary [Summary slides]
  11. Rust & “Safe” Programming [“Rust & “Safe” Programming” slides]
    1. Ownership [Ownership slides]
    2. Rust [Rust slides]
    3. Variables & Types [Variables & Types slides]
    4. Compound Types [Compound Types slides]
    5. Mutability [Mutability slides]
    6. Control Flow [Control Flow slides]
    7. More Expressions [More Expressions slides]
    8. Functions [Functions slides]
    9. Vectors [Vectors slides]
    10. References [References slides]
    11. Borrowing [Borrowing slides]
    12. Ownership [Ownership slides]
    13. Ownership Rules [Ownership Rules slides]
    14. Moving and Copying [Moving and Copying slides]
    15. Cloning [Cloning slides]
    16. Structs [Structs slides]
    17. Traits [Traits slides]
    18. Generic Types [Generic Types slides]
    19. Core Traits [Core Traits slides]
    20. Errors [Errors slides]
  12. Rust: Concurrency [“Rust: Concurrency” slides]
    1. Threads [Threads slides]
    2. Messages [Messages slides]
    3. More Concurrency Tools [More Concurrency Tools slides]
  13. Rust: Memory Management [“Rust: Memory Management” slides]
    1. Static Binding [Static Binding slides]
    2. Data Structures [Data Structures slides]
    3. The Heap and Box [The Heap and Box slides]
    4. More Smart Pointers [More Smart Pointers slides]
    5. Dynamic Values [Dynamic Values slides]
  14. Rust: Epilogue [“Rust: Epilogue” slides]
    1. The Other Rusts [The Other Rusts slides]
    2. What Is Rust? [What Is Rust? slides]
  15. Logic Programming & Prolog [“Logic Programming & Prolog” slides]
    1. Predicates [Predicates slides]
    2. Rules [Rules slides]
    3. Searching [Searching slides]
    4. Search Limits [Search Limits slides]
    5. Conclusion [Conclusion slides]
    (Not covered in lecture, but slides left for interest.)
  16. Languages Matter [“Languages Matter” slides]
    1. Domain-Specific Languages [Domain-Specific Languages slides]
    2. Domain-Specific Libraries [Domain-Specific Libraries slides]
    3. Languages Don't Matter [Languages Don't Matter slides]
    4. Conclusion [Conclusion slides]

Course home page.

Schedule, Summer 2021

Week Deliverables (*) Lecture Hour Lecture Date First Slide Video Link
1 1 May 13
2 May 13
2 Exer 1 3 May 17
4 May 20
5 May 20
3 Exer 2 6 May 24
7 May 27
8 May 27
4 Exer 3 9 May 31
10 Jun 3
11 Jun 3
5 Exer 4 12 Jun 7
13 Jun 10
14 Jun 10
6 Exer 5, Assign 1 15 Jun 14
16 Jun 17
17 Jun 17
7 Exer 6, Quiz 1 18 Jun 21
19 Jun 24
20 Jun 24
8 Exer 7 21 Jun 28
22 Jul 1
23 Jul 1
9 Assign 2 24 Jul 5
25 Jul 8
26 Jul 8
10 Exer 8, Quiz 2 27 Jul 12
28 Jul 15
29 Jul 15
11 Exer 9 30 Jul 19
31 Jul 22
32 Jul 22
12 Exer 10, Assign 3 33 Jul 26
34 Jul 29
35 Jul 29
13 Quiz 3 36 Aug 2
37 Aug 5
38 Aug 5
14 Project 39 Aug 9

* Check CourSys for the actual due dates and times.