Modula-2 - Modula-2


Da Wikipédia, a enciclopédia livre
Modula-2
Paradigma imperativas , estruturado , modular , dados e procedimento esconderijo , concorrente
Projetado por Niklaus Wirth
Apareceu pela primeira vez 1978
disciplina Typing forte, estática
OS Multi-plataforma
extensões de arquivo .mod, .m2, .def, MOD, .def, .MI, Md
grandes implementações
Compilador ETH escrito por Niklaus Wirth
GNU Modula-2
ADW Modula-2
dialetos
PIM2, PM3, PIM4, ISO
Influenciado por
Modula , Mesa , Pascal , Algol-W , Euclides
Influenciado
Modula-3 , Oberon , Ada , Fortran 90 , Lua , Seed7 , Zonnon , Modula-GM

Modula-2 é um computador linguagem de programação projetado e desenvolvido entre 1977 e 1985 por Niklaus Wirth no Instituto Federal Suíço de Tecnologia de Zurique ( ETH Zurich ) como uma revisão de Pascal para servir como a linguagem de programação exclusiva para o sistema operacional e aplicativos de software para a estação de trabalho pessoal Lilith . Os principais conceitos foram:

  • O módulo como uma unidade de compilação para compilação separada
  • O co-rotina como o bloco de construção básico para processos simultâneos
  • Tipos e procedimentos que permitam o acesso a dados específicos da máquina.

Wirth visto Modula-2 como um sucessor para suas linguagens de programação anteriores Pascal e Modula . O projeto de linguagem também foi influenciado pela Mesa linguagem e as novas possibilidades de programação do início do computador pessoal Xerox Alto , ambos da Xerox, que Wirth viu durante seu 1976 sabático ano na Xerox PARC . A revista de informática BYTE dedicou a edição de agosto de 1984 para a linguagem e seu ambiente circundante.

Descrição

Modula-2 é um propósito geral linguagem procedural , suficientemente flexível para fazer programação de sistemas, mas com aplicação muito mais ampla. Em particular, ele foi projetado para suportar compilação separada e abstração de dados de uma forma simples. Grande parte da sintaxe é baseada na linguagem mais cedo e mais conhecida de Wirth, Pascal . Modula-2 foi concebida para ser bastante semelhante ao Pascal, com alguns elementos e ambiguidades sintáticos removido e a adição importante do módulo conceito, e suporte ao idioma directa para multiprogramming .

Aqui está um exemplo do código-fonte para o programa "Olá, mundo":

MODULE Hello;
FROM STextIO IMPORT WriteString;
BEGIN
  WriteString("Hello World!");
END Hello.

O Modula-2 módulo podem ser utilizados para encapsular um conjunto de subprogramas relacionados e estruturas de dados, e restringir a sua visibilidade a partir de outras porções do programa. O design do módulo implementado o recurso de abstração de dados de Modula-2 de uma forma muito limpa. Programas Modula-2 são compostos por módulos, cada um dos quais é constituído por duas partes: um módulo de definição , a parte de interface, que contém apenas aquelas partes do subsistema que são exportados (visíveis para os outros módulos), e um módulo de aplicação , que contém o código de trabalho que é interno ao módulo.

A linguagem tem controle âmbito estrito. Em particular, o âmbito de um módulo pode ser considerado como uma parede impenetrável: Excepto para identificadores padrão nenhum objecto do mundo exterior é visível no interior de um módulo, a menos que explicitamente importada; nenhum objecto módulo interno é visível a partir do exterior a menos que explicitamente exportados.

Suponha que as exportações módulo M1 objetos a, b, c, e P enumerando seus identificadores em uma lista de exportação explícita

  DEFINITION MODULE M1;
    EXPORT QUALIFIED a, b, c, P;
    ...

Em seguida, os objectos a, b, c, e P a partir de módulo M1 tornar-se agora conhecido fora módulo M1 como M1.a, M1.b, M1.c, e M1.P. Eles são exportados em um qualificado forma ao universo (módulo assumiu M1 é global). O nome do módulo de exportação, ou seja, M1, é usado como um qualificador seguido pelo nome do objecto.

módulo Suponha M2 contém a seguinte declaração de importação

  MODULE M2;
    IMPORT M1;
    ...

