Below is a table that shows some popular and emerging programming languages classified according to the following:
Is this a relevant classification scheme? Are languages classified correctly? Are certain qualified languages missing from the list? How would you modify this list?

9 Responses to “Programming Language Classification”
Leave a Reply
Apple’s Objective-C 2.0 ads memory management. I believe Smalltalk has always managed its own memory space.
For the type system I think you should have a 3rd option of “optional/both”. Groovy, Dylan, Objective C (iirc), VB.NET and ActionScript (ala latest javascript) have optional typing.
I kind of like optional typing. In my top level api methods I provide typing but my private and methods I use dynamic typing.
I kind of like optional typing.
Why is Smalltalk marked as unmanaged?
It misses some languages: Haskell (purely functionnal, non-strict), Forth and Joy and Factor (concatenative languages based on stacks). You also may want to add ML (or Ocaml), the language F# is based on.
Your categorization of type systems is too crude. For instance, static types systems can easily be divided between explicit ones (Java, C#, C, C++…) and infered ones, (F#, Ocaml, Haskell). This is important because current type inference as found in these languages gives you genericity for free.
What do you mean by “imperative”? As I understand it, every OO language is imperative, and every procedural language is imperative. On the other hand, I’d hardly call any functionnal language “imperative”. Many _can_ do imperative programming, but this isn’t the main paradigm. (In this respect F# and Closure are just functionnal).
You could argue that JavaScript also is Functional.
http://stackoverflow.com/questions/145053/javascript-as-a-functional-language
Some like to call Ruby a dynamic strongly typed language and C a static weakly typed language.
I agree with Loup Vaillant. Let’s not forget a series of languages that have other peculiarities as well. For example C++ has another “language” in it with the templates system. C++ Template metaprogramming can be classified as pure, non strict, untyped functional programming. Notice the word untyped. With the advent of C++1x (whenever that comes) you will be having lambdas within the language as well instead of using a third party library for them. I would also like to add that C++ is not exactly “OOP” but “OOP - friendly”, which is kind of far reaching.
I can apply the argument to other languages as well. Perhaps your classification should be based initially on a multiparadigm / monoparadigm bisection, because without that, it is kind of incomplete.
Finally, another thing to think about is whether side effects are allowed or not, depending on the multiparadigm allowance of the language (you can program without side - effects but also with side - effects in Scala”.
Just my opinion of course.
PHP is object oriented! As of PHP5 it supports abstract classes, interfaces, visibility modifiers (public, private, protected) and inheritance. In PHP4 a simplified object model was available.
See, for example: http://us2.php.net/manual/en/language.oop5.abstract.php
Sort the list by alpha