CSE 341 -- Why?
Besides a good introduction to a number of novel programming paradigms,
CSE 341 intends to introduce you to a number of important concepts
related to programming language design.
What follows is a whirlwind tour of some of the concepts/topics we'll
touch on throughout the quarter.
Control Abstractions
By the end of the course you
should be comfortable with most of the following vocabulary.
- Primitives
- If, case, while, for, etc.
- Procedural Abstraction
- A group of statements that acts like a single statement
- Functional Abstraction
- Code that acts like an expression
- Recursion
- Functions that call themselves.
- Parameter passing techniques
- Call-by: value, result, value-result, reference, name.
More here.
- Higher order functions
- Functions as first-class citizens: functions as data which
can be dynamically created, passed around, invoked
- Message dispatch in object oriented languages
- Function call == selecting proper code to invoke based upon class of receiver(s)
- Others
- Parallelism, exceptions, iterators, concurrency
Data Abstractions
- Primitives
- atomic data types: numbers, characters, booleans
- constructors: arrays, records, unions, pointers
- functions as data
- User defined data types (ADTs)
-
- extend the built in types
- user-defined operations on that type
- encapsulate/hide implementation
- modules/packages
- Objects
- Inheritance organizes implementation of ADTs
- message dispatching
- conceptual bundling of code and data into single unit
Memory organization
Static, stacks, heaps, garbage collection.
More here.
Types
- Static vs. Dynamic type checking
- Strongly vs. weakly typed.
- Polymorphic types.
- Type inference.
Scoping
Static (lexical) vs. dynamic scoping. More here.