New Building Website

CSA 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: CSA 274 or equivalent.

Course Objectives:

  • To introduce the fundamental concepts of a variety of programming language families.
  • To present the historical perspective of programming language development to differentiate the myths, facts, and folklore that abound concerning programming languages.
  • To introduce proposed criteria for the evaluation of programming languages
  • To introduce various methods for the specification of programming languages.
  • To acquaint students with the primary literature on the above topics. 

Learning Outcomes:

CSA465.1:  To identify, describe, and compare programming language paradigms and the review the evolution of programming languages
CSA465.1.1      Summarize the evolution of programming languages illustrating how this history has led to the paradigms available today.
CSA465.1.2      Identify at least one distinguishing characteristic for each of the programming paradigms: procedural, object-oriented, functional, declarative (non-algorithmic languages), scripting languages.
CSA465.1.3      Enumerate and explain programming language concepts that reach across the language categories.
CSA465.1.4      Program a software application using a language in each of the programming paradigms: procedural, object-oriented, functional, declarative (non-algorithmic languages), scripting languages.
CSA465.1.5      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.
CSA465.1.6      Distinguish between programming-in-the-small and programming-in-the-large. 

CSA465.2:        To describe the concept and functions of virtual machines
CSA465.2.1      Describe the importance and power of abstraction in the context of virtual machines.
CSA465.2.2      Explain the benefits of intermediate languages in the compilation process.
CSA465.2.3      Evaluate the tradeoffs in performance vs. portability.
CSA465.2.4      Explain how executable programs can breach computer system security by accessing disk files and memory. 

CSA465.3:        To identify basic concepts in the language translation process
CSA465.3.1      Compare and contract compiled and interpreted execution models, outlining the relative merits of each.
CSA465.3.2      Describe the phases of program translation from source code to executable code and the files produced by these phases.
CSA465.3.3      Explain the differences between machine-dependent and machine-independent translation and where these differences are evident in the translation process.     

CSA465.4:        Do describe and compare approaches to declarations and types    
CSA465.4.1      Explain the value of declaration models, especially with respect to programming-in-the-large.
CSA465.4.2      Identify and describe the properties of a variable such as its associated address, value, scope, persistence, and size.
CSA465.4.3      Discuss type incompatibility.
CSA465.4.4      Demonstrate different forms of binding, visibility, scoping, and lifetime management.
CSA465.4.5      Defend the importance of types and type-checking in providing abstraction and safety.
CSA465.4.6      Evaluate tradeoffs in lifetime management (reference counting vs. garbage collection). 

CSA465.5:       Describe abstraction methods and their implementation in a language
CSA465.5.1     Explain how abstraction mechanisms support the creation of reusable software components.
CSA465.5.2     Demonstrate the difference between call-by-value and call-by-reference parameter passing.
CSA465.5.3     Defend the importance of abstractions, especially with respect to programming-in-the-large.
CSA465.5.4      Describe how the computer system uses activation records to manage program modules and their data.

CSA465.6:        To explain the philosophy of object-oriented programming and to implement and test applications using an object-oriented language.
CSA465.6.1      Justify the philosophy of object-oriented design and the concepts of encapsulation, abstraction, inheritance, and polymorphism.
CSA465.6.2      Describe how the class mechanism supports encapsulation and information hiding.
CSA465.6.3      Design, implement, and test the implementation of “is-a” relationships among objects using a class hierarchy and inheritance.
CSA465.6.4      Compare and contrast the notions of overloading and overriding methods in an object-oriented language.

CSA465.7:  To apply specify programming language language syntax and semantics
CSA465.7.1      The student will specify selected features of programming language syntax using standard grammatical notations.
CSA465.7.2      The student will specify selected features of programming language semantics using standard informal methods for such specification.

Graduate students:

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