Oberon (linguagem de programação)
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
Dados digitais
Ada (linguagem de programação)
Computador Atanasoff-Berry
Sistema de nomes de domínio