1件のコメント

 
GN⁺ 2024-01-06
Hacker News のコメント
  • 本文を TeX で組み直し、関心のある人向けに、より読みやすい PDF を作りました: https://github.com/guidoism/tex-oberon

    • すばらしい。用紙サイズは難しくなく変更できる方法がありそうなので、A5 に変えて自分でいい感じの本に製本してみたい
    • この版の本に沿って進めれば全体を作れるのか気になる。Wirth が使っていた元の FPGA ボードを入手しなくてもよいのか知りたい
  • 次は Oberon System 3 も見るとよい。Gadgets コンポーネントモデルと JIT/AOT コンパイラが混在している
    "The Oberon companion - a guide to using and programming Oberon System 3"
    https://www.semanticscholar.org/paper/The-Oberon-companion-a...
    ソースコードは Rochus のフォークで見られる
    https://github.com/rochus-keller/OberonSystem3
    あるいは Niklaus Wirth 自身によるものではないが、Active Oberon へ続く流れもある
    https://gitlab.inf.ethz.ch/felixf/oberon
    スクリーンショットと OS マニュアル
    https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/ocp/Doc...
    ETHZ 発のスタートアップが作った Component Pascal と Blackbox IDE もある
    https://blackboxframework.org/index.php

  • これは本の前半だけ。全パートとソフトウェアはここで見つけられる: https://people.inf.ethz.ch/wirth/ProjectOberon/

  • 1992年版で最も大きな章は、OberonプログラムをNS32032プロセッサのコードに翻訳するコンパイラを扱っていたが、今ではそのプロセッサは入手できず、アーキテクチャとしても推奨しにくいという。そこで商用アーキテクチャ向けの新しいコンパイラを書く代わりに、単純さと規則性をハードウェアにまで拡張しようとして自分で設計した、というくだりが興味深い
    この決定のおかげで、Oberon Systemのソフトウェアだけでなくハードウェアも完全かつ厳密に説明できるようになり、そのプロセッサはRISCと呼ばれ、ハードウェアモジュールはすべてVerilogで記述されているという
    Nand to Tetrisと比べるとどうなのか気になる。そのほかは本当に面白そうに見えるが、読んだことのある人がいるのか知りたい

    • ほかの人も言っているように、初心者向けではない。まずNAND 2 Tetrisの背景知識の一部、もしかすると大部分が必要になるはず
      例えば第16章のプロセッサ部分は、いきなりVerilogコードの真ん中に放り込まれる。システムバスとのCPUインターフェイス、レジスタ、乗算ユニットの動作方式がすぐに出てくる
      良いところは、設計上の判断とトレードオフに関する解説だ。キャリア晩年のNiklaus Wirthが生涯の経験をもとに残した知恵なので貴重だ。彼は回路と、より抽象的なコンピュータサイエンスの両方を広く深く理解していた珍しい博識家で、常に一般化し、原理を理解しようとし、歴史的文脈の中で発展の過程を説明していた
      Wirthなので、歴史の授業が個人的な経験に基づくことも多く、そのおかげで良い総合が生まれていると思う。例えば次のようなものだ:

      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は、ハードウェア、OS、コンパイラ設計を包含するこの分野の完璧な入門プロジェクトだ
      ただし実際に最後までやってみると、どのトピックでも深さや掘り下げが足りないと感じた。だがまさにその点が、完璧な入門プロジェクトにしている
      東京大学にも似たプロジェクトがあり、踏み石として使えると思う。CPU実験を見るとよい: https://ytsmiling.tech/2017/04/02/cpuex.html
      気に入らないなら、おそらくドキュメント不足が理由だろうが、この段階なら自分でプロジェクトを設計してもよい。基本的にはVerilogか任意のハードウェア記述言語を使うCPUのサブプロジェクトから始めて、OSとコンパイラのプロジェクトへつなげればよい
    • Project Oberonは、最終的なシステムがどのようなものかを説明している。基礎から完成したシステムまで段階的に連れていってくれるチュートリアルではない
    • WirthのRISCプロセッサは、TECS/Nand2Tetrisのプロセッサより説明もプログラミングもはるかに単純だ。Nand2Tetrisのプロセッサは、ほとんど使い物にならないレベルに近いと思う
      nandgameでNand2Tetrisプロセッサを「設計」する過程を経験したが、ゲートで配線するにはNand2Tetrisプロセッサの方が単純そうだ
      しかしWirthのRISCプロセッサは、FPGAで動かしたりVerilatorでシミュレーションしたりするのがはるかに簡単なはずだ。ハードウェアを設計したことのない人が想像したハードウェア記述言語のようなものではなく、実際のハードウェア記述言語を使っているからだ
      おそらくVerilogで書けば、Nand2Tetrisプロセッサの方がコード量は少ないかもしれない。Chuck Thackerの「a tiny computer for teaching」https://www.cl.cam.ac.uk/teaching/1112/ECAD+Arch/files/Thack...とかなり似ているはずで、Nand2Tetrisプロセッサと同じくData General Novaアーキテクチャをベースにしている
      Nand2TetrisはNANDゲートからTetrisとバイトコードインタプリタまで連れていってくれる。一方Oberonは、合成可能なVerilogから始まり、自分自身のソースコードを再コンパイルできる、完全に実用的なGUI OSまで連れていってくれる
      残念ながらVivadoをその上で動かすことはできないので、自分自身のFPGAビットストリームを再合成することはできない。ただし下で誰かが言っているように、自分のハードウェアをシミュレーションすることはできるようだ
      両者の共通点は、プロセッサアーキテクチャに使える名前がないことだ
    • Nand to Tetrisより教育用の構成ははるかに弱い。背景知識が必要なら、先にそれを読んでからこの本を読む方がよい
      後にWirthはハードウェア記述を、自作のHDLであるLolaに移した
  • この5年間、教育用コンピュータというアイデアがずっと頭から離れなかった。
    現代のハードウェアとオペレーティングシステムを考えると、若い世代に教えられるほど単純なマシンを持つことは事実上不可能だ。pico-8 のようなファンタジーコンソールはプログラミングには良い選択肢だが、その下にあるハードウェアを理解するには適していない。
    だから今でも学校では古いアーキテクチャを教育に使っているように思う。

    • 最小限の RISC-V 実装はかなり単純だ。xv6 の RISC-V 実装もある。ただし、絶対最小の RISC-V 実装よりは少し多く必要で、具体的には CSR、M/S/U モード、ページングが必要になる。
      ページドメモリが不要なら、M モードと U モードだけでも可能だ。その構成で、一部の WCH マイクロコントローラを対象にした小さなリアルタイム OS を持っている。PMP は使っているが、それすら必須ではない。
    • ヴィンテージの8ビットハードウェアは非常に理解しやすく、今日でもそのまま通用する基礎を教えてくれる。
      Ben Eater の YouTube 動画はこの点で素晴らしい。6502 プロジェクトも、ブレッドボードで「ゼロから」作る手製コンピュータもどちらも良い。
    • どうにかして他のコンピュータと会話する方法を学べるコンピュータが、究極の解決策のように思える。
      今では LLM のおかげで手の届く範囲に入ってきており、残る課題はコンピュータ同士をどうにか接続すること、つまりハードウェア互換性の問題だろう。ソフトウェア側は、相手のソフトウェアを何らかの形で把握できなければならない。
  • 59〜75ページでは高速な ピースリスト(piece list) 実装を扱っている。最近 HN でも取り上げられていた話題だ。
    高速編集のためのテキストバッファ表現方式について HN にいくつかスレッドがあったので、付け加えておく。
    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

  • Wirth 教授のご冥福をお祈りします。
    余談だが、このリンクが PDF ファイルだと分かるように、もっと良いタグを付けられないだろうか? 出典は信頼できそうだが、URL が PDF につながっているといつも身構えてしまう。

    • 彼の lean software への呼びかけは、いつ読んでも価値がある。
      [1] https://cr.yp.to/bib/1995/wirth.pdf
    • 通常、PDF へつながるリンクには末尾に [pdf] が付く。
    • PDF ファイルのどの点が具体的に気になるのか興味がある。
    • URL はすでに .pdf で終わっている。
  • 大学でコンパイラの授業を受けたときに Oberon コンパイラを書いた。
    元の授業サイトは見つけられないが、私が受講した時期より数年前の資料であるこのサイトがだいたい近いと思う: https://cseweb.ucsd.edu/~wgg/CSE131B/
    教育用言語として素晴らしかった。

  • これは宝石のようなものだ。Oberon をモバイル「コンピュータ」として再利用しようとする試みがあるのか気になる。

  • もっと新しい FPGA ボードで作業できるように本をアップデートした人がいるのか気になる。