Microsoft Axum: "Erlang for .NET"
Microsoft has just started talking about a new .NET language called Axum. People have described it as "Erlang for .NET". To stick with this classification, one could also call it "Erlang with a more mainstream syntax".
It is an agent based language, which means that communication is asynchronous and message-based, and agents (cf, the Actors model) are considered active, i.e. they have their own thread or process. Data in messages is typed and can be (deeply) serialized to make remote message sending (i.e. agent distribution) possible and more or less transparent. Axum comes with integration into WCF.
Communication between agents happens via Channels. A channel is a kind of "asynchronous interface", i.e. channels define which messages can be sent into it and received from it. Agents "implement" Channels as a way of defining the kinds of messages it can handle.
Since the timing and sequencing in asynchronous applications can be hard to understand, Axum supports the definition of protocol state machines (yeah!!) for channels. So if you send something in the wrong order, you don't get a strange crash or a deadlock, but rather a meaningful error message. I *love* that part!
Axum comes with powerful operators to define dataflow networks. You can say things like: "wait until a message arrives in this channel and in that other channel, then combine the two messages in an array, forward them to the agent xyz and forward the result to these other two channels, in an alternating way". You can define things like that with concise expressions. Very cool!
Axum has a controlled way of handling side effects. Specifically, the "units of functionality" can be declared as functions, which means they have no way of accessing state (this is checked by the compiler). The point of this is, of course, to be able to run parts of dataflow networks in parallel. This is where the big benefit of agent-based/dataflow-oriented systems comes in.
I have to say, this stuff looks *really* interesting! Because it is based on the .NET platform you get interop with other .NET stuff more or less for free. There's also an integration with VisualStudio. It is really interesting to see how Microsoft, after "renovating" and "mainstreaming" Haskell to F# they now adress Erlang and pimp it up to Axum. Very cool!