Então isso significa que os objetos exportados pelo módulo M1 ao universo do seu programa de inclusão pode agora ser usado dentro do módulo M2. Eles são referenciados em um qualificado maneira como isto: M1.a, M1.b, M1.c e M1.P. Exemplo:

    ...
    M1.a := 0;
    M1.c := M1.P(M1.a + M1.b);
    ...

exportação qualificado evita conflitos de nome: Por exemplo, se um outro módulo M3 também exportar um objeto chamado P, então podemos ainda distinguir os dois objetos, uma vez M1.P difere M3.P. Graças à exportação qualificado não importa que ambos os objetos são chamados P dentro de seus módulos exportadores M1 e M3.

Há uma técnica alternativa disponível, que é largamente utilizado por Modula-2 programadores. Suponha módulo M4 é formulado como este

  MODULE M4;
    FROM M1 IMPORT a, b, c, P;

Em seguida, isto significa que os objectos exportados pelo módulo M1 para o universo pode de novo ser utilizada no interior do módulo M4, mas agora através de simples referências aos identificadores exportados de uma forma "não qualificado" como este: a, b, c, e P. Exemplo:

    ...
    a := 0;
    c := P(a + b);
    ...

Esta técnica de importação unqualifying permite o uso de variáveis e outros objetos fora do seu módulo exportador exatamente o mesmo simples, ou seja, sem ressalvas , a maneira como dentro do módulo de exportação. As paredes que cercam todos os módulos já se tornaram irrelevantes para todos os objetos para os quais esta foi explicitamente permitidos. Claro importação unqualifying só é utilizável se não há conflitos de nome.

Estas regras de exportação e importação pode parecer desnecessariamente restritiva e detalhado. Mas eles não unicamente salvaguardar objetos contra acessos indesejados, mas também tem o efeito colateral agradável de fornecer a referência cruzada automática da definição de cada identificador em um programa: se o identificador é qualificada por um nome do módulo, então a definição vem de esse módulo. Caso contrário, se ocorrer sem ressalvas, basta pesquisar para trás, e você quer encontrar uma declaração de que identificador, ou sua ocorrência em uma declaração de importação que dá nome ao módulo vem. Esta propriedade torna-se muito útil quando se tenta entender grandes programas contêm muitos módulos.

A linguagem prevê (limitada) de simultaneidade de processador único ( monitores , co-rotinas e transferência explícita de controle) e para acesso ao hardware (endereços absolutos, manipulação de bits, e interrupções ). Ele usa um sistema do tipo nominal .

dialetos

Existem dois principais dialetos do Modula-2. O primeiro é PIM , em homenagem ao livro "Programação em Modula-2" por Niklaus Wirth. Havia três principais edições do PIM, o segundo, o terceiro (corrigido) e quarta edições, cada um descrevendo ligeiras variantes da língua. A segunda grande dialeto é ISO , a partir do esforço de padronização pela Organização Internacional de Normalização . Aqui estão algumas das diferenças entre eles.

  • PIM2 (1983)
    • Necessário explícita EXPORT cláusula em módulos de definição.
    • Função TAMANHO precisa ser importado a partir do módulo SISTEMA
  • PM3 (1985)
    • Removido o EXPORT cláusula de módulos de definição após a observação de que tudo dentro de um módulo de definição define a interface para esse módulo, daí a EXPORT cláusula foi redundante.
    • Função TAMANHO é generalizada (visível em qualquer escopo sem importar)
  • PIM4 (1988)
    • Especificado o comportamento do MOD operador quando os operandos são negativos.
    • Exigia que todos matriz de char cordas para ser denunciado por ASCII NUL, mesmo que a corda se encaixa exatamente na sua matriz.
  • ISO (1996 e 1998)
    • ISO Modula-2 resolveu a maioria das ambiguidades no PIM Modula-2. É adicionado a tipos de dados COMPLEXO e LONGCOMPLEX , excepções, terminação módulo ( FINALMENTE cláusula) e um padrão completo biblioteca de I / O. Existem inúmeras pequenas diferenças e esclarecimentos.

supersets

Existem várias supersets de Modula-2 com extensões de linguagem para domínios de aplicação específicos:

  • supersets PIM
    • Canterbury Modula-2 , estendida com registos extensíveis Oberon-like [Esta foi retirada e já não está disponível em qualquer lugar]
    • Modula-2 + , estendido com roscas de preferência e de excepções
    • Modula-2 * , extensão paralela
    • Modula-P , outro ramal paralelo
    • Modula-Prolog, adicionando uma camada Prolog
    • Modula / R, com extensões de base de dados relacionais
    • Modula-GM, as extensões dos sistemas embarcados
  • superconjuntos ISO
    • Mod51 , estendido com IEC1131 constrói para desenvolvimento de sistemas embarcados

