2010-12-01

Proliferation of Computing Languages

Perm url with updates: http://xahlee.org/UnixResource_dir/writ/new_langs.html

Proliferation of Computing Languages

Xah Lee, 2008-07, 2008-11, 2010-01-26

There is a proliferation of computer languages today like never before. In this page, i list some of them.

In the following, i try to list some of the langs that are created after 2000, or become very active after 2000.

Lisp family or similar:

  • Mathematica. Computer algebra system background. Used mostly for math and research in science community.
  • newLISP. Lisp scripting style. Verdant community of new generation of hobbyist programers.
  • Arc. Paul Graham squeezing juice out of his celebrity status.
  • Qi. Common Lisp added with modern functional lang features. Primarily academic and language research.
  • Clojure. A new lisp dialect on Java platform. Poised as the next industrial lisp, but faces serious competition with other JVM based langs such as Scalar, Groovy.
  • Scheme, notably PLT Scheme. Used mostly for teaching.
  • (Dead. Dylan. Apple's re-invention of lisp for industrial programers, active in the 1990s.)

ML Family:

  • OCaml. Almost all current theorem proofing systems are based on.
  • Alice. Concurrent, ML derivative. Saarland University, Germany.
  • F#. Microsoft's offer, based on OCaml.

ML/OCaml derived Proof systems in industrial use:

Modern Functional langs:

  • Erlang. Functional, concurrent. Mostly used in a telecomunication industry for corcurrency and continuous up-time features.
  • Haskell Oldish, classic functional lang. Mostly used in academia for teaching and lang research.
  • Mercury. Logic, functional.
  • Q. Functional lang, based on term rewriting. Replaced by Pure.
  • Oz. Concurrent. Multiparadigm. Mostly used in teaching.

Perl Family or derivative:

  • PHP. Perl derivative for server side web apps. One of the top 5 most popular langs.
  • Ruby. Perl with rectified syntax and semantics. Somewhat used in industry. User numbers probably less than 5% of Perl or Python.
  • Perl6. Next generation of perl. In alpha stage.
  • Sleep. A scripting lang, perl syntax. On Java platform. sleep.dashnine.org/

On Java Virtual Machine:

  • Scala. A FP+OOP lang on Java platform as a Java alternative.
  • Groovy. Scritping lang on Java platform.

C derivatives:

  • ObjectiveC. Strict superset of C. Used as the primary language by Apple for OS X app dev.
  • C#. Microsoft's answer to Java. Quickly becoming top 10 lang with Microsoft's “.NET” architecture.
  • D. Clean up of C++.
  • Go. Google's new lang as improvement of C.

2D graphics related.

  • Scratch. Derived from SmallTalk + Logo. Primarily for teaching children programing.
  • ActionScript. Based on Javascript but for interactive 2D graphics. Quickly becomes top 10 lang due to popularity of Adobe Flash.
  • Processing. 2D graphics on Java platform. Primarily used for art and teaching.

Misc:

  • JavaScript. Mostly for web browser scripting. One of the top 10 most popular lang. Quickly becoming the standard lang for general purpose scripting. (used by Adobe Flash, Dashboard Widgets, scripting Adobe PDF files, scripting Microsoft Windows, scripting Java)
  • PowerShell. A modern shell. A scripting lang desgined also for interactive use. Syntax similar to Perl and unix shell tools, but based “.Net”.
  • Tcl. Scripting, especially for GUI.
  • Lua. Scripting, popular as a scripting lang in games.
  • Linden Scripting Language. Used in virtual world Second Life.

Some Random Thoughts

Following are some random comments on comp langs.

Listing Criterion and Popularity

In the above, i tried to not list implementations. (e.g. huge number of Scheme implemented in JVM with fluffs here and there; also e.g. JPython, JRuby, and quite a lot more.) Also, i tried to avoid minor derivatives or variations. Also, i tried to avoid langs that's one-man's fancy with little followings.

In the above, i tried to list only “new” langs that are born or seen with high activity or awareness after 2000. But without this criterion, there are quite a few staples that still have significant user base. e.g. APL, Fortran, Cobol, Forth, Logo (many variants), Pascal (Ada, Modula, Delphi). And others that are today top 10 most popular langs: C++, Visual Basic.

The user base of the langs differ by some magnitude. Some, such as for example PHP, C#, are within the top 10 most popular lang with active users. Some others, are niche but still with sizable user base, such as LSL, Erlang, Mathematica. Others are niche but robust and industrial (counting academia), such as Coq (a proof system), Processing, PLT Scheme, AutoLISP. Few are mostly academic followed with handful of researchers or experimenters, Qi, Arc, Mercury, Q, Concurrent Clean are probably examples.

For those of you developers of Java, Perl, Python for example, it would be fruitful to spend a hour or 2 to look at the Wikipedia articles about these, or their home pages. Wikipedia has several pages that is a listing of comp langs, of which you can read about perhaps over 2 hundreds of langs.

Why The List

I was prompted to have a scan at these new lang because recently i wrote a article titled Fundamental Problems of Lisp, which mentioned my impression of a proliferation of languages (and all sorts of computing tools and applications). Quote:

10 years ago, in the dot com days (~1998), where Java, Javascript, Perl are screaming the rounds. It was my opinion, that lisp will inevitably become popular in the future, simply due to its inherent superior design, simplicity, flexibility, power, whatever its existing problems may be. Now i don't think that'll ever happen as is. Because, due to the tremendous technological advances, in particular in communication (i.e. the internet and its consequences, e.g. Wikipedia, youtube, youporn, social networks sites, blogs, Instant chat, etc) computer languages are proliferating like never before. (e.g. erlang, OCaml, Haskell, PHP, Ruby, c#, f#, perl6, arc, newLISP, Scala, Groovy, Goo, Nice, E, Q, Qz, Mercury, Scratch, Flash, Processing, ..., helped by the abundance of tools, libraries, parsers, existence of infrastructures) New langs, basically will have all the advantages of lisps or lisp's fundamental concepts or principles. I see that, perhaps in the next decade, as communication technologies further hurl us forward, the proliferation of langs will reduce to a trend of consolidation (e.g. fueled by virtual machines such as Microsoft's .NET.).

Creating A Lang Is Easy

In general, creating a lang is relatively easy to do in comparison to equivalent-sized programing tasks in the industry (such as, for example, writing robust signal processing lib, a web server (e.g. video web server), a web app framework, a game engine ...etc.). Computing tasks typically have a goal, where all sorts of complexities and nit-gritty detail arise in the coding process. Creating a lang often is simply based on a individual's creativity that doesn't have much fixed constraints, much as in painting or sculpting. Many langs that have become popular, in fact arose this way. Popularly known examples includes Perl, Python, Ruby, Perl6, Arc. Creating a lang requires the skill of writing a compiler though, which isn't trivial, but today with mega proliferation of tools, even the need for compiler writing skill is reduced. (e.g. Arc, various langs on JVM. (10 years ago, writing a parser is mostly not required due to existing tools such as lex/yacc))

Some lang are created to solve a immediate problem or need. Mathematica, Adobe Flash's ActionScript, Emacs Lisp, LSL would be good examples. Some are created as computer science research byproducts, usually using or resulting a new computing model. Lisp, Prolog, SmallTalk, Haskell, Qi, Concurrent Clean, are of this type.

Some are created by corporations from scratch for one reasons or another. e.g. Java, Javascript, AppleScript, Dylan, C#. The reason is mostly to make money by creating a lang that solves perceived problems or need, as innovation. The problem may or may not actually exist. (C# is a lang created primarily to overrun Java. Java was created first as a lang for embedded devices, then Sun Microsystems pushed it to ride the internet wave to envision “write once run everywhere” and interactivity in web browser. In hindsight, Java's contribution to the science of computer languages is probably just a social one, mainly in popularizing the concept of a virtual machine and automatic memory management (so-called Garbage Collection), and further popularizing OOP after C++.)

Infinite Number Of Syntaxes And Semantics

Looking at some tens of langs, one might think that there might be some unifying factor, some unifying theory or model, that limits the potential creation to a small set of types, classes, models. With influence from Stephen Wolfram book “A New Kind of Science” (see: Notes on A New Kind of Science) , i'd think this is not so. That is to say, different languages are potentially endless, and each can become quite useful or important or with sizable user base. In other words, i think there's no theoretical basis that would govern what languages will be popular due to its technical/mathematical properties. Perhaps another way to phrase this imprecise thought is that, languages will keep proliferating, and even if we don't count langs that created by one-man's fancy, there will still probably be forever birth of languages, and they will all be useful or solve some niche problem, because there is no theoretical or technical reason that sometimes in the future there would be one lang that can be fittingly used to solve all computing problems.

Also, the possibilities of lang's syntax are basically unlimited, even considering the constraint that they be practical and human readable. So, any joe, can potentially create a new syntax. The syntaxes of existing langs, when compared to the number of all potentially possible (human readable) syntaxes, are probably a very small fraction. That is to say, even with so many existing langs today with their wildly differing syntax, we probably are just seeing a few pixels in a computer screen.

Also note here all langs mentioned here are all plain-text linear ones. Spread sheet and visual programing langs would be example of 2D syntax... but i haven't thought about how they can be classified as syntax. (nor do i fully understand the ontology of syntax )

Just some extempore thoughts.

2010-09-10

New programing languages.

2010-11-07

Discovered a new programing language. Factor (programming language).

See: Point Free Programing.