Super. Il doit y avoir un moyen pas trop compliqué de changer le format de papier ; j’aimerais le passer en A5 et le faire relier moi-même en un livre correct.
Je me demande s’il est possible de suivre cette version du livre pour construire l’ensemble. J’aimerais savoir s’il n’est pas nécessaire de se procurer la carte FPGA originale qu’utilisait Wirth.
Dans l’édition de 1992, le plus gros chapitre portait sur un compilateur traduisant les programmes Oberon en code pour le processeur NS32032, mais ce processeur est désormais introuvable et son architecture est difficile à recommander. Du coup, au lieu d’écrire un nouveau compilateur pour une architecture commerciale, il est intéressant de voir qu’ils ont choisi de concevoir eux-mêmes le matériel afin d’étendre la simplicité et la régularité jusqu’au hardware
Grâce à cette décision, il est devenu possible de décrire de manière complète et rigoureuse non seulement le logiciel de l’Oberon System, mais aussi le matériel ; le processeur est qualifié de RISC et tous les modules matériels sont décrits en Verilog
Je me demande comment cela se compare à Nand to Tetris. À part ça, ça a vraiment l’air passionnant ; je me demande si quelqu’un l’a lu
Comme quelqu’un d’autre l’a dit, ce n’est pas destiné aux débutants. Il faut d’abord avoir une partie, peut-être même la majeure partie, des prérequis de NAND 2 Tetris
Par exemple, la partie sur le processeur au chapitre 16 vous plonge directement au milieu du code Verilog. L’interface du CPU avec le bus système, les registres et le fonctionnement de l’unité de multiplication apparaissent tout de suite
Le bon côté, ce sont les explications sur les décisions de conception et les compromis. C’est précieux, car c’est la sagesse laissée par Niklaus Wirth à la fin de sa carrière, forte de toute une vie d’expérience. C’était un érudit rare, avec une compréhension à la fois vaste et profonde des circuits et de l’informatique plus abstraite ; il cherchait toujours à généraliser et à comprendre les principes, tout en expliquant les évolutions dans leur contexte historique
Comme c’est Wirth, le cours d’histoire s’appuie souvent sur son expérience personnelle, et je pense que c’est ce qui donne une bonne synthèse. Par exemple :
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 est le projet d’introduction parfait à ce domaine, couvrant la conception du matériel, d’un système d’exploitation et d’un compilateur
Cela dit, après l’avoir mené moi-même jusqu’au bout, j’ai trouvé qu’il manquait de profondeur et d’exploration approfondie sur tous les sujets. Mais c’est précisément pour cela que c’est un projet d’introduction parfait
L’université de Tokyo propose aussi un projet similaire, qui peut servir de tremplin. Voir l’expérience CPU : https://ytsmiling.tech/2017/04/02/cpuex.html
Si cela ne vous convient pas, ce sera probablement à cause du manque de documentation ; à ce stade, vous pouvez aussi concevoir votre propre projet. En gros, commencez par un sous-projet de CPU utilisant Verilog ou n’importe quel langage de description matérielle, puis enchaînez avec des projets de système d’exploitation et de compilateur
Project Oberon décrit à quoi ressemble le système final. Ce n’est pas un tutoriel qui vous mène pas à pas des bases jusqu’à un système complet
Le processeur RISC de Wirth est beaucoup plus simple à expliquer et à programmer que le processeur TECS/Nand2Tetris. À mon avis, le processeur Nand2Tetris est presque inutilisable
J’ai suivi le processus de « conception » du processeur Nand2Tetris dans nandgame, et il me semble que le processeur Nand2Tetris est plus simple à câbler avec des portes logiques
Mais le processeur RISC de Wirth sera bien plus facile à faire tourner sur un FPGA ou à simuler avec Verilator. Parce qu’il utilise un vrai langage de description matérielle, et non quelque chose qui ressemble à un langage de description matérielle imaginé par quelqu’un qui n’a jamais conçu de hardware
Écrit en Verilog, le processeur Nand2Tetris demanderait probablement moins de code. Il serait assez proche de « a tiny computer for teaching » de Chuck Thacker https://www.cl.cam.ac.uk/teaching/1112/ECAD+Arch/files/Thack..., qui, comme le processeur Nand2Tetris, s’appuie sur l’architecture Data General Nova
Nand2Tetris vous mène des portes NAND jusqu’à Tetris et à un interpréteur de bytecode. Oberon, lui, part de Verilog synthétisable et vous emmène jusqu’à un système d’exploitation graphique pleinement utilisable, capable de recompiler son propre code source
Malheureusement, on ne peut pas exécuter Vivado dessus, donc il ne peut pas resynthétiser son propre bitstream FPGA. Mais comme quelqu’un l’a dit plus bas, il semble pouvoir simuler son propre matériel
Leur point commun est qu’aucun des deux ne donne de nom vraiment utilisable à l’architecture du processeur
La structure pédagogique est beaucoup plus faible que celle de Nand to Tetris. Si vous avez besoin de prérequis, mieux vaut lire celui-ci d’abord, puis lire ce livre
Plus tard, Wirth a porté la description matérielle vers Lola, le HDL qu’il avait créé
Ces cinq dernières années, l’idée d’un ordinateur pédagogique n’a cessé de me trotter dans la tête
Quand on pense au matériel et aux systèmes d’exploitation modernes, il est pratiquement impossible d’avoir une machine assez simple pour être enseignée aux jeunes générations. Les consoles fantasmées comme pico-8 sont un bon choix pour la programmation, mais ne conviennent pas vraiment pour comprendre le matériel sous-jacent
C’est sans doute pour cela qu’on utilise encore de vieilles architectures à l’école
Une implémentation minimale de RISC-V est assez simple. Il existe aussi une implémentation RISC-V de xv6. Cela dit, il faut un peu plus qu’une implémentation RISC-V absolument minimale, en particulier les CSR, les modes M/S/U et la pagination
Si la mémoire paginée n’est pas nécessaire, les seuls modes M et U peuvent suffire. J’ai un petit système d’exploitation temps réel qui cible certains microcontrôleurs WCH avec cette configuration. Il utilise PMP, mais même cela n’est pas strictement indispensable
Le matériel 8 bits vintage est très facile à comprendre et enseigne des bases qui restent pleinement applicables aujourd’hui
Les vidéos YouTube de Ben Eater sont excellentes pour cela. Son projet 6502 comme son ordinateur artisanal construit « à partir de zéro » sur breadboard sont tous les deux très bien
Un ordinateur permettant d’apprendre d’une manière ou d’une autre à communiquer avec d’autres ordinateurs me semble être la solution idéale
Avec les LLM, c’est désormais à portée de main, et le défi restant semble être de connecter les ordinateurs d’une façon ou d’une autre, autrement dit le problème de compatibilité matérielle. Côté logiciel, il faudrait pouvoir comprendre, d’une manière ou d’une autre, le logiciel en face
Paix à l’âme du professeur Wirth
À part ça, pourrait-on ajouter un meilleur tag pour indiquer que ce lien pointe vers un fichier PDF ? La source a l’air fiable, mais je suis toujours sur mes gardes quand une URL mène à un PDF
Les liens qui pointent vers des PDF portent généralement [pdf] à la fin
Je serais curieux de savoir ce qui vous inquiète précisément dans les fichiers PDF
L’URL se termine déjà par .pdf
À l’université, dans un cours de compilateurs, j’ai écrit un compilateur Oberon
Je ne retrouve pas le site original du cours, mais ce site, qui date de quelques années avant la période où je l’ai suivi, semble correspondre à peu près : https://cseweb.ucsd.edu/~wgg/CSE131B/
C’était un excellent langage pédagogique
C’est une pépite. Je me demande s’il existe des tentatives de réutiliser Oberon comme « ordinateur » mobile
Je me demande si quelqu’un a mis le livre à jour pour pouvoir travailler avec des cartes FPGA plus récentes
1 commentaires
Avis sur Hacker News
J’ai recomposé le texte avec TeX et créé un PDF plus agréable à lire pour les personnes intéressées : https://github.com/guidoism/tex-oberon
Ensuite, il vaut aussi la peine de regarder Oberon System 3. On y trouve un mélange du modèle de composants Gadgets et de compilateurs JIT/AOT.
"The Oberon companion - a guide to using and programming Oberon System 3"
https://www.semanticscholar.org/paper/The-Oberon-companion-a...
Le code source est disponible dans le fork de Rochus :
https://github.com/rochus-keller/OberonSystem3
Ou bien il existe aussi la lignée qui mène à Active Oberon, même si elle n’est pas directement due à Niklaus Wirth :
https://gitlab.inf.ethz.ch/felixf/oberon
Captures d’écran et manuel du système d’exploitation :
https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/ocp/Doc...
Il existe aussi Component Pascal et l’IDE Blackbox, créés par une startup issue de l’ETHZ :
https://blackboxframework.org/index.php
Pour étudier le code source, on peut utiliser cet outil : https://github.com/Rochus-Keller/ActiveOberon
Ceci ne correspond qu’à la première moitié du livre. Toutes les parties et les logiciels sont disponibles ici : https://people.inf.ethz.ch/wirth/ProjectOberon/
Dans l’édition de 1992, le plus gros chapitre portait sur un compilateur traduisant les programmes Oberon en code pour le processeur NS32032, mais ce processeur est désormais introuvable et son architecture est difficile à recommander. Du coup, au lieu d’écrire un nouveau compilateur pour une architecture commerciale, il est intéressant de voir qu’ils ont choisi de concevoir eux-mêmes le matériel afin d’étendre la simplicité et la régularité jusqu’au hardware
Grâce à cette décision, il est devenu possible de décrire de manière complète et rigoureuse non seulement le logiciel de l’Oberon System, mais aussi le matériel ; le processeur est qualifié de RISC et tous les modules matériels sont décrits en Verilog
Je me demande comment cela se compare à Nand to Tetris. À part ça, ça a vraiment l’air passionnant ; je me demande si quelqu’un l’a lu
Par exemple, la partie sur le processeur au chapitre 16 vous plonge directement au milieu du code Verilog. L’interface du CPU avec le bus système, les registres et le fonctionnement de l’unité de multiplication apparaissent tout de suite
Le bon côté, ce sont les explications sur les décisions de conception et les compromis. C’est précieux, car c’est la sagesse laissée par Niklaus Wirth à la fin de sa carrière, forte de toute une vie d’expérience. C’était un érudit rare, avec une compréhension à la fois vaste et profonde des circuits et de l’informatique plus abstraite ; il cherchait toujours à généraliser et à comprendre les principes, tout en expliquant les évolutions dans leur contexte historique
Comme c’est Wirth, le cours d’histoire s’appuie souvent sur son expérience personnelle, et je pense que c’est ce qui donne une bonne synthèse. Par exemple :
Cela dit, après l’avoir mené moi-même jusqu’au bout, j’ai trouvé qu’il manquait de profondeur et d’exploration approfondie sur tous les sujets. Mais c’est précisément pour cela que c’est un projet d’introduction parfait
L’université de Tokyo propose aussi un projet similaire, qui peut servir de tremplin. Voir l’expérience CPU : https://ytsmiling.tech/2017/04/02/cpuex.html
Si cela ne vous convient pas, ce sera probablement à cause du manque de documentation ; à ce stade, vous pouvez aussi concevoir votre propre projet. En gros, commencez par un sous-projet de CPU utilisant Verilog ou n’importe quel langage de description matérielle, puis enchaînez avec des projets de système d’exploitation et de compilateur
J’ai suivi le processus de « conception » du processeur Nand2Tetris dans nandgame, et il me semble que le processeur Nand2Tetris est plus simple à câbler avec des portes logiques
Mais le processeur RISC de Wirth sera bien plus facile à faire tourner sur un FPGA ou à simuler avec Verilator. Parce qu’il utilise un vrai langage de description matérielle, et non quelque chose qui ressemble à un langage de description matérielle imaginé par quelqu’un qui n’a jamais conçu de hardware
Écrit en Verilog, le processeur Nand2Tetris demanderait probablement moins de code. Il serait assez proche de « a tiny computer for teaching » de Chuck Thacker https://www.cl.cam.ac.uk/teaching/1112/ECAD+Arch/files/Thack..., qui, comme le processeur Nand2Tetris, s’appuie sur l’architecture Data General Nova
Nand2Tetris vous mène des portes NAND jusqu’à Tetris et à un interpréteur de bytecode. Oberon, lui, part de Verilog synthétisable et vous emmène jusqu’à un système d’exploitation graphique pleinement utilisable, capable de recompiler son propre code source
Malheureusement, on ne peut pas exécuter Vivado dessus, donc il ne peut pas resynthétiser son propre bitstream FPGA. Mais comme quelqu’un l’a dit plus bas, il semble pouvoir simuler son propre matériel
Leur point commun est qu’aucun des deux ne donne de nom vraiment utilisable à l’architecture du processeur
Plus tard, Wirth a porté la description matérielle vers Lola, le HDL qu’il avait créé
Ces cinq dernières années, l’idée d’un ordinateur pédagogique n’a cessé de me trotter dans la tête
Quand on pense au matériel et aux systèmes d’exploitation modernes, il est pratiquement impossible d’avoir une machine assez simple pour être enseignée aux jeunes générations. Les consoles fantasmées comme pico-8 sont un bon choix pour la programmation, mais ne conviennent pas vraiment pour comprendre le matériel sous-jacent
C’est sans doute pour cela qu’on utilise encore de vieilles architectures à l’école
Si la mémoire paginée n’est pas nécessaire, les seuls modes M et U peuvent suffire. J’ai un petit système d’exploitation temps réel qui cible certains microcontrôleurs WCH avec cette configuration. Il utilise PMP, mais même cela n’est pas strictement indispensable
Les vidéos YouTube de Ben Eater sont excellentes pour cela. Son projet 6502 comme son ordinateur artisanal construit « à partir de zéro » sur breadboard sont tous les deux très bien
Avec les LLM, c’est désormais à portée de main, et le défi restant semble être de connecter les ordinateurs d’une façon ou d’une autre, autrement dit le problème de compatibilité matérielle. Côté logiciel, il faudrait pouvoir comprendre, d’une manière ou d’une autre, le logiciel en face
Les pages 59 à 75 traitent d’une implémentation rapide de piece list. C’est un sujet qui a aussi été abordé récemment sur HN
J’ajoute quelques fils HN sur les représentations de tampons de texte pour l’édition rapide :
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
Paix à l’âme du professeur Wirth
À part ça, pourrait-on ajouter un meilleur tag pour indiquer que ce lien pointe vers un fichier PDF ? La source a l’air fiable, mais je suis toujours sur mes gardes quand une URL mène à un PDF
[1] https://cr.yp.to/bib/1995/wirth.pdf
À l’université, dans un cours de compilateurs, j’ai écrit un compilateur Oberon
Je ne retrouve pas le site original du cours, mais ce site, qui date de quelques années avant la période où je l’ai suivi, semble correspondre à peu près : https://cseweb.ucsd.edu/~wgg/CSE131B/
C’était un excellent langage pédagogique
C’est une pépite. Je me demande s’il existe des tentatives de réutiliser Oberon comme « ordinateur » mobile
Je me demande si quelqu’un a mis le livre à jour pour pouvoir travailler avec des cartes FPGA plus récentes