1 comentários

 
GN⁺ 2024-01-06
Opiniões no Hacker News
  • O corpo do texto foi recomposto em TeX, e foi criado um PDF mais agradável para quem tiver interesse: https://github.com/guidoism/tex-oberon

    • Legal. Deve haver uma forma não muito difícil de mudar o formato do papel; eu gostaria de mudar para A5 e encadernar por conta própria como um livro decente
    • Fico curioso para saber se dá para acompanhar esta versão do livro e construir tudo. Quero saber se não é necessário conseguir a placa FPGA original que Wirth usava
  • Depois disso, vale a pena ver também o Oberon System 3. Ele mistura o modelo de componentes Gadgets com compiladores JIT/AOT
    "The Oberon companion - a guide to using and programming Oberon System 3"
    https://www.semanticscholar.org/paper/The-Oberon-companion-a...
    O código-fonte pode ser visto no fork de Rochus
    https://github.com/rochus-keller/OberonSystem3
    Ou há também a linha que levou ao Active Oberon, embora não tenha sido feita diretamente por Niklaus Wirth
    https://gitlab.inf.ethz.ch/felixf/oberon
    Capturas de tela e manual do sistema operacional
    https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/ocp/Doc...
    Há também o Component Pascal e a IDE Blackbox, criados por uma startup saída da ETHZ
    https://blackboxframework.org/index.php

  • Isto é apenas a primeira metade do livro. Todas as partes e o software podem ser encontrados aqui: https://people.inf.ethz.ch/wirth/ProjectOberon/

  • O maior capítulo da edição de 1992 tratava do compilador que traduzia programas Oberon para código do processador NS32032, mas agora esse processador nem está mais disponível e sua arquitetura dificilmente seria recomendável. Por isso, em vez de escrever um novo compilador para uma arquitetura comercial, achei interessante a parte em que ele diz que projetou a própria arquitetura para estender a simplicidade e a regularidade até o hardware
    Graças a essa decisão, tornou-se possível descrever de forma completa e rigorosa não só o software do Oberon System, mas também o hardware; esse processador é chamado de RISC, e todos os módulos de hardware são descritos em Verilog
    Fico curioso para saber como ele se compara ao Nand to Tetris. Fora isso, parece realmente interessante, e queria saber se alguém já leu

    • Como outra pessoa comentou, não é voltado a iniciantes. Primeiro você provavelmente vai precisar de parte, talvez da maior parte, do conhecimento de base do NAND 2 Tetris
      Por exemplo, a parte sobre o processador no capítulo 16 já joga você direto no meio do código Verilog. A interface da CPU com o barramento do sistema, os registradores e o modo de operação da unidade de multiplicação aparecem logo de cara
      A parte boa é a explicação das decisões de projeto e dos trade-offs. É uma sabedoria valiosa deixada por Niklaus Wirth no fim da carreira, com base em uma vida inteira de experiência. Ele era um daqueles raros eruditos que entendia ampla e profundamente tanto de circuitos quanto de ciência da computação mais abstrata, e sempre procurava generalizar e compreender princípios, explicando o processo de desenvolvimento dentro de seu contexto histórico
      Por ser Wirth, muitas vezes as aulas de história se baseiam em experiência pessoal, e acho que isso resulta em uma ótima síntese. Por exemplo:

      The second [interface] (MouseX) is included here for historical reasons. It was used by the computer Lilith in 1979, and used the same Mouse as its ancestor Alto (at PARC, 1975). It is distinguished by a very simple hardware without its own microprocessor, which is currently contained in most mice. This goes at a cost of a 9-wire cable. But today, microprocessors are cheaper than cables. We include this interface here, because it allows for a simple explanation of the principle of pointing devices.

    • Nand2Tetris é o projeto introdutório perfeito nessa área, abrangendo projeto de hardware, sistema operacional e compilador
      Dito isso, depois de fazê-lo até o fim por conta própria, senti que faltam profundidade e exploração mais aprofundada em todos os temas. Mas é justamente por isso que ele é um projeto introdutório perfeito
      A Universidade de Tóquio também tem um projeto parecido, que acho que pode servir como ponte. Veja o experimento de CPU: https://ytsmiling.tech/2017/04/02/cpuex.html
      Se não gostar, provavelmente será por falta de documentação; nesse estágio, você já pode projetar seu próprio projeto. Basicamente, comece com um subprojeto de CPU usando Verilog ou alguma linguagem de descrição de hardware, e depois avance para projetos de sistema operacional e compilador
    • Project Oberon descreve como é o sistema final. Não é um tutorial que leva você passo a passo do básico até um sistema completo
    • O processador RISC de Wirth é muito mais simples de explicar e programar do que o processador do TECS/Nand2Tetris. Eu diria que o processador do Nand2Tetris é quase inutilizável
      Passei pelo processo de “projetar” o processador do Nand2Tetris no nandgame, e acho que o processador do Nand2Tetris deve ser mais simples para ligar com portas lógicas
      Mas o processador RISC de Wirth deve ser muito mais fácil de rodar em um FPGA ou simular com o Verilator. Isso porque ele usa uma linguagem real de descrição de hardware, não algo parecido com uma linguagem de descrição de hardware imaginada por alguém que nunca projetou hardware
      Talvez, se escrito em Verilog, o processador do Nand2Tetris possa ter menos linhas de código. Ele deve ser bastante parecido com "a tiny computer for teaching", de Chuck Thacker https://www.cl.cam.ac.uk/teaching/1112/ECAD+Arch/files/Thack..., que, assim como o processador do Nand2Tetris, é baseado na arquitetura Data General Nova
      O Nand2Tetris leva você de portas NAND até Tetris e um interpretador de bytecode. Já o Oberon começa em Verilog sintetizável e leva até um sistema operacional com GUI totalmente utilizável, capaz de recompilar seu próprio código-fonte
      Infelizmente, não dá para rodar o Vivado nele, então ele não consegue sintetizar novamente seu próprio bitstream de FPGA. Mas, como alguém comentou abaixo, parece que ele consegue simular o próprio hardware
      Uma coisa que os dois têm em comum é que nenhum dos dois tem um nome aproveitável para a arquitetura do processador
    • A estrutura didática é muito mais fraca do que a de Nand to Tetris. Se você precisa de conhecimento prévio, é melhor ler aquilo primeiro e depois este livro
      Mais tarde, Wirth transferiu a descrição do hardware para Lola, uma HDL criada por ele
  • Nos últimos cinco anos, a ideia de um computador educacional não saiu da minha cabeça
    Pensando no hardware e nos sistemas operacionais modernos, é praticamente impossível ter uma máquina simples o bastante para ensinar à geração mais jovem. Consoles de fantasia como o pico-8 são uma boa opção para programação, mas não servem para entender o hardware por baixo
    Por isso acho que as escolas ainda usam arquiteturas antigas no ensino

    • Uma implementação mínima de RISC-V é bem simples. Também há a implementação RISC-V do xv6. Mas é preciso um pouco mais do que uma implementação RISC-V absolutamente mínima; especificamente, CSR, modos M/S/U e paginação
      Se memória paginada não for necessária, dá para usar só os modos M e U. Tenho um pequeno sistema operacional de tempo real mirando alguns microcontroladores WCH com essa configuração. Ele usa PMP, mas nem isso é estritamente necessário
    • Hardware vintage de 8 bits é muito fácil de entender e ensina fundamentos que continuam valendo hoje
      Os vídeos do Ben Eater no YouTube são excelentes para isso. Tanto o projeto com 6502 quanto o computador artesanal feito “do zero” em uma protoboard são bons
    • Um computador com o qual seja possível aprender a conversar, de alguma forma, com outros computadores parece ser a solução ideal
      Agora, graças aos LLMs, isso ficou ao alcance, e o desafio restante parece ser conectar os computadores de algum modo, ou seja, o problema de compatibilidade de hardware. Do lado do software, ele precisaria conseguir entender, de alguma forma, o software do outro lado
  • As páginas 59 a 75 tratam de uma implementação rápida de piece list. É um tema que também apareceu recentemente no HN
    Acrescentando: houve várias threads no HN sobre formas de representar buffers de texto para edição rápida:
    https://news.ycombinator.com/item?id=15381886
    https://news.ycombinator.com/item?id=11244103
    https://news.ycombinator.com/item?id=14129543
    https://news.ycombinator.com/item?id=15387672
    https://news.ycombinator.com/item?id=14046446

  • Que o professor Wirth descanse em paz
    Como observação lateral, seria possível colocar uma tag melhor para mostrar que esse link é um arquivo PDF? A fonte parece confiável, mas sempre fico tenso quando uma URL leva a um PDF

    • Seu apelo por lean software sempre vale a leitura
      [1] https://cr.yp.to/bib/1995/wirth.pdf
    • Links que levam a PDFs normalmente recebem [pdf] no fim
    • Fico curioso sobre o que exatamente preocupa você em um arquivo PDF
    • A URL já termina com .pdf
  • Na universidade, escrevi um compilador Oberon em uma disciplina de compiladores
    Não consegui encontrar o site original da disciplina, mas este site, com material de alguns anos antes da época em que eu fiz, parece ser mais ou menos isso: https://cseweb.ucsd.edu/~wgg/CSE131B/
    Era uma ótima linguagem para ensino

  • Isto é uma joia. Fico curioso se há alguma tentativa de reaproveitar o Oberon como um “computador” móvel

  • Fico curioso se alguém atualizou o livro para poder trabalhar com placas FPGA mais novas