Goldensteps

個人ブログです 意義はないです カテゴリー「長文読み物」がオススメですよ

『EXAPUNKS』PDFマニュアル1冊目の簡易訳~11pまで

本エントリでは1冊目(赤い方)の11ページ目まで進行します。

 ◆GHAST WALKS U THRU IT

私は誰もがEXAプログラミングを習得できると信じている。あなたが思索を重ねられるようネットワークを構築し、ここにチュートリアルを用意した。自分はプログラマではないとあなた自身が思ったにせよ、これに挑戦してみて欲しい。きっと自分自身に驚くことだろう。

Tutorial 1: The Basics

この最初のチュートリアルでは、ID 200にある特定のファイルを「受信ボックス」という名前のホストから「送信ボックス」という名前のホストに移動することを目標にしている。これはID 800というリンクを通して行う。
EXODUSを起動し、チュートリアルネットワークへ接続。新しい空白のソリューションが自動的に作成されている。(「ソリューション」とは、実行ボタンを押したときに実行を開始するEXAの集まりのことである)。
画面の左側に空白のコードウィンドウの表示された、中身のないEXAが表示されている。次に示す5行のコードをEXAに入力しよう。

LINK 800 リンク800を走査してネットワークに入る。
GRAB 200 ファイル200を取得する。
LINK 800 リンク800を「受信箱」から「送信箱」に移動する。
DROP 保持されているファイルをドロップする。
HALT EXAを終了。

ステップボタンを押すと、その度に1つの命令がステップ実行される。退屈ならば、実行ボタンを押して、全てが実行するのを見ることもできる。
プログラムがあなたの望む動作であることを確認したら、早送りボタンを押してプログラムが終了するまで実行させることも可能だ。おめでとう、これがあなたの達成した最初のEXAプログラミングだ。


Tutorial 2: Reading and Writing Files

オーケー。次の作業は、ファイルを移動するのではなく読み書きする必要があることを除けば、最初の作業とよく似ている。詳しい説明はEXODUSの要件を読もう。さあ、今すぐ。
EXAが保持するファイルを読み書きするには、Fレジスタを使用する必要がある。 また、操作の途中で中間値を格納するためにはXレジスタを使用する。空のEXAに次のコードを入力しよう。

LINK 800 リンク800を走査してネットワークに入る。
GRAB 200 ファイル200を取得する。
COPY F X Fから読んで値をXに書き込む。
ADDI X F X X + Fを計算し、その結果をXに書き込む。
MULI X F X X * Fを計算し、その結果をXに書き込む。
SUBI X F X X - Fを計算し、その結果をXに書き込む。
COPY X F Xから読み取り、値をFに書き込む。
LINK 800 リンク800を「受信箱」から「送信箱」に移動する。
DROP 保持されているファイルをドロップする。
HALT EXAを終了。

プログラムをステップ実行してGRAB命令を実行させたとき、現在保持しているEXAのウィンドウの下へ、どのようにしてファイル200のウィンドウが表示されるのかに注目しよう。
また、ファイルウィンドウの "ファイルカーソル"を探して、ファイルの最初の値を強調表示しているのを確認できる。EXAがFレジスタから読み込むと、ファイルカーソルが指す値が読み込まれる。同様に、Fレジスタへの書き込みは、ファイルカーソルが指す値を置き換えることになる。ファイルカーソルがファイルの最後にある場合は、既存のファイルカーソルを置き換えるのではなく、新しい値を追加する。
もう一つ。Fレジスタを読み書きすると、自動的にファイルカーソルがファイル内の次の値に移動していく。時にはこれは便利だが、必ずしもそうとは限らない。


Tutorial 3: Communication Between EXAs

次のチュートリアルでは、一方通行のリンクを介してのみアクセス可能なファイルについて説明する。ファイルを取得するEXAはトラップされるので、2つ目のEXAを作成して相互に通信しなければならない。
今度はあなた自身で問題のコードを解決してみよう。ただし、ここにいくつかのヒントを提示する:

・MAKE命令を使用して新しいファイルを作成することができます。作成するファイルは、デフォルトでは空になり、作成したEXAによって自動的に保持されます。
・EXAはWIPE命令で保持しているファイルを削除できます。
・2つのEXAは、Mレジスタを使用して相互に通信できます。1つのEXAが値をMレジスタに書き込み、別のEXAがMレジスタから値を読み取ると、値はライタからリーダに送信されます。
・EXAが誰にも書き込んでいない間にMレジスタを読み込んでいる場合、またはその逆の場合は、別のEXAが通信のもう一方の端をピックアップするまで待機します。あなたは完全に時間をかける必要はありません。
・EXODUSのユーザーインターフェイスには、Mレジスタをグローバルまたはローカルの操作に設定できるトグルスイッチがあります。グローバルモードでは、2つのEXAはそれらを接続するリンクのパスがある限り、ネットワーク内のどこでも通信できます。ローカルモードでは、2つのEXAが同じホストにある場合にのみ通信できます。最後に、グローバルモードのEXAは、同じホストにあってもローカルモードでEXAと通信できません。


Tutorial 4: Loops and Conditionals

最後の作業は、一連の数字を含むファイルを作成することだ。これを行うには、ループと呼ばれるものを使用すると良いだろう。ここでは、停止条件が満たされるまで数行のコードを繰り返し実行というものになる。ここにいくつかのヒントを示す:

・Xが38の場合(TEST X = 38)といったように、レジスタや値をTEST命令と比較することができます。テストが真である場合、Tレジスタは1としてセットされ、テストが偽である場合、Tレジスタは0としてセットされます。

・独自のTEST命令はそれほど有用ではありませんが、条件付きジャンプ命令(TJMPとFJMP)を組み合わせれば、テストの結果に応じてプログラムのさまざまな部分にジャンプできます。Tレジスタが1に設定されていると、TJMP(Trueの場合にジャンプ)が動作します。Tレジスタが0に設定されていると、FJMP(falseの場合にジャンプ)が機能します。これらを使用する場合は、あなたのプログラムのどこかにMARK命令でジャンプターゲットを指定する必要があります。

・ここにループの例があります。値9999をファイルに10回書きたいとした時、以下のようにして、Xレジスタのループを通過した回数を記録することができます:

COPY 0 X Xレジスタを0にリセットする。
MARK LOOP LOOPというラベルを定義する。
COPY 9999 F 保持しているファイルに9999を書き込む。
ADDI X 1 X Xに1を加える。
TEST X = 10 Xが10に等しいかどうかをテストし、その結果をTに格納する。
FJMP LOOP Xが10に等しくなければ、LOOPにジャンプする。

・TJMP命令とFJMP命令がTの値を調べるとき、その値がTEST命令によってそこに置かれているかどうか、またはそこに値を置くかどうかは気にしません。 次回TSET命令を実行しても問題ない場合は、Tレジスタに任意のデータを格納することができます。

 

さて、あなたは今チュートリアルを終えた。おめでとう。これであなたも本当のEXAプログラマだ。学ぶべきことはいつも尽きないが、基礎はすべてここに記されている。