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
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
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
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
1 comentários
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
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
Para estudar o código-fonte, é possível usar esta ferramenta: https://github.com/Rochus-Keller/ActiveOberon
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
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:
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
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
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
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
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
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
[1] https://cr.yp.to/bib/1995/wirth.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