Proliferation of Computing Languages
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 languagess 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 ＆ engineering community.
- newLISP. Lisp scripting style. Verdant community of new generation of hobbyist programers.
- Arc. Paul Graham squeezing juice out of his celebrity status. 〔➤see Paul Graham's Infatuation with the Concept of Hacker〕
- Qi. Common Lisp added with modern functional language 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 languages 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.)
- 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 languages:
- Erlang. Functional, concurrent. Mostly used in a telecommunication industry for concurrency and continuous up-time features.
- Haskell Oldish, classic functional language. Mostly used in academia for teaching and language research.
- Concurrent Clean pure functional programing language, similar to haskell.
- Mercury. Logic, functional.
- Q. Functional language, based on term rewriting. Replaced by Pure.
- Oz. Concurrent. Multi-paradigm. Mostly used in teaching.
Perl family or derivative:
- PHP. Perl derivative for server side web apps. One of the top 5 most popular languages.
- 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 language, perl syntax. On Java platform. http://sleep.dashnine.org/
On Java Virtual Machine:
- Scala. A FP+OOP language on Java platform as a Java alternative.
- Groovy. Scripting language on Java platform.
- 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 language with Microsoft's “.NET” architecture.
- D. Clean up of C++.
- Go. Google's new language as improvement of C.
2D graphics related.
- Scratch. Derived from SmallTalk + Logo. Primarily for teaching children programing.
- Processing. 2D graphics on Java platform. Primarily used for art and teaching.
- PowerShell. A modern shell. A scripting language designed 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 language in games.
- Linden Scripting Language. Used in virtual world Second Life. 〔➤see Xah's Linden Scripting Language (LSL) Tutorial〕
Some Random Thoughts
Following are some random comments on comp languages.
Listing Criterion and Popularity
In the above, i tried to not list implementations. (➢ for example: huge number of Scheme implemented in JVM with fluffs here and there; also ➢ for example: JPython, JRuby, and quite a lot more.) Also, i tried to avoid minor derivatives or variations. Also, i tried to avoid languages that's one-man's fancy with little following.
In the above, i tried to list only “new” languages 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. ⁖ APL, Fortran, Cobol, Forth, Logo (many variants), Pascal (Ada, Modula, Delphi). And others that are today top 10 most popular languages: C++, Visual Basic.
The user base of the languages differ by some magnitude. Some, such as for example PHP, C#, are within the top 10 most popular language 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 languages, of which you can read about perhaps over 2 hundreds of languages.
Why The List
I was prompted to have a scan at these new language 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:
Creating a language is Easy
In general, creating a language 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 (➢ for example: 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 language often is simply based on a individual's creativity that doesn't have much fixed constraints, much as in painting or sculpting. Many languages that have become popular, in fact arose this way. Popularly known examples includes Perl, Python, Ruby, Perl6, Arc. Creating a language 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. (➢ for example: Arc, various languages on JVM. (10 years ago, writing a parser is mostly not required due to existing tools such as lex/yacc))
Some language 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.
Infinite Number of Syntax and Semantics
Looking at some tens of languages, 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 languages 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 language that can be fittingly used to solve all computing problems.
Also, the possibilities of language'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 syntax of existing languages, when compared to the number of all potentially possible (human readable) syntax, are probably a very small fraction. That is to say, even with so many existing languages today with their wildly differing syntax, we probably are just seeing a few pixels in a computer screen.
Also note here all languages mentioned here are all plain-text linear ones. Spread sheet and visual programing languages 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.
Pure, Vala, Genie
New programing languages.
The Fantom Language, and a Scathing Review of Scala
There are endless languages. Just discovered Fantom.
Also, there's this scathing review of Scala by someone who seems to be a Java platform expert.
Scala feels like EJB 2, and other thoughts By Stephen Colebourne. @ http://blog.joda.org/2011/11/scala-feels-like-ejb-2-and-other.html
Ι don't know Java platform well, not having worked in the industry for many years, but i tend to agree with him on his views.
CoffeeScript, Google Dart, Microsoft TypeScript, asm.js
Google created Google Dart. Microsoft created TypeScript. See: TypeScript Will Kill CoffeeScript and Dart❕.
Then, in ≈, asm.js is created. Home page at http://asmjs.org/.
Here's some blogs about it:
- one of the asm.js creator: 〔What asm.js is and what asm.js isn't By Alon Zakai. @ http://mozakai.blogspot.com/2013/06/what-asmjs-is-and-what-asmjs-isnt.html〕
just learned there's a new lang: Rust, developed by Mozilla Labs. Started in 2010. Quote from Wikipedia:
Rust is an experimental, concurrent, multi-paradigm, compiled programming language developed by Mozilla Labs. It is designed to be practical, supporting pure-functional, concurrent-actor, imperative-procedural, and object-oriented styles.
The lead developer is Graydon Hoare, who began work on the system in 2006; Mozilla became involved in 2009, and officially unveiled the language for the first time at Mozilla Summit 2010. In 2010, work shifted from the initial compiler, written in OCaml, to the self-hosted compiler written in Rust itself. It successfully compiled itself the following year. The self-hosted compiler uses LLVM as its backend.
interestingly, on Julia site, it shows that it's a order faster than all similar scripting language. Julia's speed seems to be close to optimized C code, and is a stated goal of the language design.
A lang based on Parsing Expression Grammar, called OMeta, by Alessandro Warth.
OMeta: an Object-Oriented Language for Pattern Matching By Alessandro Warth. @ http://tinlizzie.org/ometa/
Tom Novelli provided the following insights and links:
Yeah, that seems promising. there's actually a long history behind it; see for example 〔Pragmatic Parsing in Common Lisp By Henry G Baker, Nimble Computer Corporation. @ http://home.pipeline.com/~hbaker1/Prag-Parse.html〕
I found a copy of Val Schorre's META-II paper from 50 years ago… and some followup work throughout the 1960s (➢ for example: TREE-META)… these guys were in Douglas Englebart's group. Then apparently the military took it over and made it classified, probably ruined it with bureaucracy rather than developing it into awesome top-secret technology, heh ☺
- The programming languages behind “the mother of all demos” By Ehud Lamm. @ http://lambda-the-ultimate.org/node/3122
- TREE-META Manual By F R A Hopgood. @ http://www.chilton-computing.org.uk/acl/literature/manuals/tree-meta/contents.htm
Elm is a functional programming language for declaratively creating web browser based graphical user interfaces. Elm uses the Functional Reactive Programming style and purely functional graphical layout to build user interface without any destructive updates.
Elm was designed by Evan Czaplicki as his thesis in 2012. The first release of Elm came with many examples and an online editor that made it easy to try out in a web browser. Evan Czaplicki now works on Elm at Prezi.
Haxe is an open source high-level multi-platform programming language and compiler that can produce applications and source code for many different platforms from a single code-base.
Haxe includes a set of common functionality that is supported across all platforms, such as numeric data types, text, arrays, binary and some common file formats. Haxe also includes platform-specific API for Adobe Flash, C++, PHP and other languages.
Haxe is also a full-featured ActionScript 3-compatible Adobe Flash compiler, that can compile a SWF file directly from Haxe code. Haxe can also compile to Neko applications, built by the same developer.
Major users of Haxe include TiVo, Prezi, Nickelodeon, Disney, Mattel, Hasbro, Coca Cola, Toyota and BBC. OpenFL and Flambe are popular Haxe frameworks that enable the creation of multi-platform content from a single codebase. With HTML5 dominating over Adobe Flash in recent years, Haxe, Unity and other cross-platform tools are increasingly necessary to target modern platforms while providing backward compatibility with Adobe Flash Player.
Facebook created a new lang: hacklang. Basically, it's PHP with optional type system, with type inference. Designed to run existing PHP code as much as possible. Already deployed in large scale by Facebook.
I think this is fantastic.
announcement: 〔Hack: a new programming language for HHVM By Julien Verlaguet, Alok Menghrajani. @ https://code.facebook.com/posts/264544830379293/hack-a-new-programming-language-for-hhvm/〕
home page http://hacklang.org/
egison, pattern matching language.
Swift is a multi-paradigm, compiled programming language created by Apple Inc. for iOS, OS X, and watchOS development. Swift is designed to work with Apple's Cocoa and Cocoa Touch frameworks and the large body of existing Objective-C code written for Apple products. Swift is intended to be more resilient to erroneous code (“safer”) than Objective-C, and also more concise. It is built with the LLVM compiler framework included in Xcode 6, and uses the Objective-C runtime, allowing C, Objective-C, C++ and Swift code to run within a single program.
Elixir is a functional, concurrent, general-purpose programming language that runs on the Erlang virtual machine (BEAM). Elixir builds on top of Erlang to provide distributed, fault-tolerant, soft real-time, non-stop applications but also extends it to support metaprogramming with macros and polymorphism via protocols.
- A language that compiles to bytecode for the Erlang Virtual Machine (BEAM)
- Everything is an expression
- Erlang functions can be called from Elixir without run time impact, due to compilation to Erlang bytecode, and vice versa
- Meta programming allowing direct manipulation of AST
- Polymorphism via a mechanism called protocols. Like in Clojure, protocols provide a dynamic dispatch mechanism. However, this is not to be confused with multiple dispatch as Elixir protocols dispatch on a single type.
- Support for documentation via Python-like docstrings in the Markdown formatting language
- Shared nothing concurrent programming via message passing (Actor model)
- Emphasis on recursion and higher-order functions instead of side-effect-based looping
- Lightweight concurrency utilizing Erlang's mechanisms with simplified syntax (e.g. Task)
- Lazy and async collections with streams
- Pattern matching
- Unicode support and UTF-8 strings
〔A Week with Elixir By Joe Armstrong (Creator Of Erlang). @ http://joearms.github.io/2013/05/31/a-week-with-elixir.html〕
new language, Kotlin, from JetBrains. Runs on Java Virtual Machine. Similar to Java, but designed to improve java.
While not syntax compatible with Java, Kotlin is designed to interoperate with Java code and is reliant on Java code from the existing Java Class Library, such as the collections framework.
- 〔The Kotlin language will be statically typed and free of legacy troubles, according to the company By Paul Krill. @ http://www.infoworld.com/article/2622405/java/jetbrains-readies-jvm-based-language.html〕
- Kotlin (programming language).
- Functional Programing Languages History Diagram
- Unix Pipe as Functional Language
- Pattern Matching vs Grammar Specification
- What's List Comprehension and Why is it Harmful?
- Fundamental Problems of Lisp
- Problems of Symbol Congestion in Computer Languages; ASCII Jam vs Unicode