Programming Language Classification

Below is a table that shows some popular and emerging programming languages classified according to the following:

  • Type system – Dynamic or Static type system
  • Problem space – A General Purpose language versus a Domain Specific Language
  • Runtime environment – A Managed environment (ie. garbage collection, etc.) or an Unmanaged environment.
  • Paradigm – Object-Oriented, Procedural, Functional, Imperative, or Declarative

Is this a relevant classification scheme? Are languages classified correctly? Are certain qualified languages missing from the list? How would you modify this list?

11 thoughts on “Programming Language Classification

  1. Apple’s Objective-C 2.0 ads memory management. I believe Smalltalk has always managed its own memory space.

  2. 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.

  3. 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).

  4. 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.

Leave a Reply

Your email address will not be published.