Desenvolvimento - C#

Multilingüagem na plataforma .NET

Nessa coluna, pretendo mostrar como o desenvolvimento multilingüagem funciona e a estrutura por trás disso.

por Marden Menezes



Ainda há muitas pessoas que não conhecem a Plataforma .NET ou que não entendem o porque de todo o "alvoroço" em torno do seu nome. Claro que a possibilidade de desenvolvimento de Web Services, páginas Web compiladas com ASP .NET, linguagens poderosas como C# e desenvolvimento para aplicações móveis transformam a Plataforma .NET em algo realmente inovador e valioso mas dentre todas as inovações e melhoramentos que a Plataforma .NET traz, há uma que algumas vezes é esquecida e que, dependendo do caso, pode facilitar em muito o desenvolvimento de um projeto: a multilingüagem.

Nessa coluna, pretendo mostrar como o desenvolvimento multilingüagem funciona e a estrutura por trás disso.

POR QUE VÁRIAS LINGUAGENS?

No mundo existem vários desenvolvedores e cada um possui a linguagem que tem mais afinidade. Com a plataforma .NET, cada desenvolvedor pode utilizar a sua linguagem preferida e os seus módulos do sistema se comunicam tranqüilamente. Um desenvolvedor pode, por exemplo, fazer um componente usando Visual Basic .NET e esse componente pode ser utilizado em sistemas desenvolvidos em qualquer outra linguagem .NET, como C#, Delphi, C++, Pascal, J#, etc...

UMA ESPECIFICAÇÃO COMUM

Para permitir uma maior integração entre as linguagens que suportam a plataforma .NET, criou-se uma especificação comum para as linguagens que contém as funcionalidades básicas necessárias para as linguagens, a chamada Common Language Specification (CLS). O que isso significa na prática? Significa que existem funcionalidades definidas pela CLS que todas as linguagens possuem. É claro que alguma linguagem pode implementar funcionalidades que não são definidas pela CLS (isso é o que faz a diferença entre as linguagens), mas se o seu componente utilizar apenas funcionalidades definidas pela CLS, ele poderá ser acessado por qualquer outra linguagem que implementa a CLS. Exemplos de funcionalidades da CLS que todas as linguagens possuem são: os mais comuns tipos primitivos, como System.Int32, System.Double, System.Boolean, etc; eventos, herança, etc...

UMA LINGUAGEM INTERMEDIÁRIA

Uma das idéias que Java já trazia é a formação de código intermediário para possibilitar desenvolvimento multiplataforma. No caso de .NET, o uso de código intermediário passou a possibilitar tanto a multiplataforma quanto o desenvolvimento multilingüagem.

Se formos dar uma olhada no processo de compilação de código na Plataforma .NET, perceberemos que na realidade, há duas compilações:

  1. Quando compilamos o nosso código fonte para criarmos uma DLL ou um arquivo EXE estamos, na realidade, chamando o compilador da linguagem para que ele transforme o nosso código em uma linguagem chamada MSIL (Microsoft Intermediate Language). Essa linguagem se assemelha ao Assembly x86 que conhecemos e é a mesma para a compilação de qualquer linguagem da plataforma .NET.

  2. A segunda compilação ocorre no momento em que o seu aplicativo é executado pela primeira vez ou quando a sua DLL é referenciada pela primeira vez. Nesse ponto o .NET Framework, através da Common Language Runtime (espécie de “máquina virtual” de .NET) chama o compilador “Just-in-time” (JIT Compiler), que compila o código em MSIL para código nativo do computador. Percebemos que nesse momento não importa se o MSIL veio de C#, VB .NET ou de COBOL, já que é a mesma. É por isso que podemos fazer um componente em C# que é utilizado por uma aplicação em Delphi for .NET por exemplo, pois no final, tudo é MSIL. Eu posso também, facilmente, criar uma classe em Visual Basic .NET e a minha classe em C# herdar da classe em VB.

Na figura abaixo você pode perceber como acontece esse processo:

O código MSIL pode ser visto a partir de um aplicativo chamado ILDASM (Intermediate Language Disassembler). Esse aplicativo vem junto com o .NET Framework SDK.

Se escrevermos o famoso código de Hello World em C#, teremos:

using System;
 
namespace HelloWorldCs {
 
    public class HelloWorld {
        public static void Main() {
            Console.WriteLine(“HelloWorld!”);
        }
    }
}

Para vermos o código MSIL, abrimos o ILDASM a partir do prompt de comando do Visual Studio .NET digitando “ildasm”. Após aberto, podemos verificar qualquer DLL ou EXE produzido na plataforma .NET. Esse é o código MSIL do HelloWorld acima:

Se fizermos o mesmo código de Hello World usando Visual Basic .NET, teremos o seguinte:

Imports System
 
Module HelloWorldVB
    Sub Main()
        Console.WriteLine(“Hello World!”)
    End Sub
End Module

Se formos verificar no ILDASM o MSIL formado por esse código em VB .NET, teremos um código extremamente semelhante ao formado em C#, apenas com algumas mudanças mínimas:

Bom, por hoje é só pessoal. Espero que eu tenha ajudado a clarear as idéias de como é o funcionamento da infra-estrutura que permite à plataforma .NET ser multilingüagem. Até a próxima!

Marden Menezes

Marden Menezes - Líder do maior grupo de usuários do Brasil, o Sharp Shooters (www.sharpshooters.org.br). Marden é Microsoft Certified Professional e Microsoft Student Ambassador, ministrando palestras e cursos em todo o Brasil e difundindo a plataforma .NET nas universidades.
Como representante do comitê de relacionamento com grupos de usuários da INETA (www.ineta.org), Marden vem trabalhando para a difusão dos grupos de usuários .NET no país.