#REDIRECT [[Concurrent computing#Concurrent programming languages]]
'''Concurrent programming languages''' are those that provide linguistic mechanisms for programming concurrency. These languages use multi-threading, operating systems and networking to provide concurrency.
{{R to section}}
Communication in concurrent programming languages can essentially be divided into two classes:
#Shared-memory communication, in which threads communicate by changing shared memory locations. This style of concurrent programming usually requires the application of some form of locking (e.g. mutexes, semaphores, or monitors) to coordinate between threads.
#Message-passing communication, in which messages are sent to recipients as in the [[Actor model]] and Process calculi. Message-passing concurrency tends to be far easier to reason about than shared-state concurrency, and is typically considered a more robust form of concurrent programming. Messages can be asynchronous (aka "send, pray, and if no acknowledgment send again"), as on the [[Internet]], or may use a rendezvous style in which the sender blocks until the message is received, as in [[process calculi]].
The [[Java programming language|Java]] and [[C sharp|C#]] programming languages make use of both of the above kinds of communcication.
==Examples==
*[[Ada]]
*[[Alef]] - originally used as a programming language for the [[Plan 9 from Bell Labs]] operating system.
*[[ChucK]] - concurrent, on-the-fly programming language for audio
*[[Cilk]]
*[[Comega]]
*[[C sharp|C#]]
*[[Concurrent Pascal]] (by Brinch-Hansen)
*[[E programming language|E]]
*[[Erlang programming language|Erlang]]
*[[Java programming language|Java]]
*[[Joule programming language|Joule]]
*[[Limbo programming language|Limbo]] - the successor to [[Alef]], used in the [[Inferno (operating system)]].
*[[Oz_programming_language|Mozart/Oz]] - a "multi-paradigm" language that supports both shared-state and message-passing concurrency.
*[[Occam programming language|Occam]] - influenced heavily by [[Communicating Sequential Processes]].
*[[Pict-language|Pict]] - essentially an executable implementation of Milner's [[Pi-Calculus]].
*[[Promise (programming)]]
*[[SR language|SR]]
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 [[Ada]], [[Erlang]], Java, [[Limbo]], and [[Occam]]) have seen widespread industrial use at various times in the last 20 years.
[[Category:Programming]]
|