derivativos

Existem várias línguas derivativos que se assemelham Modula-2 muito de perto, mas são novos idiomas em seu próprio direito. A maioria são diferentes línguas com finalidades diferentes e com pontos fortes e fracos de sua própria:

  • Modula-3 , desenvolvido por uma equipe de ex-empregados da Xerox que se mudou para DEC e Olivetti
  • Oberon , desenvolvido na ETH Zürich para Sistema Oberon disponível on-line .
  • Oberon-2 , Oberon com extensões OO
  • Ativo Oberon , mais uma extensão orientada a objeto de Oberon , desenvolvido também em ETH com o objetivo principal de apoiar a programação paralela em sistemas com múltiplos processadores e núcleos.
  • Parallaxis , uma linguagem de programação de dados em paralelo independente de máquina
  • Umbriel , desenvolvido por Pat Terry como língua de ensino
  • YAFL , uma linguagem de pesquisa por Dario Blasband

Muitas outras linguagens de programação atuais adotaram características de Modula-2.

elementos de linguagem

Palavras reservadas

PIM [2,3,4] define os seguintes 40 palavras reservadas:

AND         ELSIF           LOOP       REPEAT
ARRAY       END             MOD        RETURN
BEGIN       EXIT            MODULE     SET
BY          EXPORT          NOT        THEN
CASE        FOR             OF         TO
CONST       FROM            OR         TYPE
DEFINITION  IF              POINTER    UNTIL
DIV         IMPLEMENTATION  PROCEDURE  VAR
DO          IMPORT          QUALIFIED  WHILE
ELSE        IN              RECORD     WITH

identificadores Invasivos

PIM [3,4] define os seguintes 29 identificadores invasivos (internos):

ABS         EXCL            LONGINT    REAL
BITSET      FALSE           LONGREAL   SIZE
BOOLEAN     FLOAT           MAX        TRUE
CAP         HALT            MIN        TRUNC
CARDINAL    HIGH            NIL        VAL
CHAR        INC             ODD
CHR         INCL            ORD
DEC         INTEGER         PROC

Use em sistemas embarcados

Cambridge Modula-2

Cambridge Modula-2 por microprocessador Sistemas Cambridge baseia-se num subconjunto de PIM4 com extensões de linguagem para o desenvolvimento integrado. O compilador é executado no DOS e gera código para M68k microcontroladores embarcados baseados executam o sistema operacional MINOS.

Mod51

Mod51 por Mandeno Granville Electronics está baseado na ISO Modula-2 com extensões de linguagem para desenvolvimento de sistemas embarcados seguintes IEC1131, um padrão da indústria para controladores lógicos programáveis (CLP) estreitamente relacionadas com Modula-2. O compilador Mod51 gera código independente para 80C51 microcontroladores baseados.

Modula-GM

Delco Electronics , em seguida, uma subsidiária da GM Hughes Electronics , desenvolveu uma versão do Modula-2 para sistemas de controle embutidos começando em 1985. Delco nomeou-o Modula-GM. Foi a primeira linguagem de alto nível usada para substituir o código de linguagem de máquina para sistemas embarcados em unidades de controle motor do Delco (ECU). Este foi significativa porque Delco foi produzindo mais de 28.000 ECU por dia, em 1988, para a GM; este foi, então, o maior produtor mundial de ECU. A primeira utilização experimental de Modula-GM em um controlador incorporado estava na 1985 Antibloqueio de Travagem controlador do sistema que foi baseado no Motorola 68xxx microprocessador, e, em 1993, Gen-4 ECU utilizado pelo carrinho (Championship Auto competência Selecção) e IRL (Indianapolis racing League) equipes. O primeiro uso de produção de Modula-GM foi a sua utilização em caminhões da GM começando com o modelo 1990 ano VCM (Módulo de Controle do Veículo) usado para gerenciar da GM Powertrain Vortec motores. Modula-GM também foi usado em todas as ECUs para GM 90 ° Buick V6 família 3800 Series II utilizado no ano 1997-2005 modelo Buick Park Avenue . Os compiladores Modula-GM e ferramentas de gerenciamento de software associados foram adquiridos por Delco de Intermetrics .

