CSE 465/565 Comparative Programming Languages (3 credits)

Typically offered during the spring semester.

Catalog Description:

Comparative Programming Languages looks at a variety of languages and programming paradigms and examines the relationship between the two. In order to properly conduct such an examination, we will study the fundamental principles of programming language design, description, and implementation. More specifically, we shall study selected languages from the families of imperative languages, functional languages, and logic programming languages as well as some languages that do not fit neatly into any such family. In each case, the emphasis will be on the associated design/implementation paradigms that are supported by the language of focus. Finally, we shall examine some possible theoretical and operational models for defining the semantics of certain programming languages.

Prerequisite:

 CSE 274 or equivalent.

Required topics (approximate weeks allocated):

  • Introduction and overview (1)
  • History, taxonomy and terminology (1)
  • Describing syntax (1)
  • Describing semantics (1)
  • Data abstraction (2)
  • Expressions (1)
  • Types (1)
  • Modules (1)
  • Scripting Languages (1)
    • Perl
  • Imperative languages (1)
    • FORTRAN
  • Functional languages (2)
    • Scheme
  • Logic languages (2)
    • Prolog

Graduate students:

Students enrolled in CSE 565 will be given additional readings and/or assignments.

Learning Outcomes:

1: Identify, describe, and compare programming language paradigms and their evolution.

1.1: Identify at least one distinguishing characteristic for each of the programming paradigms: procedural, object-oriented, functional, declarative/logic , and scripting languages.

1.2: Evaluate the tradeoffs between the different paradigms, considering such issues as space efficiency, time efficiency (of both the computer and the programmer), safety, and power of expression.

2: Apply different programming paradigms.

2.1: Program software using a language in each of the programming paradigms: procedural, object-oriented, functional, declarative/logic, scripting languages.

3: Identify basic concepts in the language translation process

3.1: Compare and contrast compiled and interpreted execution models, outlining the relative merits of each.

3.2: Describe the phases of program translation from source code to executable code and the files produced by these phases.

4: Describe and compare approaches to the facilities present in modern programming languages.

4.1: Identify and describe the properties of a variable such as its associated address, value, scope, persistence, and size.

4.2: Evaluate tradeoffs in lifetime management (e.g., reference counting vs. garbage collection).

4.3 Describe and use a wide variety of control structures to solve programming problems.

4.4 Describe the OOP facilities provided in several different languages.

5: Describe, use, and implement procedure calls.

5.1: Demonstrate the difference between call-by- value, call-by- value/result, call-by- reference and call by name parameter passing.

5.2: Describe how the runtime system uses activation records to manage program modules and their data.

5.3 Describe the run-time structures used to support polymorphic function calls.

6: Specify programming language syntax and semantics.

6.1: Specify selected features of programming language syntax using standard grammatical notations.

6.2: Specify selected features of programming language semantics using operational semantics, denotational semantics, and axiomatic semantics.