Oberon (linguagem de programação)

format_list_bulleted Contenido keyboard_arrow_down
ImprimirCitar

Oberon é uma linguagem de programação de uso geral publicada pela primeira vez em 1987 por Niklaus Wirth e o mais recente membro da família Wirthian de linguagens do tipo ALGOL (Euler, ALGOL W, Pascal, Modula e Modula -2). Oberon foi o resultado de um esforço concentrado para aumentar o poder do Modula-2, o sucessor direto do Pascal, e simultaneamente reduzir sua complexidade. Seu principal novo recurso é o conceito de extensão de tipo de tipos de registro. Permite construir novos tipos de dados com base nos já existentes e relacioná-los, fugindo do dogma da tipagem estritamente estática dos dados. A extensão de tipo é a forma de herança de Wirth, refletindo o ponto de vista do site pai. O Oberon foi desenvolvido como parte da implementação de um sistema operacional, também denominado Oberon, na ETH Zurich, na Suíça. O nome vem da lua do planeta Urano, chamada Oberon.

Oberon ainda é mantido por Wirth e a última atualização do compilador do Projeto Oberon é datada de 6 de março de 2020.

Design

Oberon foi projetado com um lema atribuído a Albert Einstein em mente: “Faça as coisas o mais simples possível, mas não mais simples.” A principal diretriz foi concentrar-se nas características básicas e essenciais e omitir questões efêmeras. Outro fator foi o reconhecimento do crescimento da complexidade em linguagens como C++ e Ada. Em contraste com estes, Oberon enfatiza o uso do conceito de biblioteca para estender a linguagem. Os tipos de enumeração e subfaixa, que estavam presentes no Modula-2, foram omitidos e os tipos de conjunto são limitados a conjuntos de inteiros. Todos os itens importados devem ser qualificados pelo nome do módulo onde são declarados. As facilidades de baixo nível são destacadas por permitir que sejam utilizadas apenas em um módulo que inclua o identificador SYSTEM em sua lista de importação. Verificação rigorosa de tipo, mesmo entre módulos, e verificação de índice em tempo de execução, verificação de ponteiro nulo e o conceito de extensão de tipo seguro permitem que a programação confie apenas nas regras da linguagem.

A intenção dessa estratégia era produzir uma linguagem mais fácil de aprender, mais simples de implementar e muito eficiente. Os compiladores Oberon foram vistos como compactos e rápidos, enquanto fornecem qualidade de código comparável aos compiladores comerciais.

Características

As características que caracterizam a linguagem Oberon incluem:

  • Sintaxe sensível de caso com palavras-chave maiúsculas
  • Tipo-extensão com teste de tipo
  • Módulos e compilação separada
  • Operações de corda
  • Isolamento de código inseguro
  • Suporte para programação do sistema

Orientação do objeto

Oberon suporta extensão de tipos de registro para a construção de abstrações e estruturas heterogêneas. Em contraste com os dialetos posteriores, Oberon-2 e Active Oberon, o Oberon original carece de um mecanismo de despacho como um recurso de linguagem, mas o possui como uma técnica de programação ou padrão de design. Isso dá grande flexibilidade em OOP. No sistema operacional Oberon, duas técnicas de programação são usadas juntas para a chamada de despacho: conjunto de métodos e manipulador de mensagens.

Conjunto de métodos

Nesta técnica, uma tabela de variáveis de procedimento é definida e uma variável global deste tipo é declarada no módulo estendido e atribuída de volta no módulo genérico:

MODULO Figuras; (* Módulo abstrato *)TYPEFigura* = POINTERA Figura Desc.
Interface* = POINTERA InterfaceDesc;

InterfaceDesc* = RECORD: PROCESSO (f: Figura);
: PROCESSO (f: Figura);
Marca* PROCESSO (f: Figura);
Mexe-te. PROCESSO (f: Figura; dx, dy: INTEGRAL);
 FIM;

* RECORDSe... Interface;
 FIM;

PROCESSO Init* (f: Figura; se: Interface);
BEGIN- Sim. se
FIM Init;

PROCESSO Desenho* (f: Figura);
BEGINf.if.draw(f)
FIM Desenho;

(* Outros procedimentos aqui *)FIM Figuras.

Estendemos o tipo genérico Figura para uma forma específica:

MODULO Retângulos;

IMPORTANTE Figuras;

TYPERetângulo* POINTERA Retângulo Desc.

Retângulo Desc* RECORD(Figuras.FiguraDesc)
x, y, w, h: INTEGRAL;
 FIM;

VARse: Figuras. Interface;

PROCESSO Novo*VAR r: Retângulo);
BEGIN NOVO(r);
Figuras. Init (r, se)
FIM Novo;

PROCESSO Desenho* (f: Figura);
 VAR: Retângulo;
BEGINr:= f (Rectangle); (* f AS Rectangle *) (*... *)FIM Desenho;

