pi [file] [arguments]
引数なしで起動した場合、pi は通常の read-eval-print ループを実行する。
式 (exit)
を評価することで終了する。
起動時に引数を与えた場合、第一引数をファイル名として解釈し、read-eval-print
ループの実行に先だってそのファイルをロードする。第二引数以降は
アプリケーションにパラメータを与えるために利用できる。プログラムから
コマンドラインの引数を知るには大域変数 *invocation-arg*
または手続き rp:command-line-arguments
を使用する。
*invocation-arg*
大域変数
(rp:command-line-arguments)
手続き
例
$ cat arg.scm (display "*invocation-arg* is ") (write *invocation-arg*) (newline) (display "rp:command-line-arguments returns ") (write (rp:command-line-arguments)) (newline) (exit) $ pi arg.scm foo bar baz *invocation-arg* is ("arg.scm" "foo" "bar" "baz") rp:command-line-arguments returns #("pi" "arg.scm" "foo" "bar" "baz") $ pisc arg.scm $ pisl arg gcc -O2 -m486 -I/u/qfwfq/lib/rhizome -c arg.c gcc -O2 -m486 -I/u/qfwfq/lib/rhizome -c a.c gcc -L/u/qfwfq/lib/rhizome a.o arg.o -lrhzscm -lrhzpi -lrhizome -lm $ ./a.out foo bar baz *invocation-arg* is ("./a.out" "foo" "bar" "baz") rp:command-line-arguments returns #("./a.out" "foo" "bar" "baz")
pisc -help
pisc [options] file
file
をC言語のプログラムに変換する。
オプション:
-module module-identifier
module-identifier
とする。
モジュール名は pisl で実行ファイルを生成する時に指定する名前である。
これはC言語の識別子として正当なものでなければならない。
デフォルトではソースファイルの名前から末尾の ".scm" を
(もしあれば)除いたものとなる。
-output filename
-load filename
pisl -help
pisl [options] module-specifier ...
module-specifier
で指定されるモジュールを
結合して実行ファイルを生成する。
オプション:
-cc cc-command-line
pisl -help
の出力で知ることができる。
-ld ld-command-line
pisl -help
の出力で知ることができる。
-nold
-nolib
pisl -help
の出力で知る
ことができる。
-o filename
-s filename
-xm module
module
で指定された標準モジュールを
実行ファイルから除く。module
は次のうちのどれか。
expand |
syntax-case によるhygienicマクロ機能。これが除かれると 一部の構文の振る舞いがわずかに変化するが、その変化は 普通のプログラムに影響を及ぼすようなものではない。 | |
stdmacro |
標準のマクロ。rhizome/pi では define, lambda など 基本的な構文キーワードもマクロなのでこれが除かれると 使用できなくなる。アプリケーションが実行時に任意の 式を評価する機能を持たないならこれを除いても安全 である。 | |
debugger |
デバッグ機能。 | |
stdproc |
組み込み手続きのうち rhizome/pi において scheme で
記述されているもの。これを除いた場合何が使用できなく
なるかはソースを参照のこと :-)
これを除くと debugger も自動的に除かれる。 |
-aux string
string
をリンカのコマンドラインに追加する。
すでにオブジェクトファイルになっているモジュールを指定する目的に使用
できる。module-specifier
の指定方法
module-specifier
には pisc の -module
オプションで指定した名前を指定する。
そのモジュールが含まれるファイルがモジュール名に ".c" を追加した名前で
ない場合、ファイル名を ':' のあとに指定する。また、ファイルが既に
オブジェクトファイルになっている場合は ':' のあとを空文字列にし、
オブジェクトファイルの名前を -aux オプションを使用して指定する。
例
ソースファイル x.scm, y.scm, z-0.scm をコンパイルして実行ファイルを
作成するとする。以下はコンパイルの手順の一例である。
pisc x.scm # x.c を生成 pisl -nold x # x.o を生成 pisc y.scm # y.c を生成 pisc -module zz -output z-0.c z-0.scm # z-0.c を生成、モジュール名は zz pisl -aux x.o x: y zz:z-0.c # 実行ファイルを生成生成された実行ファイルを起動すると各ソースファイルをインタプリタ上で pisl に与えたモジュール指定の順にロードした場合と同様の動作をする。 上の例では、a.scm の内容が
(load "x.scm") (load "y.scm") (load "z-0.scm")であったとして
pi a.scm [arguments]とした場合と同様の動作となる。
(exit)
するようになっていれば、生成されるものは非対話的なプログラムになる。また、
一連の手続きの定義のみを含むプログラムをコンパイルすれば生成されるものは
その手続きがあらかじめ定義された scheme インタプリタとなる。ただしこの
場合起動時の第一引数をロードするといった pi と同じ動作を望むなら、その
動作をプログラムに記述しなければならない(pi/interprt/pi.pi をリンクすれば
よい。pi 自身は "pisc -module pi pi.pi; pisl -o pi pi"
として作成できる。)