Functional Programming Languages

lisp

  • List Processing Language
  • Popularized through the  Emacs programmers editor
  • First implementation of Lambda Calculus @ MIT in 1958’s on Von Neuman architecture machine

 

caml

  • Categorical Abstract Machine Language
  • INRIA, French National Institute for Research in Computer Science and Control
  • Dialect of ML (Meta Language) by Robert Milner, University of Edinburgh

 

Robert Milner was a British Mathematician who died in March of 2010 in Cambridge, England. He was the recipient of the prestigious Turing Award and contributed to IT in the area of process calculus (Pi Calculus), Type Ynference & ML.

 

ocaml

  • Augments Caml with Object Orientation.
  • Limited IDE Support (Eclipse, Emacs)
  • Compiles optionally to byte code or native executables
  • C++/C  bindings, no mixed project support, marshalling overheads
  • Highly optimized single threaded garbage collector ( generational & incremental ) which is ideal for low latency applications because of its incremental sweep of major heap.
  • Multicore by only by way of message passing/shared read only memory – arguably greatest obstacle to widespread adoption by “for Dummies” readers.  Works well  on *NIX platforms, especially Linux with LWP processes forking (process = pthread & copy on write)  and considering that lock free concurrency is the prevalent  paradigm in functional languages.  Small footprint: “Hello world” weighs in at mere 18k in byte code (compared to C @ approx.  36k). Native build weighs in @ approx 180k.
  • However, multicore process based model does not scale to Windows where process spawning is  approximately 10x as expensive as thread spawning. Also does not scale to managed platforms where a new process means a new virtual machine.
  • Unable to optimize sequential code into parallel paths of execution at compiler level.
  • Largest patron in finance is Jane Street Trading.  Jane Street  publish an optimized core library of Ocaml.

 erlang Erlang

  • Developed by Ericsson of Sweden for safety critical telecommunications application
  • 911 call centres have a high availability requirement – no weekend power downs & checkouts !
  • Massively concurrent through message passing actor model
  • Hot code redeployment as ‘attempted’ on some Java VMs, but mature to mission critical level
  • Purely functional, non OO
  • Mature IDE Support through Eclipse
  • Lack of library support

 fsharp

  • Microsoft  dialect of Caml for .NET, with .NET style OO
  • Full IDE support available (Visual Studio 2010) on .NET platform
  • Interoperates seamlessly with other .NET languages
  • Inherits concurrent garbage collector from .NET, resolving OCaml’s concurrency dilemma
  • Cross platform through Novell’s MONO, but in practice limited by MONO’s Stop-The-World GC.
  • Implements Erlangs’s Actor model
  • No mixed project support to unmanaged languages ( e.g. cannot debug C++ from F# project)
  • No significant track record as yet because newcomer to .NET platform

haskell Haskell

 

  • Purely functional, named after Haskell Curry (US Mathematician, Millis Massachusetts, 1900-1982)
  • Full IDE support (as of Visual Studio 2005, also Haskell specific IDEs)
  • Extremely fast threading support

scala

 

  • Stands for Scalable language because raises level of abstraction beyond classes by combining power of OO and λ, runs on JVM and .NET
  • Blends OO with Functional paradigm – developed by the École Polytechnique Fédérale de Lausanne (Switzerland) and Martin Odersky, author of Java Generics as adopted into J2SE 5.0.

 boost C++

  •  BOOST Library Phoenix makes Lambda Calculus available in C++
  • More recently integrated into C++11

  kx Q

  • KDB’s K & Q ( derivative of APL & Scheme[Lisp] )

High performance functional language used in KDB database engine; Fringe benefit of combining functional DB with functional application layer is absence of Object-Relational Impedance Mismatch;  Mapping database model to application model does not undergo table joins. Performance gains are substantial; No need to Hibernate, etc.; Opposite approach of fitting an OO database tier to OO application tier to solve Object-Relational Impedance Mismatch Problem.

Overall Performance:

benchmarks

Thread-Ring Performance :

benchmarks2

Reference:  shootout.alioth.debian.org

 

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s