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 MenezesNessa 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:
- 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.
- 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!