CSE 465/565 Comparative Programming Languages (3 credits)

Typically offered during the spring semester.

Catalog Description:

Survey of programming languages and their accompanying paradigms. Basic principles of syntax, semantics, implementation, and pragmatics are addressed. The survey will include representatives from the families of imperative languages, functional languages, logic languages, and hybrid languages. Formal methods of definition and specification are introduced.

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.