Computer Science

概要

Computer Scienceは学問としての領域。

Memo

Tasks

TODO ods-cpp.pdf - Google Drive

無料のコンピュータサイエンスの教科書。

TODO O’Reilly Japan - コンピュータシステムの理論と実装   Read

実装して理解する本。

  • 97, 128, 171, 180, 185

メモ。

  • @value はAレジスタにvalueを格納することを示す
    • 例. @17 はAレジスタに17を格納する
  • 操作を行いたいアドレスを指定する命令
  • 計算命令
  • デバイスはメモリマップを通じて、ほかのメモリと全く同じようにCPUから扱うことができる
    • キーボードを押している間、メモリのどこかの値が変わっている
  • アセンブラは、かんたんに作れた。単なるテキスト処理にすぎない
  • 高水準プログラムは初めに中間コードに変換され、その中間コードは機械語に変換される
    • 中間コードは実際のプラットフォームで実行される代わりに、バーチャルマシンで実行されるように設計されている
  • 1. 高水準コードからVM命令の中間コードへの変換を行う
  • 2. VMコードから対象プラットフォームにおける機械語への変換を行う
  • スタックマシンという計算モデルにおいて、算術命令はスタックの一番上からオペランドを取り出し、その結果をスタックの一番上に置く。どのような算術命令や論理命令であっても、単純なスタックによるモデルを用いて、その命令のための評価器を実装することができる
  • Jackクラスファイル → (コンパイラ) → VMファイル → (VM変換器) → Hackアセンブリコード → (アセンブラ) → Hackバイナリコード
  • JVMはバイトコードと呼ばれる中間言語を実行するスタック型のバーチャルマシンである

Words

インタフェース
そのデータ構造が何をするか表現する。データ構造がサポートしている操作一式と、セマンティクスを定義する
実装
そのデータ構造をどのようにやるかを表現する
セマンティクス
操作の意味

Reference

ピクセルは四角じゃない

ピクセルについての論文。

O’Reilly Japan - Python計算機科学新教本

計算機科学を動くコードで学ぶ本。

Home — Memory Management Reference 4.0 documentation

メモリ管理のリファレンス。

Archives

DONE PHPerKaigi 2019 - PHP でJVMに入門する

VM実装の予備知識。

実装して理解できた。

DONE JVMを実装する

  • 難しそうに見えるが、単にバイナリをパースしていく作業
  • Goだと、binary.Readで構造体のフィールドのバイト数だけ読み進められる

DONE PHP で JVM を実装して Hello World を出力するまで - Speaker Deck

実装の解説。

  • Constant Pool はコンパイル時に埋め込まれたクラスの情報や参照を保持しておくためのシンボルテーブル
  • 実行の流れ
    • ClassFile Structureを読み込む
    • Constant Poolを読み込む
    • メソッドの情報を読み込む
    • Code Attributeを読み込む
    • オペコードを実行する
  • オペランドスタック
  • JVMはレジスタへ書き込むのではなく、メモリ上に値を積む。積んだ値を命令がオペランドとしてポップして処理する
  • [オペコード][オペランド(オペコードによって長さが変わる)] みたいな感じ