コンピュータシステムをフルスクラッチで実装 [Nand to Tetris]
NANDゲートからCPU、アセンブラ、VM変換器、コンパイラ、OSまでをフルスクラッチで実装するNand to TetrisプロジェクトをGoで書いています. 成果物はコードとドキュメントとともに公開しています。:https://github.com/Kaichi-Irie/nand2tetris-go 作ったアセンブラとコンパイラをWeb上で試せるWebアプリも制作し、公開しています: https://myapp-frontend-505229804915.asia-northeast1.run.app/ 開発の際に工夫した点は,次の2つです. 1. `io.Writer`/`io.Reader`といったgoインターフェースの抽象化の枠組みを活用することで,拡張性が高く,ユニットテストも書きやすいコードにした点 2. 各モジュールをテスト駆動で開発し、自動テスト(GitHub Actions)も構築した点 複数レイヤー(ハードウェア→ソフトウェア)を一貫して実装した経験から、CS理論の全体像が掴めたと感じています.また,フルスクラッチで何かを作る面白さに夢中になり、OSやブラウザの自作にも挑戦したいと思うようになりました。