(* Outros procedimentos aqui *)BEGIN (* Iniciação do módulo *) NOVO(se)
Se... Desenho;
Se estiver claro... Limpo.
Se... Mark.
Se não for preciso... Mexam-se!
FIM Retângulos.

O despacho dinâmico só é feito através de procedimentos no módulo Figuras que é o módulo genérico.

Manipulador de mensagens

Esta técnica consiste em substituir o conjunto de métodos por um único procedimento, que discrimina entre os vários métodos:

MODULO Figuras; (* Módulo abstrato *)TYPEFigura* = POINTERA Figura Desc.

Mensagem* RECORDANDO;
Desenho* RECORD (Mensagem) FIM;
Limpador* RECORD (Mensagem) FIM;
MarkMsg* RECORD (Mensagem) FIM;
Mexe-te! RECORD Dx*. INTEGRAL FIM;

Manipulador* PROCESSO (f: Figura; VAR msg: Mensagem);

* RECORD (* Resumo *)Puxador: Manipulador;
 FIM;

PROCESSO Punho* (f: Figura; VAR msg: Mensagem);
BEGINf.handle (f, msg)
FIM Lidar.

PROCESSO Init* (f: Figure; handle: Handler);
BEGIN- Não. alça
FIM Init;

FIM Figuras.

Estendemos o tipo genérico Figura para uma forma específica:

MODULO Retângulos;

IMPORTANTE Figuras;

TYPERetângulo* POINTERA Retângulo Desc.

Retângulo Desc* RECORD(Figuras.FiguraDesc)
x, y, w, h: INTEGER;
 FIM;

PROCESSO Desenho* (r: Retângulo);
BEGIN (*... *)FIM Desenho;

(* Outros procedimentos aqui *)PROCESSO Punho* (f: Figura; VAR msg: Figuras.Message);
 VAR: Retângulo;
BEGINr:= f (Rectangle);
 IF Msg É. Figuras.DrawMsg A Desenho (r)
 ELSIF Msg É. Figuras.MarkMsg A Marca(r)
 ELSIF Msg É. Figuras.MoveMsg A Move(r, msg(Figuras.MoveMsg).dx, msg(Figuras. MoveMsg).dy)
 ELSE (* ignorar *) FIMFIM Lidar.

PROCESSO Novo*VAR r: Retângulo);
BEGIN NOVO(r);
Figuras.Init (r, punho)
FIM Novo;

FIM Retângulos.

No sistema operacional Oberon, ambas as técnicas são usadas para despacho dinâmico. O primeiro é usado para um conjunto conhecido de métodos; o segundo é usado para quaisquer novos métodos declarados no módulo de extensão. Por exemplo, se o módulo de extensão Retângulos implementasse um novo procedimento Rotate(), dentro do módulo Figuras ele só poderia ser chamado por meio de um manipulador de mensagens.

Implementações e variantes

Oberon

Implementações gratuitas de Oberon (a linguagem) e Oberon (o sistema operacional) podem ser encontradas na Internet (várias são da própria ETHZ).

Oberon-2

Algumas mudanças foram feitas na primeira especificação lançada. Por exemplo, recursos de programação orientada a objetos (OOP) foram adicionados, o loop FOR foi restabelecido. O resultado foi Oberon-2. Uma versão, denominada Native Oberon, que inclui um sistema operacional e pode inicializar diretamente no hardware de classe compatível com IBM PC. A implementação A.NET do Oberon com a adição de algumas extensões secundárias relacionadas ao.NET também foi desenvolvida na ETHZ. Em 1993, uma empresa spin-off da ETHZ trouxe um dialeto de Oberon-2 para o mercado chamado Oberon-L. Em 1997, foi renomeado Component Pascal.

Os compiladores Oberon-2 desenvolvidos pela ETH incluem versões para Microsoft Windows, Linux, Solaris e Mac OS clássico. Existem implementações de outras fontes para alguns outros sistemas operacionais, incluindo Atari TOS e AmigaOS.

Existe um scanner Oberon-2 Lex e um analisador Yacc de Stephen J Bevan, da Universidade de Manchester, Reino Unido, baseado no da referência Mössenböck and Wirth. Está na versão 1.4.

Outros compiladores incluem Oxford Oberon-2, que também compreende Oberon-07, e Vishap Oberon. Este último é baseado no compilador Oberon to C source-to-source de Josef Templ (transpiler) chamado Ofront, que por sua vez é baseado no OP2 Compiler desenvolvido por Regis Crelier na ETHZ.

Oberon-07

