Concurrent Computing - Concurrent Programming Languages

Concurrent Programming Languages

Concurrent programming languages are programming languages that use language constructs for concurrency. These constructs may involve multi-threading, support for distributed computing, message passing, shared resources (including shared memory) or futures (known also as promises). Such languages are sometimes described as Concurrency Oriented Languages or Concurrency Oriented Programming Languages (COPL).

Today, the most commonly used programming languages that have specific constructs for concurrency are Java and C#. Both of these languages fundamentally use a shared-memory concurrency model, with locking provided by monitors (although message-passing models can and have been implemented on top of the underlying shared-memory model). Of the languages that use a message-passing concurrency model, Erlang is probably the most widely used in industry at present.

Many concurrent programming languages have been developed more as research languages (e.g. Pict) rather than as languages for production use. However, languages such as Erlang, Limbo, and occam have seen industrial use at various times in the last 20 years. Languages in which concurrency plays an important role include:

  • ActorScript – theoretical purely actor-based language defined in terms of itself
  • Ada - general purpose programming language with native support for message passing and monitor based concurrency.
  • Afnix – concurrent access to data is protected automatically (previously called Aleph, but unrelated to Alef)
  • Alef – concurrent language with threads and message passing, used for systems programming in early versions of Plan 9 from Bell Labs
  • Alice – extension to Standard ML, adds support for concurrency via futures.
  • Ateji PX – an extension to Java with parallel primitives inspired from pi-calculus
  • Axum – domain specific concurrent programming language, based on the Actor model and on the .NET Common Language Runtime using a C-like syntax.
  • Chapel – a parallel programming language being developed by Cray Inc.
  • Charm++ – C++-like language for thousands of processors.
  • Cilk – a concurrent C
  • Cω – C Omega, a research language extending C#, uses asynchronous communication
  • Clojure – a modern Lisp targeting the JVM
  • Concurrent Clean – a functional programming language, similar to Haskell
  • Concurrent Haskell – lazy, pure functional language operating concurrent processes on shared memory
  • Concurrent ML – a concurrent extension of Standard ML
  • Concurrent Pascal – by Per Brinch Hansen
  • Curry
  • D – multi-paradigm system programming language with explicit support for concurrent programming (Actor model)
  • E – uses promises, ensures deadlocks cannot occur
  • Eiffel – through its SCOOP mechanism based on the concepts of Design by Contract
  • Erlang – uses asynchronous message passing with nothing shared
  • Faust – Realtime functional programming language for signal processing. The Faust compiler provides automatic parallelization using either OpenMP or a specific work-stealing scheduler.
  • Fortran – Coarrays and "do concurrent" are part of Fortran 2008 standard
  • Go – systems programming language with explicit support for concurrent programming
  • Hume functional concurrent lang. where automata processes have channel based state and message passing.
  • Io – actor-based concurrency
  • Janus features distinct "askers" and "tellers" to logical variables, bag channels; is purely declarative
  • JoCaml Concurrent and distributed channel based language (extension of OCaml) that implements the Join-calculus of processes.
  • Join Java – concurrent language based on the Java programming language
  • Joule – dataflow language, communicates by message passing
  • Joyce – a concurrent teaching language built on Concurrent Pascal with features from CSP by Per Brinch Hansen
  • LabVIEW – graphical, dataflow programming language, in which functions are nodes in a graph and data is wires between those nodes. Includes object oriented language extensions.
  • Limbo – relative of Alef, used for systems programming in Inferno (operating system)
  • MultiLisp – Scheme variant extended to support parallelism
  • Modula-2 – systems programming language by N.Wirth as a successor to Pascal with native support for coroutines.
  • Modula-3 – modern language in Algol family with extensive support for threads, mutexes, condition variables.
  • Newsqueak – research language with channels as first-class values; predecessor of Alef
  • occam – influenced heavily by Communicating Sequential Processes (CSP).
    • occam-π – a modern variant of occam, which incorporates ideas from Milner's π-calculus
  • Orc – a heavily concurrent, nondeterministic language based on Kleene algebra.
  • Oz – multiparadigm language, supports shared-state and message-passing concurrency, and futures
    • Mozart Programming System – multiplatform Oz
  • Pict – essentially an executable implementation of Milner's π-calculus
  • Perl with AnyEvent and Coro
  • Python with Twisted, greenlet and gevent.
  • Reia – uses asynchronous message passing between shared-nothing objects
  • Rust – a systems language with a focus on massive concurrency, utilizing message-passing with move semantics, shared immutable memory, and shared mutable memory that is provably free of data races.
  • SALSA – actor language with token-passing, join, and first-class continuations for distributed computing over the Internet
  • Scala – a general purpose programming language designed to express common programming patterns in a concise, elegant, and type-safe way
  • SR – research language
  • Stackless Python
  • StratifiedJS – a combinator-based concurrency language based on JavaScript
  • SuperPascal – a concurrent teaching language built on Concurrent Pascal and Joyce by Per Brinch Hansen
  • Unicon – Research language.
  • Termite Scheme adds Erlang-like concurrency to Scheme
  • TNSDL – a language used at developing telecommunication exchanges, uses asynchronous message passing
  • VHDL – VHSIC Hardware Description Language, aka IEEE STD-1076
  • XC – a concurrency-extended subset of the C programming language developed by XMOS based on Communicating Sequential Processes. The language also offers built-in constructs for programmable I/O.

Many other languages provide support for concurrency in the form of libraries (on level roughly comparable with the above list).

Read more about this topic:  Concurrent Computing

Famous quotes containing the words concurrent, programming and/or languages:

    I have been too long acquainted with human nature to have great regard for human testimony; and a very great degree of probability, supported by various concurrent circumstances, conspiring in one point, will have much greater weight with me, than human testimony upon oath, or even upon honour; both of which I have frequently seen considerably warped by private views.
    Philip Dormer Stanhope, 4th Earl Chesterfield (1694–1773)

    If there is a price to pay for the privilege of spending the early years of child rearing in the driver’s seat, it is our reluctance, our inability, to tolerate being demoted to the backseat. Spurred by our success in programming our children during the preschool years, we may find it difficult to forgo in later states the level of control that once afforded us so much satisfaction.
    Melinda M. Marshall (20th century)

    I am always sorry when any language is lost, because languages are the pedigree of nations.
    Samuel Johnson (1709–1784)