nand2tetris software toolsを使う

2022-06-07

コンピュータシステムの理論と実装を読むにあたって、 nand2tetris software tools 1 を準備する必要があった時のメモです。

環境

M1 - macOS Montereyでのセットアップになります。

% sw_vers
ProductName: macOS
ProductVersion: 12.4
BuildVersion: 21F79

javaが必要ですが、最近使っているMac miniには入っていなかったのでインストールします。

バージョン管理する予定はないですが、とりあえずanyenvjenv 2 を入れます。

anyenvのバージョンは以下の通りです。

% anyenv --version
anyenv 1.1.4

javaを入れる。

jenvを入れる。

% anyenv install jenv

openjdkを入れる

jenvは他の*env系と違ってinstallコマンドはありません

brew等でインストールした上で、jenv addを使用し、登録する形です。

とりあえず最新を入れます。

% brew install openjdk

jenv add

jenv add PATH_TO_JVM_HOMEで登録します。

PATH_TO_JVM_HOMEはjenvのREADMEとhomebrewのページを参考にしました。

% jenv add /opt/homebrew/opt/openjdk/libexec/openjdk.jdk/Contents/Home
openjdk64-18.0.1.1 added
18.0.1.1 added
18.0 added
 18.0.1.1 already present, skip installation

#1.2 Adding Your Java Environment | jenv | GitHub

openjdk | Homebrew Formulae


jenv versions

javaがしっかりと追加されたことを確認します。

% jenv versions
* system (set by /Users/kosh/.anyenv/envs/jenv/version)
  18.0
  18.0.1.1
  openjdk64-18.0.1.1

jenv global/local

あとは、他の*env系と同様にlocalまたはglobalで使用するバージョンを指定します。

java -versionでしっかり導入できていることを確認します。

% jenv global 18.0

% exec $SHELL -l

% java -version
openjdk version "18.0.1.1" 2022-04-22
OpenJDK Runtime Environment Homebrew (build 18.0.1.1+0)
OpenJDK 64-Bit Server VM Homebrew (build 18.0.1.1+0, mixed mode, sharing)

local 登録のチェックはおまけに記載します。[*1]

nand2tetris software tools

Software | From Nand to Tetris

Downloadからソフトウェアをダウンロードします。

Macユーザー向けのガイドもダウンロードすることができます。

ダウンロードしたディレクトリ内の*.shを確認します。

% tree nand2tetris/tools -P "*.sh" --prune
nand2tetris/tools
├── Assembler.sh
├── CPUEmulator.sh
├── HardwareSimulator.sh
├── JackCompiler.sh
├── TextComparer.sh
└── VMEmulator.sh

0 directories, 6 files

実行権限がないのでとりあえず与えます。

[~/nand2tetris/tools] 
%  find ./ -name "*.sh" | xargs chmod 755

これでHardwareSimulator.shでシミュレータが起動します。

使いやすく

本の中やガイドではシンボリックリンクの方法が記載されていますが、思いっきり.zshrcにPATHとして登録してしまう方法もあります。

export PATH=$PATH:<your-path>/nand2tetris/tools

おまけ

jenvの設定は?

homebrewとかで直接jenvを入れた場合は.zshrcなどにいくつか記載が必要ですが、anyenvで入れた場合はanyenvの設定ですべてカバーされます。

jenvを使わないでjavaを使う

jenvを使わないで、普通にjavaを使う場合はシンボリックリンクを作るか、pathを指定してあげる必要があります。

シンボリックリンク

シンボリックリンクの作成はhomebrewのopenjdkのページに記載があります。 openjdk | Homebrew Formulae

PATH

PATHに関してはinstallした際の注釈に記載がありました。

If you need to have openjdk first in your PATH, run:
  echo 'export PATH="/opt/homebrew/opt/openjdk/bin:$PATH"' >> ~/.zshrc

jenv local

適当に17を入れ、jenv addで登録します。

% brew install openjdk@17

% jenv add /opt/homebrew/opt/openjdk@17/libexec/openjdk.jdk/Contents/Home
openjdk64-17.0.3 added
17.0.3 added
17.0 added
 17.0.3 already present, skip installation

% jenv versions                                                          
  system
  17.0
  17.0.3
* 18.0 (set by /Users/kosh/.anyenv/envs/jenv/version)
  18.0.1.1
  openjdk64-17.0.3
  openjdk64-18.0.1.1

適当なディレクトリで17を指定してみます。

.java-versionが作成され、しっかりバージョンが切り替わっていることが確認できます。

% jenv local 17.0

% java -version  
openjdk version "17.0.3" 2022-04-19
OpenJDK Runtime Environment Homebrew (build 17.0.3+0)
OpenJDK 64-Bit Server VM Homebrew (build 17.0.3+0, mixed mode, sharing)

% cat .java-version
17.0

参考文献