#REDIRECT [[Concurrent computing#Concurrent programming languages]]
'''Concurrent programming languages''' are [[programming languages]] that use language constructs for [[Concurrency (computer science)|concurrency]]. These constructs involve [[multi-threading]], [[operating systems]] and [[networking]] using [[sharing|shared]] resources that can change.
{{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. [[Mutual exclusion|mutexes]], [[Semaphore (programming)|semaphores]], or [[Monitor (synchronization)|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-memory 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 [[Internet Protocol|packets]] on the [[Internet]], or may use a rendezvous style in which the sender blocks until the message is received, as in [[Transmission Control Protocol|TCP]] on the Internet and synchronous [[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]]
|