Concurrent programming language
Concurrent programming languages are programming languages that use language constructs for concurrency. These constructs involve multi-threading, operating systems and networking using shared resources that can change.
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-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 packets on the Internet, or may use a rendezvous style in which the sender blocks until the message is received, as in TCP on the Internet and synchronous process calculi.
The Java and C# programming languages make use of both of the above kinds of communcication, e.g., see the locking programming language constructs in both languages.
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#
- Concurrent Pascal (by Brinch-Hansen)
- E
- Erlang - uses asynchronous message passing with nothing shared
- Java
- Joule
- Limbo - the successor to Alef, used in the Inferno (operating system).
- Mozart/Oz - a "multi-paradigm" language that supports both shared-state and message-passing concurrency.
- Occam - influenced heavily by Communicating Sequential Processes.
- Pict - essentially an executable implementation of Milner's Pi-Calculus.
- Promise (programming)
- 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.