Introdução
Neste tutorial, vamos explorar o desenvolvimento prático com a linguagem de programação Modula-2, uma linguagem projetada para suportar a programação modular e o desenvolvimento de aplicações robustas. Embora menos comum em comparação com outras linguagens, Modula-2 ainda possui um espaço relevante em áreas específicas, como sistemas embarcados e programação de sistemas críticos. Abordaremos as ferramentas disponíveis para o desenvolvimento em Modula-2, discutiremos a interoperabilidade com outras linguagens e exploraremos como estruturar projetos modernos utilizando conceitos de engenharia de software. Ao final, você terá uma compreensão sólida do potencial de Modula-2 e estará preparado para implementar aplicações práticas utilizando essa linguagem.
Etapas
Instalação das Ferramentas Necessárias
Antes de começar a programar em Modula-2, você precisará de um compilador e de um ambiente de desenvolvimento. Um dos compiladores populares é o GNU Modula-2 (GM2). Siga as instruções abaixo para instalação.
commands# Verifique se o git está instalado
git --version
# Clone o repositório GM2
git clone https://github.com/GM2/GM2.git
# Acesse o diretório do GM2
cd GM2
# Compile e instale o GM2
make && sudo make installCriando seu Primeiro Programa Modula-2
Vamos criar um simples programa “Hello, World!” para garantir que sua configuração está correta. Crie um arquivo chamado `HelloWorld.Mod` com o seguinte código.
HelloWorld.ModMODULE HelloWorld; IMPORT Out; BEGIN Out.String("Hello, World!"); Out.Ln; END HelloWorld.
Compilando o Programa Modula-2
Agora que você tem seu programa, o próximo passo é compilá-lo. Use o compilador GM2 para compilar seu código.
commands# Compile o arquivo HelloWorld.Mod
gm2 HelloWorld.Mod -o HelloWorld
# Execute o programa compilado
./HelloWorldEstruturando Projetos Modernos em Modula-2
Para projetos maiores, é importante ter uma estrutura de diretórios adequada. Vamos criar uma estrutura básica de projeto com módulos separados.
commands# Crie a estrutura de diretórios
mkdir -p my_project/src my_project/lib
# Crie um arquivo de módulo chamado Math.Mod para operações
echo 'MODULE Math; EXPORT ADD; PROCEDURE ADD(a, b: INTEGER): INTEGER; BEGIN RETURN a + b; END ADD.' > my_project/src/Math.ModImplementando o Uso de Módulos
Complementando nosso projeto, vamos criar um módulo principal que utilize o módulo Math que acabamos de criar. Crie um arquivo `Main.Mod`.
Main.ModMODULE Main; IMPORT Out, Math; VAR result: INTEGER; BEGIN result := Math.ADD(5, 10); Out.Int(result, 0); Out.Ln; END Main.
Compilando e Executando Múltiplos Módulos
Para compilar o projeto que possui múltiplos módulos, você deve compilar todos os módulos juntos. Use o seguinte comando para compilar e executar o programa principal.
commands# Compile ambos os módulos
gm2 my_project/src/Main.Mod my_project/src/Math.Mod -o my_project/main
# Execute o programa principal
./my_project/mainTestes em Modula-2
Embora a cultura de testes unitários não seja tão comum em Modula-2, você pode implementar testes práticos de forma simples. Vamos criar um módulo de teste.
TestMath.ModMODULE TestMath; IMPORT Math, Out; BEGIN Out.String("Testando Math.ADD:"); Out.Ln; Out.Int(Math.ADD(2, 3), 0); Out.Ln; END TestMath.
Compilando e Executando os Testes
Agora que temos um módulo de teste, vamos compilar e executar os testes para verificar se a função está correta.
commands# Compile o módulo de teste
gm2 my_project/src/TestMath.Mod my_project/src/Math.Mod -o my_project/test
# Execute os testes
./my_project/testInteroperabilidade com C
Modula-2 permite interoperabilidade com C, o que facilita o uso de bibliotecas existentes. Neste exemplo, criaremos um módulo C simples.
C_Function.c#include <stdio.h> int add(int a, int b) { return a + b; } void printHello() { printf("Hello from C!
"); }Chamando Código C a partir de Modula-2
Vamos escrever um módulo Modula-2 que chama a função escrita em C. Isso envolve a declaração da função C no Modula-2 para que ela possa ser utilizada.
MainWithC.ModMODULE MainWithC; IMPORT Out; PROCEDURE add(a, b: INTEGER): INTEGER; EXTERN "C"; BEGIN Out.Int(add(5, 7), 0); Out.Ln; END MainWithC.
Conclusão
Neste tutorial, você mergulhou no desenvolvimento prático com Modula-2, aprendendo desde a instalação das ferramentas necessárias até a estruturação de projetos modernos e a interoperabilidade com C. Embora Modula-2 não seja tão amplamente utilizado atualmente, suas características de programação modular e a capacidade de integração com outras linguagens ainda fazem dela uma opção viável para certos tipos de aplicações. Com a base adquirida aqui, você está pronto para explorar ainda mais o potencial dessa poderosa linguagem.