Modula-2 foi escolhido como base para a linguagem de alto nível de Delco por causa de seus muitos pontos fortes em relação a outras opções de idioma alternativos em 1986. Após Delco Electronics foi desmembrada da GM (com outras divisões de componentes) para formar Delphi em 1997, global sourcing necessário que uma linguagem de software de alto nível não-proprietária ser usado. Software incorporado ECU agora desenvolvido em Delphi é compilado com compiladores C comerciais.

compiladores

  • ACK Modula-2 para MINIX ( gratuito )
  • ADW Modula-2 ADW Modula-2 para Windows, conformidade com ISO, ISO / IEC 10514-1, ISO / IEC 10514-2 (extensão OO), ISO / IEC 10514-3 (extensão genérica) (gratuito)
  • Aglet Modula-2 para Amiga OS 4.0 / PPC (freeware)
  • Cambridge Modula-2 para vários micro-controladores e incorporado sistema operacional MINOS (comercial + software proprietário )
  • FST cabido Software Tools Modula-2 para DOS (freeware)
  • Jardins Ponto Modula-2 para BSD, Linux, OS / 2 e Solaris - ISO compliant (freeware), em 30 de julho de 2014, o site originais é baixo
  • Jardins Ponto Modula-2 (GPM / CLR) para .NET (freeware)
  • GNU Modula-2 para plataformas do CCG, versão 1.0 lançado 11 de dezembro de 2010; PIM2, PM3, PIM4, e conformidade com ISO ( software livre , GPL )
  • M2Amiga para Amiga ( software livre )
  • M2M por N. Wirth e colaboradores de ETH Zurique, independente da plataforma, gera M-código para máquina virtual (gratuito)
  • MacMETH por N. Wirth e colaboradores da ETH Zurich para Macintosh, mas clássico somente (freeware)
  • Mod51 para a 80x51 família micro-controlador Intel, ISO compatível, extensões IEC1132 (+ comercial proprietária )
  • Megamax Modula-2 para computadores Atari ST por T. Tempelmann. Documentação apenas em língua alemã.
  • Modula-2 R10 compilador referência para Modula-2 R10 (código-fonte aberto / peer-review)
  • ModulaWare para OpenVMS, tanto VAX e Alpha, ISO compatível (+ comercial proprietária )
  • MTC Modula-2 a C tradutor, disponível em Modula-2 e C fonte ( software livre )
  • Native XDS-x86 para Windows e Linux (x86), ISO compliant, TopSpeed biblioteca compatível (freeware)
  • p1 Modula-2 para Macintosh, tanto clássico e Mac OS X (PPC e só API de carbono), ISO compliant (comercial + proprietária )
  • O Karlsruhe Modula-2 Compiler MOCKA para várias plataformas, PIM compatível (comercial, freeware versões Linux / BSD)
  • TDI Modula-2 para Atari ST do sistema comercial TDI Software Inc. plena implementação PIM2 para desenvolver software de 32 bits para o Atari ST e sua envrironment gráfica GEM. Esta empresa desapareceu, mas foi localizado em Dallas, Texas, EUA.
  • TERRA M2VMS para OpenVMS, tanto VAX e Alpha, PIM compatível (+ comercial proprietária )
  • O Modula-2 Sistema de Ulm para Solaris, SPARC e MC68K (software livre, GPL )
  • XDS-C para Windows e Linux, de 16 e plataformas de 32 bits, visando C (K & R & ANSI), ISO compliant, TopSpeed biblioteca compatível (freeware)

Fonte para todas as entradas: Modula2.net

livros

  • Niklaus Wirth, " Programação em Modula-2 ", quarta edição, 1988, ISBN  978-0-387-96051-7
  • KN King, Modula-2 , ISBN  0-669-11091-4
  • Richard J. Sutcliffe, " Modula-2: Abstrações de Dados e Programação Estruturas " (Usando ISO-Standard Modula-2) 2004-2005 Edição
  • Gleaves, Richard, " Modula-2 para Pascal programadores ", primeira edição de 1984, ISBN  978-0-387-96051-7 .
  • Cooper, Doug Oh My! Modula-2: Uma Introdução à Programação , 1991, ISBN  0393961079

Veja também

Referências

links externos

Este artigo é baseado em material retirado do foldoc antes de 1 de Novembro de 2008 e constituída sob as "novas licenças" termos da GFDL , versão 1.3 ou posterior.