In this course we will explore a variety of programming languages to broaden your perspectives.
General Learning Objectives
You should be able to:- Recognize and explain the difference between static and dynamic, compile-time and run-time.
- Recognize and explain the different kinds of type systems: untyped, dynamically-typed, and statically-typed, as well as strength of a type system.
- Recognize and explain the components of program analysis: scanning, parsing, semantic analysis, and the limitations of each.
- Recognize and explain the pragmatic issues of a programming language: various types of interpreters, JIT, native-compilers, garbage collectors
- Recognize and explain the simplicity issues of a programming language: grammar size, class/module library
- Recognize and explain the orthogonality issues of a programming language: special syntax forms, special datatypes
- Recognize and explain the extensibility issues of a programming language
General Language Learning Objectives
For all of the languages we covered (Smalltalk, Elixir, Haskell, Rust), plus C and Java, you should be able to:- Recognize code in the language
- Recognize and describe the type system
- Recognize and describe the precedence rules for expressions, including conversion to/from Abstract Syntax Trees
- Recognize and describe the evaluative characteristics of the language: simplicity, orthogonality, and extensibility
- Write code to define a function/method
- Write code to conditionally evaluate expressions/statements
- Write code to loop/recurse
- Write code to create and manipulate the default collection for the language
- Trace the execution of a simple (10-20 line) program and recognize the results.
- Write the code to implement a simple algorithm described in abstract terms (5-15 lines)
- Be able to understand and/or code a simple program with objects/functions/blocks as parameters
Smalltalk
In addition to the above, you should be able to:- Use and recognize the object-oriented paradigm
- Use and recognize the classes:
OrderedCollection Point
- Use and recognize the methods:
ifTrue: ifTrue:ifFalse: whileTrue: collect: select: inject:into:
- The default collections would be
OrderedCollection
orArray
although most collections have the same interfaces
Elixir
In addition to the above, you should be able to:- Use and recognize tuples, lists, list comprehensions
- Use and recognize patterns and matching
- Use and recognize the functional paradigm
- The default collections would be lists and tuples.
- Be able to create processes and send/receive messages
Haskell
In addition to the above, you should be able to:- Use and recognize tuples, lists, list comprehensions
- Use and recognize patterns
- Use and recognize the functional paradigm
- The default collections would be lists and tuples.
- Be able to do type inference on fairly simple functions
Rust
In addition to the above, you should be able to:- Use and recognize traits, structs, and iterators
- Use and recognize the imperative paradigm
- The default collections would be
Vec
and slices. - Be able to do type inference on fairly simple functions