kakts-log

programming について調べたことを整理していきます

「コンピュータシステムの理論と実装 第2版」の内容レビューに参加させていただきました。

先日、2024年 12月2日に発売された翻訳書「コンピュータシステムの理論と実装 第2版」の内容レビューに参加させていただきました。

www.oreilly.co.jp

エミュレータでNANDというパーツからAND ORなどの基本的な回路を作成し、そこから論理ゲートや加算器、CPUの設計をススメ、最終的にテトリスを作るところまでハンズオンでできる本で、第1版を以前読み進めており、コンピュータサイエンスのベースとなる要素を学ぶのに役立つ技術書でした。
第2版では、第1版の内容をさらにブラッシュアップされており、わかりやすく、読み手を動かして進めやすくなっております。

私自身第1版で勉強した身として、第2版の制作に微力ながら参加させていただき、よい本の制作に関われたことを光栄に感じております。

内容が非常に濃く、第1版との比較や、原著の英語版との内容を比較しながらレビューをさせていだだき、レビューするなかでより内容の理解を深めることができました。

今後書籍の執筆や技術書翻訳を出したいと考えており、このような貴重な機会を頂けた 訳者の斎藤 康毅 さま、O'reilly Japanさまには大変感謝いたします。

目次

賞賛の声
訳者まえがき
まえがき

第I部 ハードウェア
    I.1 Hello, World Below(こんにちは、低レイヤの世界)
    I.2 Nand to Tetris
    I.3 抽象化と実装
    I.4 方法論
    I.5 この先の展望

1章 ブール論理
    1.1 ブール代数
    1.2 論理ゲート
    1.3 ハードウェアの構築
        1.3.1 ハードウェア記述言語(HDL)
        1.3.2 ハードウェアシミュレーション
    1.4 仕様
        1.4.1 Nandゲート
        1.4.2 基本論理ゲート
        1.4.3 複数ビットの基本ゲート
        1.4.4 複数入力の基本ゲート
    1.5 実装
        1.5.1 動作シミュレーション
        1.5.2 ハードウェア実装
        1.5.3 ビルトインチップ
    1.6 プロジェクト
    1.7 展望

2章 ブール算術
    2.1 算術演算
    2.2 2進数
    2.3 2進数の加算
    2.4 符号付き2進数
    2.5 仕様
        2.5.1 加算器
        2.5.2 ALU(算術論理演算器)
    2.6 実装
    2.7 プロジェクト
    2.8 展望

3章 メモリ
    3.1 メモリデバイス
    3.2 順序回路
        3.2.1 時間について
        3.2.2 フリップフロップ
        3.2.3 組み合わせ論理回路と順序論理回路
    3.3 仕様
        3.3.1 Dフリップフロップ
        3.3.2 レジスタ
        3.3.3 ランダムアクセスメモリ(RAM)
        3.3.4 カウンタ
    3.4 実装
        3.4.1 Dフリップフロップ
        3.4.2 レジスタ
        3.4.3 RAM
        3.4.4 カウンタ
    3.5 プロジェクト
    3.6 展望

4章 機械語
    4.1 機械語の概要
        4.1.1 ハードウェアの要素
        4.1.2 アセンブリ言語
        4.1.3 命令
    4.2 Hack機械語
        4.2.1 背景
        4.2.2 プログラム例
        4.2.3 Hack言語の仕様
        4.2.4 シンボル
        4.2.5 入出力操作
        4.2.6 構文規則とファイル形式
    4.3 Hackプログラミング
    4.4 プロジェクト
    4.5 展望

5章 コンピュータアーキテクチャ
    5.1 コンピュータアーキテクチャの基礎
        5.1.1 プログラム内蔵方式
        5.1.2 ノイマン型アーキテクチャ
        5.1.3 メモリ
        5.1.4 CPU
        5.1.5 入出力(I/O)
    5.2 Hackハードウェアのプラットフォーム仕様
        5.2.1 概観
        5.2.2 CPU
        5.2.3 命令メモリ
        5.2.4 入出力
        5.2.5 データメモリ
        5.2.6 コンピュータ
    5.3 実装
        5.3.1 CPU
        5.3.2 メモリ
        5.3.3 コンピュータ
    5.4 プロジェクト
    5.5 展望