Oberon-07, definido por Niklaus Wirth em 2007 e revisado em 2008, 2011, 2013, 2014, 2015 e 2016, é baseado na versão original do Oberon em vez do Oberon-2. As principais alterações são: funções de conversão numérica explícita (por exemplo, FLOOR e FLT) devem ser usadas, WITH, LOOP e as instruções EXIT foram omitidas, as instruções WHILE foram estendidas, as instruções CASE podem ser usadas para testes de extensão de tipo, RETURN instruções só podem ser conectadas ao final de uma função, variáveis importadas e parâmetros de valor estruturado são somente leitura e arrays podem ser atribuídos sem usar COPY.

Os compiladores Oberon-07 foram desenvolvidos para uso com muitos sistemas de computador diferentes. O compilador de Wirth visa um processador de computador com conjunto de instruções reduzido (RISC) de seu próprio projeto que foi usado para implementar a versão 2013 do sistema operacional Projeto Oberon em uma placa Spartan-3 Xilinx field-programmable gate array (FPGA). Portas do processador RISC para FPGA Spartan-6, Spartan-7, Artix-7 e um emulador RISC para Windows (compilável em Linux e macOS e binários disponíveis para Windows) também existem. OBNC compila via C e pode ser usado em qualquer sistema operacional compatível com Portable Operating System Interface (POSIX). A implementação comercial do Astrobe tem como alvo os microcontroladores ARM Cortex-M3, M4 e M7 de 32 bits. O compilador Patchouli produz binários do Windows de 64 bits. Oberon-07M produz binários do Windows de 32 bits e implementa a revisão 2008 da linguagem. A Akron's produz binários para Windows e Linux. OberonJS traduz Oberon para JavaScript. Existe IDE online para Oberon. oberonc é uma implementação para a máquina virtual Java.

Oberon ativo

Active Oberon é mais uma variante do Oberon, que adiciona objetos (com proteção de acesso centrada no objeto e controle de atividade local), asserções protegidas pelo sistema, agendamento de prioridade preemptiva e uma sintaxe alterada para métodos (chamados type-bound procedimentos no vocabulário Oberon). Os objetos podem estar ativos, o que significa que podem ser threads ou processos. Além disso, Active Oberon tem uma maneira de implementar operadores (incluindo sobrecarga), uma sintaxe avançada para usar matrizes (consulte Extensões de linguagem OberonX e Proceedings of the 7th Joint Modular Languages Conference 2006 Oxford, UK) e conhece namespaces. O sistema operacional A2 (anteriormente Active Object System (AOS), depois Bluebottle), especialmente o kernel, sincroniza e coordena diferentes objetos ativos.

A ETHZ lançou o Active Oberon que suporta objetos ativos e os sistemas operacionais baseados nele (Active Object System (AOS), Bluebottle, A2) e ambiente (JDK, HTTP, FTP, etc.) para o idioma. Como em muitos projetos anteriores da ETHZ, as versões de ambos estão disponíveis para download na Internet. A partir de 2003, as unidades de processamento central (CPUs) suportadas incluem x86 de núcleo único e duplo e StrongARM.

Idiomas relacionados

O desenvolvimento continuou nas línguas desta família. Uma outra extensão do Oberon-2 foi originalmente chamada de Oberon/L, mas posteriormente renomeada para Component Pascal (CP). O CP foi desenvolvido para Windows e Mac OS clássico pela Oberon microsystems, uma empresa comercial derivada da ETHZ, e para.NET pela Queensland University of Technology. Além disso, as linguagens Lagoona e Obliq levam os métodos Oberon para áreas especializadas.

Esforços posteriores de desenvolvimento do.NET na ETHZ se concentraram em uma nova linguagem chamada Zonnon. Isso inclui os recursos do Oberon e restaura alguns do Pascal (tipos enumerados, E/S integrados), mas possui algumas diferenças sintáticas. Outros recursos incluem suporte para objetos ativos, sobrecarga de operadores e tratamento de exceções.

Oberon-V (originalmente chamado de Seneca, em homenagem a Seneca the Younger) é um descendente de Oberon projetado para aplicações numéricas em supercomputadores, especialmente arquiteturas vetoriais ou de pipeline. Ele inclui construtores de matriz e uma instrução ALL.

Recursos

Geral

Contenido relacionado

Arte ASCII

Arte ASCII é uma técnica de design gráfico que usa computadores para apresentação e consiste em imagens reunidas a partir de 95 caracteres imprimíveis...

Dados digitais

Dados digitais, na teoria da informação e nos sistemas de informação, são informações representadas como uma sequência de símbolos discretos, cada um...

Ada (linguagem de programação)

Ada é uma linguagem de programação de alto nível estruturada, tipada estaticamente, imperativa e orientada a objetos, estendida de Pascal e outras...

Computador Atanasoff-Berry

O computador Atanasoff–Berry foi o primeiro computador digital eletrônico automático. Limitado pela tecnologia da época e execução, o dispositivo...

Sistema de nomes de domínio

O Domain Name System é um sistema de nomenclatura hierárquico e distribuído para computadores, serviços e outros recursos na Internet ou em outras redes...
Más resultados...
Tamaño del texto: