入力をファイルに書いておいて, load して実行することができる. 2 章 で説明するエディタ emacs および Risa/Asir を同時に起動しておく (図 1.1 を見よ).
このように二つソフトを立ち上げておいた状態で, 下の 1, 2, 3 を繰り返すのが一般的なプログラムの開発方法である.エディタ emacs のつかいかたについては 2 章で解説しているので, 適宜参照するとよい. Emacs は長い歴史をもつ強力なスクリーンエディタである. Emacs Lisp と呼ばれるマクロ言語をもち, エディタの機能を変更していくことが 可能である. さらに emacs のなかから メールを読み書きしたり, プログラムのコンパイル, デバッグをすることも可能であり, 多くのプログラマに愛用されてきた. なお emacs と双壁をなしてプログラマに人気のあるエディタ として vi もある. シンプルでプログラミングにとり 大事な機能しかもたない軽快な vi 愛用者も多い.
とにもかくにも, Emacs を覚えておくといろいろな場面で便利なので ここでは emacs を使って説明しよう.
bash-2.03$ | emacs hoge.rr & RETURN |
2*(3+5^4);
|
deval(sin(3.14));
|
fctr(x^6-1);
|
end$
|
bash-2.03$ | asir RETURN |
Asir の起動メッセージ | |
[0] | load("./hoge.rr"); RETURN |
1 1256 0.00159265 [[1,1],[x-1,1],[x+1,1],[x^2+x+1,1],[x^2-x+1,1]] [4]
出力の最初の 1 は load が成功しましたよ,
といってる 1 である.
さて, emacs を立ち上げるとき
&
をつけて起動していることに
気がついたであろうか?
UNIX は, もともと複数の人が同時に一つのコンピュータを使えるように設計 された OS である. 「同時」といっても, CPU が一つしかない場合には, ある 瞬間に実行されているのは一つのプログラムだが, UNIX は, 一つのプログラ ム(プロセス)に非常に短い時間 (例えば 10ミリ秒)しか割り当てず, 時間が来 ると強制的にそのプロセスを停止させ, 他のプロセスをスタートさせる. これ を繰り返すことにより, あたかも多くのプロセスが同時に動いているように見 えるのである. 言い換えれば UNIX は, アクティブなプロセスを待ち行列とし て管理している.
さて, 端末エミュレータも一つのプロセスであり, その中でユーザからの入力 を待っているシェルも一つのプロセスである. シェルは他のプログラムを実行 するのが仕事であるが,
bash-2.03$ | emacs RETURN |
bash-2.03$ | emacs & RETURN |
[1] 60582 &というようなメッセージを出してすぐにプロンプトが出る. これは, 呼び出したシェルと呼び出された emacs 双方がアクティブな プロセスとなっていることを意味する. この場合 「emcas を バックグラウンドで実行している」という.
フォアグラウンドからバックグラウンドへの移行も可能である. 何かのプロセスをフォアグラウンド実行しているシェルに, CTRL + z を入力すると, 実行されているプロセスが一旦停止し, シェルのプロンプトが 出る. このとき bg を実行するとプロセスはバックグラウンドに移行する.
CTRL + z | |
[1]+ Stopped | emacs |
bash-2.03$ | bg RETURN |
[1]+ Stopped | emacs & |
bash-2.03$ |