BT

New Early adopter or innovator? InfoQ has been working on some new features for you. Learn more

Axum, Microsoft’s Approach to Parallelism

| by Abel Avram Follow 4 Followers on Apr 23, 2009. Estimated reading time: 1 minute |

Axum, previously known as Maestro, is a Microsoft incubation language project meant to provide a parallel programming model for .NET through isolation, actors and message passing. The language borrows many concepts from Erlang but with a C#-like syntax.

Axum is an imperative language with a C#-like syntax. While it is aware of objects, classes cannot be defined, because the language is domain and actor-oriented instead of being object-oriented. Axum is not a general purpose language being targeted at solving concurrency tasks and is built upon Concurrency and Coordination Runtime (CCR) from Microsoft Robotics. The idea is to make calls to Axum code from other .NET languages when parallelism is necessary.

Shared state is considered the main roadblock for safe parallelism. To use shared state in Axum, one needs to declare he is using it and the runtime controls the serialization process of accessing data stored in it. Concurrency is built right in the language.

The main concept in Axum is the domain. A domain is a repository of resources, a collection of data, agents and functions. Domains are isolated from each other and offer protection of their respective data or shared state. The state can be shared by agents of the same domain. The functions of a domain are pure functions which do not keep state between calls. Inside of a domain, agents exchange messages with each other through channels. A schema is introduced to facilitate the communication between agents that have no relationships to each other, so they need some sort of metadata to be able to properly communicate.

An agent is basically a thread that can communicate with other agents and their access to the shared state is controlled by adding reader/writer declarations:

domain A {

   int i;

   int func(int k){}

   writer agent X: Channel1 {}

   reader agent Y: Channel2{}

}

domain B {

   int j;

   agent Z: Channel1 {}

}

Graphically, the communication between domain agents looks like this:

axum

While there is no official word on Microsoft’s plans with Axum, it looks like the Axum team is getting ready to ship the product. There are still documentation issues to solve, making the integration with Visual Studio work flawlessly, creating a MSI package.

Rate this Article

Adoption Stage
Style

Hello stranger!

You need to Register an InfoQ account or or login to post comments. But there's so much more behind being registered.

Get the most out of the InfoQ experience.

Tell us what you think

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Email me replies to any of my messages in this thread
Community comments

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Email me replies to any of my messages in this thread

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Email me replies to any of my messages in this thread

Discuss

Login to InfoQ to interact with what matters most to you.


Recover your password...

Follow

Follow your favorite topics and editors

Quick overview of most important highlights in the industry and on the site.

Like

More signal, less noise

Build your own feed by choosing topics you want to read about and editors you want to hear from.

Notifications

Stay up-to-date

Set up your notifications and don't miss out on content that matters to you

BT