Postado em maio 3, 2010 às 1:40 am

Microsoft Axum – uma nova linguagem[introdução]

O time de linguagens da Microsoft nos presentou com mais uma linguagem no .NET Framework: O Axum. O Axum é mais um diferencial no portfólio de linguagens da Microsoft, e vem para complementar a família que já inclui Visual Basic .NET e F#. Este é o primeiro de alguns artigos sobre o Axum, lembrando que o release atual ainda não é uma versão estável e final.

Mais uma linguagem?

O Axum (anteriormente conhecida pelo codinome Maestro) é uma linguagem de programação de domínio de concorrência específica, com base em um modelo de atores. É uma linguagem orientada a agentes com uma sintaxe C-like que , sendo uma linguagem específica de domínio, é destinada ao desenvolvimento de partes de uma aplicação de software onde haja concorrência, ou seja: Tem um uso específico. Mas ele contém o suficiente para uso geral em construções em que não é preciso mudar para uma linguagem de propósito geral de programação (como C#) para as partes seqüenciais dos componentes de concorrência. Basicamente, é voltada a aproveitar toda a capacidade das novas CPUs através de paralelismo. Pode ser encontrado aqui: http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=cfe70d5d-37aa-4c4c-8eeb-d4576c41baa2

Escrever um programa com paralelismo, geralmente, requer dividir uma solução em um N número de tarefas paralelas. Certos problemas são facilmente amenizáveis com a paralelização, pois as tarefas são executadas independentemente umas das outras, mas em outros casos as tarefas são interdependentes  e requerem orquestração. O Axum foi pensado para coordenar tarefas concorrentes e  escrever aplicações responsivas frente à latência.

Com o axum, os programadores podem organizar a orquestração entre componentes de uma maneira muito próxima à solução. Em outras palavras, se você puder modelar sua solução pensando em componentes interativos, progamar em Axum será fácil, e irá melhorar e facilitar a correção de bugs referentes a concorrência.

O maior motivo para se escrever uma aplicação com paralelismo é também o mais óbvio: O software fica mais rápido! -Além do desejo de que o software faça mais enquanto é executado. Isso é essencial a aplicações que precisam processar entradas de dados dos usuários enquanto executam tarefas em background.

Um dos objetivos de Axum é permitir que você programe sem se preocupar com concorrência – o seu programa torna-se rápido e responsivo por padrão, não como resultado de uma adequação.

Além de trazer novas possibilidades para o trabalho com concorrência, o Axum remove uma capacidade que historicamente causa problema: A possibilidade irrestrita de compartilhar e alterar estados entre tarefas diferentes. O modelo de isolamento do Axum garanto acesso “disciplinado” aos estados compatilhados, o que previne muitos erros comuns de programação.

O componente fundamental do Axum é o Ator(ou Agente), que nada mais é do que uma entidade isolada que executa tarefas em paralelos com outros atores. Trocando em miúdos, os atores executam ações em diferentes domínios, e objetos instanciados em um domínio não podem ser acessados por outro, e os domínios não compartilham recursos entre si(ex:memória). Ao invés disso, é utilizado o conceito de troca de mensagens. Para coordenar os atores ou utilizar a requisição de um ator como recurso de outro, uma mensagem explícita precisa ser enviada para o ator. O Axum fornece canais para isso. A linguagem foi inspirada em linguagens como Ada e SR.

Alguns recursos presentes no C# também estão presentes no Axum, porém nem todos. A saber:

Presentes

- Todas as expressões do C# 3.0, incluindo Lambda e Linq

- Todos os statements do  C# 3.0, incluindo return e brake

- Declaração de métodos e campos

- Delegates e enums

Ausentes

-Classes, interfaces e structs

-Sobrecarga de operadores

-Propriedades

-Constantes

-Métodos e campos estáticos

E as novidades que o  Axum traz podem ser divididos em 5 grupos:

-Agentes e domínios

-Canais

-Schema

-Redes

-Fluxo de controle intercalado

Das novas funcionalidades trazidas pelo Axum citadas acima, as 3 primeiras são referentes a isolamento de estado e troca de informações entre regiões isoladas da aplicação. Os dois últimos tratam de orquestração de mensagens pelos dados e controle de fluxo, respectivamente.

Agentes(atores) e domínios

Agentes são a menor unidade de isolamento no Axum. São similares a classes, mas a referência à instância de um agente não pode ser armazenada em qualquer lugar. Ao invés disso, agentes interagem entre si através de trocas de mensagens passando por canais pré-definidos. Esses canais definem portas distintas por onde passam os dados. Os canais ainda podem definir protocolos formais para a troca de informações entre comunicadores.

Um domínio é a unidade de isolamento imediatamente maior que um agente: Pode ser descrito como uma classe que possui somente campos privados e métodos, isolados de todos os outros domínios. Apenas os construtores estão disponíveis fora da definição do domínio. Agentes podem ser aninhados dentro de um domínio, tendo acesso ao estado do domínio, mas seus acessos são automaticamente orquestrados para prevenir conflitos.

Para definir os dados que trafegam entre os domínios, os agentes e as aplicações, o Axum permite um tipo especial de transferência de dados, chamado de Schema, muito parecido com o schema utilizado por um documento XML trafegado entre webservices. Um schema define a estrutura e as regras para os dados que transitam entre componentes isolados,  como os agentes.

O conceito central da interação entre os agentes é o de mensageria, como por exemplo passar valores entre componentes de forma síncrona ou assíncrona.Através do recebimento de  instruções e fluxos de controle intercalados, a manipulação de mensagens em uma estrutura semelhante, a um controle de fluxo, é simples.

Pequeno Exemplo

Eu sou um cara bastante tradicional, então começaremos com o clássico “Olá mundo”.  Após instalar o o Axum à partir do link que eu forneci acima(perceba que há versões diferentes para Visual Studio 2008 e Visual Studio 2010), crie um projeto em Axum:

Projeto sendo criado no Visual Studio

Projeto sendo criado no Visual Studio

Após a criação do projeto, o Visual Studio gerará um pouco de código como de costume. seu código deve estar parecido com isso:

using System;
using Microsoft.Axum;
using System.Concurrency.Messaging;

namespace ExemploAxum
{
    public domain Program
    {
        agent MainAgent : channel Microsoft.Axum.Application
        {
            public MainAgent()
            {
                String [] args = receive(PrimaryChannel::CommandLine);

                // TODO: Add work of the agent here.
                Console.WriteLine("Ola mundo!");
                PrimaryChannel::Done <-- Signal.Value;
            }
        }
    }
}

Observe que a sintaxe realmente é bem próxima ao C#. Substitua o código gerado pelo VS, com o código abaixo:

using System;
 
agent Program : Microsoft.Axum.ConsoleApplication
{
    override int Run(String[] args)
    {
        Console.WriteLine("Hello, World!");
        Console.ReadKey();
    }
}

Analisando um pouco do código, perceberemos algumas coisas. Repare na segunda linha, o código começa com a palavra “agent”: Esse trecho de código é um agente ou ator. Como Eu expliquei acima, o Axum é baseado em um conceito conhecido dentro da computação como “Modelo de atores”, e os atores são entidades autônomas que interagem entre si através da troca de mensagens. Escrever um software em Axum é basicamente definir agentes e suas interações.

Bem, por enquanto é isso. Pretendo continuar com mais alguns artigos sobre o Axum. Críticas e sugestões, os comentários estão abertos.

Abraços e keep coding!

Tags:, , , , , ,

Deixar um comentário