Concurrent programming language: Difference between revisions
Appearance
Content deleted Content added
propose merge with Concurrent computing |
merge into Concurrent computing |
||
Line 1: | Line 1: | ||
#redirect [[Concurrent computing]] |
|||
'''Concurrent programming languages''' are [[programming languages]] that use language constructs for [[Concurrency (computer science)|concurrency]]. These constructs may involve [[multi-threading]], support for [[distributed computing]], [[message passing programming|message passing]], [[sharing|shared resources]] (including [[Parallel Random Access Machine|shared memory]]) or [[Future (programming)|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: |
|||
#Shared-memory communication, in which the concurrent parts communicate by altering the contents of shared memory locations (exemplified by [[Java programming language|Java]] and [[C sharp|C#]]). This style of concurrent programming usually requires the application of some form of locking (e.g., [[Mutual exclusion|mutexes]], [[Semaphore (programming)|semaphores]], or [[Monitor (synchronization)|monitors]]) to coordinate between threads. |
|||
#Message-passing communication, in which concurrent parts communicate by exchanging messages (exemplified by [[Erlang programming language|Erlang]] and [[Occam programming language|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 programming language|Java]] and [[C sharp|C#]]. Both of these languages fundamentally use a shared-memory concurrency model, with locking provided by [[Monitor (synchronization)|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 programming language|Erlang]] is probably the most widely used in industry at present. |
|||
==Languages where concurrency is important== |
|||
*[[Ada programming language|Ada]] |
|||
*[[Afnix programming language|Afnix]] – concurrent access to data is protected automatically (previously called ''Aleph'', but unrelated to ''Alef'') |
|||
*[[Alef programming language|Alef]] – concurrent language with threads and message passing, used for systems programming in early versions of [[Plan 9 (operating system)]] |
|||
*[[ChucK]] – domain specific programming language for audio |
|||
*[[Cilk]] – a concurrent [[C programming language|C]] |
|||
*[[Cω]] – C Omega, a research language extending C#, uses asynchronous communication |
|||
*[[Concurrent Pascal programming language|Concurrent Pascal]] – by [[Per Brinch Hansen|Brinch-Hansen]] |
|||
*[[Corn programming language|Corn]] |
|||
*[[E programming language|E]] – uses promises, ensures deadlocks cannot occur |
|||
*[[Erlang programming language|Erlang]] – uses asynchronous message passing with nothing shared |
|||
*[[Join Java]] – concurrent language based on the [[Java programming language]] |
|||
*[[Joule programming language|Joule]] – dataflow language, communicates by message passing |
|||
*[[Limbo programming language|Limbo]] – relative of [[Alef programming language|Alef]], used for systems programming in [[Inferno (operating system)]] |
|||
*[[Oz_programming_language|Oz]] – multiparadigm language, supports shared-state and message-passing concurrency, and futures |
|||
**[[Mozart Programming System]] – [[multiplatform]] Oz |
|||
*[[MultiLisp]] – [[Scheme programming language|Scheme]] variant extended to support parallelism |
|||
*[[Occam programming language|occam]] – influenced heavily by [[Communicating Sequential Processes]] (CSP). |
|||
**[[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|π-calculus]] |
|||
*[[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 |
|||
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). |
|||
[[Category:Concurrent programming languages]] |
|||
[[Category:Concurrent computing]] |
|||
[[Category:Programming languages]] |
|||
[[fr:Programmation concurrente]] |
Revision as of 05:11, 27 January 2006
Redirect to: