Course review
We've discussed representatives from five "families" of languages:
Imperative: Scheme Object-oriented: Java, Smalltalk Functional: Miranda, functional subset of Scheme Logic: CLP(R) Scripting: Perl What are some themes that cut across all these languages? Here's a short list (there are many more, obviously).
- Types
- The type system of a language determines the way the language is used at the most fundamental level. Compare the type systems of Scheme, Miranda, Java, and Smalltalk.
- Decomposition and composition
- There is only one tool programmers have to deal with complex problems: divide and conquer (---Stroustrup). How do we break down problems in object-oriented, CLP, and functional languages?
- Syntax
- It's important to see past syntax to the underlying concepts. Still, consider the different syntactic choices made by (e.g.) Scheme, Miranda, and Java, and how they affect the languages' "feel".
- Regularity vs. convenience
- Often there is a tension between making a language consistent and providing convenient features. For example, Scheme (and to a lesser extent Miranda) is very consistent, but sometimes the regularity makes common tasks difficult. Perl takes the opposite approach by being entirely irregular in order to make its usage more convenient for people who know it well.
- Procedures vs. data
- Some languages (notably object-oriented languages) are "data-centric". Others (like Miranda) are "function-centric". Some languages, like Scheme and many scripting languages, blur the distinction between procedures and data.