このビデオでは Pharo での
独特なパッケージングを お見せしたいと思います。
失われた技術にしないために。
Pharo をインストールするには 通常は表示されたリンクをクリックします。
現時点での Pharo のリリースは バージョン 4 ですが
（訳注：2018年現在の最新リリースは バージョン 6.1 です）
バージョン 5 でも全く同じです。
Mac OSX 版をダウンロードすると この ZIP ファイルが得られます。
これを unzip すると Pharo4.app が得られます。
Pharo4.app を立ち上げると Pharo を使うことができます。
「Hello」と書いたとして
セーブすると 環境が保存されます。
Save をクリックします。
Quit now をクリックして また立ち上げると
さきほどと全く同じ「Hello」があります。 Pharo のイメージを保存するということは
バイトコードやコンパイル済みメソッドを 含む全てのオブジェクトを
メモリーごとコピーするということ なのです。
このアプリケーションには
何が入っているのでしょう？
Mac では、中身を見ることができます。
Show Content（パッケージの中身を表示） をクリックすると
Pharo の仮想機械やリソースが 見つかります。
そしてここに、チェンジファイルと
イメージファイルがあります。
イメージファイルは
メモリ上のオブジェクト全てを 格納したもので
チェンジファイルは、実行された インクリメンタルな変更を持っています。
イメージファイルを
ダブルクリックすると
OS にもよりますが通常は インストール済みの Pharo の仮想機械が
起動して
そのイメージファイルを立ち上げます。
イメージファイルは何をするのでしょうか？
クラスを定義する時について 考えてみましょう。
パッケージを定義します。
ATest パッケージを追加します。
このパッケージに
MyStrangeClass を定義します。
そして foooo を
42 を返すよう定義します。
このイメージを別の名前で保存します。
名前を
Pharo40Stef とします。
さて、どうなったでしょう？
一旦終了します。 イメージとチェンジのペアが
新しくできました。 このチェンジファイルは
人間が読めるようなものではないので 開かないでおきます。
中には先ほどのメソッドのコードなどが 入っています。
Pharo4 をもう一度立ち上げると
仮想機械が起動して
また同じスナップショットが立ち上がります。 昔行われた
システムコピーで作られた
スナップショットです。
さて、PharoStef イメージを実行すると
どうなるでしょう？
システムには 先ほど定義したクラスがあります。
Pharo 4 アプリケーションは いわゆる Mac bundle で
Pharo の仮想機械やイメージやチェンジを 抱えています。
その上でダブルクリックすると 選択の余地なく
常に Pharo イメージが選ばれます。 スクリプトで
そのように定義されています。
Pharo の使い始めでは便利なのですが
一般にはこういう使い方はしません。
一般に、コマンドラインで実行するか
例えば
pharo-ui MyPharoImage.image
のようにすると
立ち上がります。あるいは コマンドラインから立ち上げる時に
UI が必要なければ UI なしで立ち上げることもできます。
つまり Pharo は システムのどこかにインストールされた
UNIX アプリケーションともいえます。
さて、このページには
Pharo のイメージとチェンジのペアと
仮想機械のダウンロードがあります。
仮想機械をダウンロードして
それからイメージとチェンジのペアと さらにソースもダウンロードしてみます。
これから、それら 3 つが何か
どうやって 3 つを組み合わせて 使うのかを説明します。
Pharo のイメージとチェンジのペアを unzip すると
これが得られます。
unzip すると
イメージが得られます。
モードを
見やすいように切り替えて
さて、このイメージファイルは
仮想化されたシステムである Pharo の
特定の状態のスナップショットですが
こうして実行することができます。
何かメッセージが表示されましたが
システムはちゃんと動いています。
実行することができています。
これで今まで通りのことが なんでも実行できます。
MyPackage を作って
MyStrangeClass を定義できます。
いつも通りです。
メソッドを定義します。
fooo ^ 42、と。 私の名前を訊いてきます。
いつもと同じく
MyStrangeClass new fooo とすると、42 が得られます。
バッチリです。保存できます。
別名で保存します。
PharoStrange という名前にします。
OK。
このメッセージは
ソースファイルが見つからない と言っています。
どういうことでしょう？
ブラウザを開いて 例えば
AST のコードを見てみましょう。 上のほうにあります。
システムはコメントを
見つけられないでいます。
逆コンパイルしているのです。
このあたりでは見分けがつきません。
メソッドが単純すぎるからです。 しかしこれらは逆コンパイルされています。
もう少し具体的に見ていきます。
これはバイトコードから 逆コンパイルされたコードで
引数であることは ちゃんとわかっているのですが
ソースコードは失われています。
一般に、Pharo 4 を実装している システムソースは
PharoV40.sources というファイルに 格納されています。
ここにあります。
一般に、Pharo 4 のソースは
システム中に 1 回だけ インストールされます。
このファイルはリードオンリーで Pharo のアプリケーションはみな
同じファイルを使うことができます。
ここにあります。unzip すると
PharoV40.sources が得られます。
保存しないで終了して
アプリケーションを再起動すると
前と全く同じになります。
スナップショットに
別名をつけて保存した
イメージとチェンジがあります。
ここで古いイメージを立ち上げると
エラーが出ません。
システムが最初のイメージで起動した時の 状態と対応付けて
コードを見つけるからです。
ここで 2 番目のイメージを使うと
AST-Core のクラスには
コメントがついています。
これらの引数は ちゃんと人が付けた名前になっています。
このアーキテクチャでは
システムソースを格納した ソースファイルと
仮想機械と イメージとチェンジのペアがあります。
通常のコンパイラでは 一旦システムをコンパイルしたら
もうソースは必要ないのですが。
イメージはユーザー定義およびシステムの
全てのオブジェクトを格納しています。
チェンジファイルは実行したことの 差分を格納しています。
システムを保存するたびに
OS の仮想イメージを保存するのと 同じことです。
全く同じ原理です。
Pharo 4 アプリケーションの中には
これらのリソースが格納されています。
Pharo 4 のソース イメージファイル
チェンジファイル そしてどこか、ここに
仮想機械とプラグインがあります。