My Stuff

2010 Conferences

OSGi DevCon @ JAX London

February 23 - Keynote titled OSGi in the Enterprise: Agility, Modularity, and Architecture’s Paradox

EclipseCon

March 22 - 25 - Tutorial on Modular Architecture

Tweets @ Twitter

Why must I be logged in to Google to simply view the #nexusone http://www.google.com/phone... They wanna know what I'm looking at? #odd 4 days ago

RT @nhajratw enlightening and surprising post on #lean swdev at #toyota http://bit.ly/cmgGAp #agile 5 days ago

Whoa... Just had major epiphany. Big lightbulb just came on. Blog post to follow soon. 5 days ago

#apple selling 25,000 iPads per hour. http://bit.ly/bpgr3R 1 week ago

Cost of U.S. Census http://bit.ly/9AsimE Let me help. Select COUNT(distinct id) from the_people; I'll take my 14 billion now! 1 week ago

LinkedIn Profile

The opinions expressed on this site are my own, and not necessarily those of my employer.

Programming Language Classification

Filed Under Development, Platforms, Technology |  

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?

Comments

9 Responses to “Programming Language Classification”

  1. Eric Jablow on March 30th, 2009 7:18 pm

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

  2. Adam Gent on April 3rd, 2009 12:38 pm

    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. Chuck Norris on September 13th, 2009 1:37 am

    I kind of like optional typing.

  4. thom on October 1st, 2009 9:17 am

    Why is Smalltalk marked as unmanaged?

  5. Loup Vaillant on October 1st, 2009 10:04 am

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

  6. Jonas Elfström on October 1st, 2009 10:28 am

    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.

  7. okkiefun on October 1st, 2009 10:29 am

    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.

  8. Edward on October 1st, 2009 11:33 am

    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

  9. Levi on October 1st, 2009 1:56 pm

    Sort the list by alpha

Leave a Reply