6章 アセンブラ
    6.1 背景
    6.2 Hack機械語の仕様
        6.2.1 プログラム
        6.2.2 シンボル
        6.2.3 構文規則
    6.3 アセンブリからバイナリへの変換
        6.3.1 命令の処理
        6.3.2 シンボル処理
    6.4 実装
        6.4.1 基本版アセンブラの開発
        6.4.2 完全版アセンブラの開発
    6.5 プロジェクト
    6.6 展望

第II部 ソフトウェア
    II.1 Jackプログラミング
    II.2 プログラムのコンパイル

7章 仮想マシンI:処理
    7.1 仮想マシンのパラダイム
    7.2 スタックマシン
        7.2.1 pushとpop
        7.2.2 スタック演算
        7.2.3 仮想メモリセグメント
    7.3 VM仕様①
    7.4 実装
        7.4.1 Hackプラットフォーム上の標準VMマッピング①
        7.4.2 VMエミュレータ
        7.4.3 VM実装の設計に関する提案
    7.5 プロジェクト
    7.6 展望

8章 仮想マシンII:制御
    8.1 高水準のマジック
    8.2 分岐
    8.3 関数
    8.4 VM仕様②
    8.5 実装
        8.5.1 関数の呼び出しと復帰
        8.5.2 Hackプラットフォーム上の標準VMマッピング②
        8.5.3 VM実装の設計案
    8.6 プロジェクト
    8.7 展望

9章 高水準言語
    9.1 例
    9.2 Jack言語の仕様
        9.2.1 構文要素
        9.2.2 プログラムの構造
        9.2.3 データ型
        9.2.4 変数
        9.2.5 文
        9.2.6 式
        9.2.7 サブルーチン呼び出し
        9.2.8 オブジェクトの生成と破棄
    9.3 Jackアプリケーションの作成
    9.4 プロジェクト
    9.5 展望

10章 コンパイラI:構文解析
    10.1 背景
        10.1.1 字句解析
        10.1.2 文法
        10.1.3 パース
        10.1.4 パーサ
    10.2 仕様
        10.2.1 Jack言語の文法
        10.2.2 Jack言語の構文解析器
    10.3 実装
    10.4 プロジェクト
        10.4.1 トークナイザ
        10.4.2 コンパイルエンジン
    10.5 展望

11章 コンパイラII:コード生成
    11.1 コード生成
        11.1.1 変数の扱い
        11.1.2 式のコンパイル
        11.1.3 文字列のコンパイル
        11.1.4 文のコンパイル
        11.1.5 オブジェクトの扱い
        11.1.6 配列のコンパイル
    11.2 仕様
    11.3 実装
        11.3.1 仮想マシンへの標準マッピング
        11.3.2 実装ガイドライン
        11.3.3 ソフトウェアアーキテクチャ
    11.4 プロジェクト
    11.5 展望

12章 OS
    12.1 背景
        12.1.1 数学演算
        12.1.2 文字列
        12.1.3 メモリ管理
        12.1.4 グラフィック出力
        12.1.5 文字出力
        12.1.6 キーボード入力
    12.2 Jack OSの仕様
    12.3 実装
    12.4 プロジェクト
    12.5 展望

13章 さらなる冒険へ
    13.1 ハードウェアの実現
    13.2 ハードウェアの改良
    13.3 高水準言語
    13.4 最適化
    13.5 通信

付録A ブール関数の合成
    A.1 ブール代数
    A.2 ブール関数の合成
    A.3 Nandの表現力

付録B ハードウェア記述言語
    B.1 HDLの基本
    B.2 マルチビットバス
    B.3 ビルトインチップ
    B.4 順序回路
    B.5 チップの可視化
    B.6 HDLサバイバルガイド

付録C テスト記述言語
    C.1 一般的なガイドライン
    C.2 ハードウェアシミュレータでのチップのテスト
    C.3 CPUエミュレータ上での機械語プログラムのテスト
    C.4 VMエミュレータ上でのVMプログラムのテスト

付録D Hackのチップセット

付録E Hackの文字セット

付録F Jack OSのAPI
    F.1 Math
    F.2 String
    F.3 Array
    F.4 Output
    F.5 Screen
    F.6 Keyboard
    F.7 Memory
    F.8 Sys

付録G オンラインIDEの使い方
    G.1 オンラインIDEの概要
    G.2 オンラインIDEの主要ツール
    G.3 ハードウェアシミュレータ
    G.4 CPUエミュレータ
    G.5 アセンブラ
    G.6 VMエミュレータ
    G.7 Jackコンパイラ
    G.8 日本語版のサポートサイト

索引