In the course of the semester I will look at how the design of a programming language is connected to the concepts that can be expressed in it and how those are expressed. This will be done through the study of two areas. For each area I will produce a written "report" as evidence of my study.
The first report, due at midterm, will look at connections between object-oriented programming and functional programming. A comparison of the expression of boolean values will be made between the functional (lambda calculus/Scheme/Better Scheme) and object oriented (Java/C++) languages. I will attempt to show that they are expressing the same things but that this similarity is being obscured by differences in expression because of the style of the languages. Other topics I will discuss are the connections between higher order functions and the design patterns (command, strategy and maybe composite).
The second report, due at the end of the semester, will focus on proper expression of design patterns in languages with parametric polymorphism. The language used to study this will be Generic Java (GJ). Emphasis will be placed on the visitor, singleton and state patterns.
To aid in my work, I will put up a small webpage about my topic and the ideas I have generated. This will also be a way for my advisor to assess my progress in addition to my regular meetings with him. Also, in preparation for each report I will write working examples of the topics I am discussing in the language appropriate to the situation. Languages used may include Scheme, Better Scheme, Java and GJ.