CS 671: Programming Language Concepts and Features
(Coordinator: Michel Charpentier)
Explores the main features of modern, high-level, general purpose programming languages from the user (programmer) point of view. Provides students with an opportunity to use non-imperative programming paradigms, such as object-oriented, functional, and logical, and to learn how specific features of such languages can be used efficiently in solving programming problems. Prereq: CS520.
Course Topics and Student Outcomes
Programming languages concepts and features.
Object-oriented patterns, functional patterns, concurrent patterns.
Five programming assignments (50%), multiple quizzes (30%) and one exam (20%).
Basic syntax and semantics:
- values, expressions, primitive types, variables
- conditionals, loops, exceptions, iteration, pattern-matching
- objects, methods, functions, parameters, types
- infix operators, string interpolation
Intermediate syntax and semantics:
- modules, packages, imports, collections
- annotations, assertions
- generics, type inference
- variable-length arguments, default values, pass-by-name arguments
Advanced syntax and semantics:
- implicit parameters, implicit conversions
- user-defined pattern-matching
- type bounds, covariance and contravariance
- domain specific languages
- self-types and collections design
- classes, objects, singletons
- interfaces, traits, inheritance, overriding, abstract members
- polymorphism, dynamic binding, mixins, nominal and structural subtyping
- equality, serialization, mutability
- recursion, tail recursion, memoization, dynamic programming
- first-class functions, function literals, higher-order functions, currying, closures
- lazy evaluation
- threads, synchronization
- thread pools, futures, actors
- Martin Odersky, Lex Spoon and Bill Venners. Programming in Scala, 3rd edition, Artima Press, 2016. ISBN: 978-0-9815316-8-7.