Rails in the Large: How Agility Allows Us to Build One Of the World's Biggest Rails Apps
Neal Ford shows what ThoughtWorks learned from scaling Rails development: infrastructure, testing, messaging, optimization, performance.
Tracking change and innovation in the enterprise software development community
Posted by Abel Avram on Apr 23, 2009
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:
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.
Agile Development: A Manager's Roadmap for Success
Virtual Software Development Appliances Primer
Technical Debt and Design Death
Lean development governance whitepaper by Scott Ambler and Per Kroll
Neal Ford shows what ThoughtWorks learned from scaling Rails development: infrastructure, testing, messaging, optimization, performance.
Stuart Halloway discusses Clojure and functional programing on the JVM in depth, and touches on the uses of a number of other modern JVM languages including JRuby, Groovy, Scala and Haskell.
Orion Henry and Blake Mizerany talk about the technology behind Heroku and the benefits of the new add-on system.
Chris Riley presents security issues threatening service based systems, examining security threats, presenting measures to reduce the risks, and mentioning available security frameworks.
This talk investigates technical issues encountered when moving to an Agile process.
Don Box and Amanda Laucher present “M”, a declarative language for building data models, domain models or external DSLs. Don Box's demos show some of M’s features and latest changes of the language.
It is four months since the SOA manifesto was announced; InfoQ interviewed the original author’s to get insight into the motivations and the process behind the initiative.
This article explains the impact memory barriers, or fences, have on the determinism of multi-threaded programs.
No comments
Watch Thread Reply