Jump to content

Concurrent programming language: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
No edit summary
m Languages where concurrency is important: revise occam capitalization to standard (lower case) form, and make 'pi' into a greek letter
Line 26: Line 26:
**[[Mozart Programming System]] – [[multiplatform]] Oz
**[[Mozart Programming System]] – [[multiplatform]] Oz
*[[MultiLisp]] – [[Scheme programming language|Scheme]] variant extended to support parallelism
*[[MultiLisp]] – [[Scheme programming language|Scheme]] variant extended to support parallelism
*[[Occam programming language|Occam]] – influenced heavily by [[Communicating Sequential Processes]] (CSP).
*[[Occam programming language|occam]] – influenced heavily by [[Communicating Sequential Processes]] (CSP).
**[[Occam-Pi|Occam-pi]] – a modern variant of [[Occam programming language|Occam]], which incorporates ideas from Milner's [[Pi-Calculus]]
**[[Occam-Pi|occam-π]] – a modern variant of [[Occam programming language|occam]], which incorporates ideas from Milner's [[Pi-Calculus|π-calculus]]
*[[Pict programming language|Pict]] – essentially an executable implementation of Milner's [[Pi-Calculus]]
*[[Pict programming language|Pict]] – essentially an executable implementation of Milner's [[Pi-Calculus|π-calculus]]
*[[SALSA programming language|SALSA]] – actor language with token-passing, join, and first-class continuations for distributed computing over the Internet
*[[SALSA programming language|SALSA]] – actor language with token-passing, join, and first-class continuations for distributed computing over the Internet
*[[SR language|SR]] – research language
*[[SR language|SR]] – research language


Note that many of these languages are intended more as research languages (e.g., Pict) than as languages for production use. However, several of the examples (such as Erlang, Limbo, and Occam) have seen industrial use at various times in the last 20 years.
Note that many of these languages are intended more as research languages (e.g., Pict) than as languages for production use. However, several of the examples (such as Erlang, Limbo, and occam) have seen industrial use at various times in the last 20 years.


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

Revision as of 00:01, 24 December 2005

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

In some languages communication between concurrent parts of an application is hidden from the programmer (e.g., by using futures), while in others it must be handled explicitly. Explicit communication can be divided into two classes:

  1. Shared-memory communication, in which the concurrent parts communicate by altering the contents of shared memory locations (exemplified by Java and C#). This style of concurrent programming usually requires the application of some form of locking (e.g., mutexes, semaphores, or monitors) to coordinate between threads.
  2. Message-passing communication, in which concurrent parts communicate by exchanging messages (exemplified by Erlang and Occam). The exchange of messages may be carried out asynchronously (i.e. "send, pray, and if no acknowledgment send again"), or may use a rendezvous style in which the sender blocks until the message is received. Message-passing concurrency tends to be far easier to reason about than shared-memory concurrency, and is typically considered a more robust form of concurrent programming. A wide variety of mathematical theories for understanding and analyzing message-passing systems are available, including the Actor model, and various Process calculi.

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.

Languages where concurrency is important

Note that many of these languages are intended more as research languages (e.g., Pict) than as languages for production use. However, several of the examples (such as Erlang, Limbo, and occam) have seen industrial use at various times in the last 20 years.

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