Next: インタラクティブな開発, Previous: Gaucheでのプログラミング, Up: Gaucheでのプログラミング [Contents][Index]
Gaucheは独立したSchemeスクリプティングエンジンとしても、組み込みのSchemeライブラリとしても
使うことができます。Gaucheのディストリビューションには、gosh
という
インタラクティブなインタプリタが附属しています。
Gaucheのインタプリタです。 scheme-fileが与えられなければ、
gosh
はインタラクティブに動作します。すなわち、標準入力からScheme式を読み込み、
それを評価して結果をプリントするという動作を、EOFを読むか明示的に終了させられるまで
続けます。
もしscheme-fileが与えられておらず、しかし入力が端末でない場合、
gosh
はread-eval-printループに入りますが、入力待ちの際にプロンプトを
表示しません。これはScheme式をパイプでgoshに処理させる場合に便利です。
-b
または-i
オプションでこの動作を強制的にonまたはoffできます。
scheme-fileが与えられた場合、gosh
はそれをSchemeプログラムとして
ロードし、終了します。この動作に関してはSchemeスクリプトを書くを参照して
下さい。
gosh
には以下のようなコマンドラインオプションがあります。
‘-’ で始まらない最初のコマンドライン引数がスクリプトファイルと認識されます。
スクリプトファイル名が ‘-’ で始まっている可能性がある場合は、ダミーオプション
‘--
’ をスクリプトファイル名の前に置いて下さい。
pathをロードパスのリストの最初に加えます。このオプションは複数指定できます。
pathをロードパスのリストの末尾に加えます。このオプションは複数指定できます。
gosh
が起動時にシステムの初期化ファイルをロードしないようにします。
gosh
のバージョンを表示して終了します。
versionが実行されたgosh
のバージョンでなく、かつ指定されたバージョンの
Gaucheがシステムにインストールされていた場合、指定バージョンのgosh
をかわりに起動します。
これは、Gaucheのバージョンを特定して実行したい場合に便利です。
なお、この機能で指定できるversionは0.9.6かそれ以降のみです。
起動後、インタラクティブなread-eval-printループに入る前、もしくはscheme-file
をロードする前にmoduleを“use”します。つまりそのモジュールがロードされ
インポートされます。(use
の詳細についてはモジュールの定義と選択を参照して下さい。)
このオプションは複数指定できます。
起動後、インタラクティブなread-eval-printループに入る前、もしくはscheme-file をロードする前にfileをロードします。ロードの詳細についてはSchemeファイルのロード を参照して下さい。このオプションは複数指定できます。
-l
オプションと同様にfileをロードしますが、
fileが見つからなかった場合はエラーを報告せずに黙って無視します。
このオプションも複数指定できます。
起動後、インタラクティブなread-eval-printループに入る前、もしくはscheme-file をロードする前にscheme-expressionを評価します。評価は interaction-environment中で行われます(eval と repl参照)。 このオプションは複数指定できます。
オプション-eとほぼ同じですが、scheme-expressionは それが括弧で囲まれているかのように読まれます。 このオプションは複数指定できます。例:
% gosh -umath.const -E"print (sin (* pi/180 15))" -Eexit 0.25881904510252074
バッチ。入力が端末であってもプロンプトを出さないようにします。
インタラクティブ。入力が端末で無くてもプロンプトを出すようにします。
スクリプトファイルが与えられた場合に、main
手続きを
探すモジュールを指定します。デフォルトではuser
モジュールが探されます。
スクリプトの実行について詳しくはSchemeスクリプトを書くを見てください。
moduleで指定されたモジュールが、スクリプトファイルのロード後にも 存在しない場合は、エラーが報告されます。
このオプションは、スクリプトとしても使えるようなSchemeモジュールを書く際に便利です。
このオプションはコンパイラとランタイムの動作に影響を与えます。 今のところ、次のオプションのみがcompiler-optionとして有効です。
一切のインライン展開を行いません。このオプションは以下の no-inline-globals no-inline-locals および no-inline-constants を同時に指定したのと等価です。
大域(global)関数のインライン展開を展開を行ないません。
局所(local)関数のインライン展開を展開を行ないません。
定数のインライン展開を行ないません。
インライン展開後に再び最適化パスを走らせるのを抑止します。
lambda lifting最適化パスを抑止します。
デバッグのためのソースファイル情報を保持しません。メモリの使用量は小さくなります。
ファイルがロードされる時にそれを報告します。 正確にどのファイルがどういう順序でロードされているかを調べるのに便利です。
ファイルがincludeされる時にそれを報告します。 正確にどのファイルがどういう順序でincludeされているかを調べるのに便利です。
文字列リテラル中に古い形式の16進数エスケープ形式があったら警告します。 リーダー字句モード を参照して下さい。
シンボルの大文字小文字を区別しません。 大文字小文字の区別 を参照して下さい。
"../src
" と "../lib
" を、初期化ファイルを読む前に
ロードパスに加えます。これは、作成されたgosh
をインストールせずに
実行してみるのに便利です。
プロファイラを有効にします。以下のようなprofiler-optionが 今のところサポートされています。
time
関数中で費された時間と、各関数が呼ばれた回数を記録して報告します。
load
各モジュールをロードするのにかかった時間を記録して報告します。 スクリプトの起動時間をチューンするのに便利です (実経過時間が報告されます)。
詳しくはプロファイラを使うを参照して下さい。
gosh
を、指定されたリビジョンのScheme標準環境で起動します。
現在のバージョンではstandard-revisionとして7のみがサポートされます。
デフォルトでは、gosh
起動時のモジュールはuser
モジュールで、
これはgauche
モジュールを継承しています。すなわち、特に何も指定しないでも
Gaucheのコア関数は全て使えるようになっています。
正しいR7RSプログラムは常にdefine-library
フォームか
R7RS式のimport
フォームで始まり、Gaucheはそれらを見つけると
自動的にR7RS環境へと切り替えるので、特になにもしなくても
R7RSスクリプトやライブラリを使うことはできます。
しかし、R7RS Schemeを勉強中のユーザにとっては、最初に入る環境が
R7RSでないと混乱してしまうかもしれません。
-r7
オプションが与えられると、gosh
は起動時のモジュールを
r7rs.user
モジュールにします。これはr7rs
モジュールを継承した
もので、import
とdefine-library
だけが定義されています。
-r7
をつけたgosh
を対話REPLとして起動した場合は、簡便のために
(scheme r5rs)
を除く全てのR7RS-smallライブラリが
importされた状態になっています。
GaucheがR7RSをどのようにサポートしているかの詳細については ライブラリモジュール - R7RS標準ライブラリを参照してください。
(註: -r7
オプションは、リーダ字句モードをstrict-r7
に
替えることはしません。strict-r7
モードをデフォルトにすると、
多くのGaucheコードをロードすることができなくなるからです。リーダ字句モードについては
リーダー字句モードを参照してください。)
--
¶このオプションに出会うと、gosh
はオプションの解析を止めて、その次の引数を
無条件にscheme-fileであると見倣します。scheme-fileがマイナス記号で
始まっている場合に必要です。
オプション-I, -A, -l, -u, -e 及び -E は、それらがコマンドライン引数として 出現した順に処理されます。例えば、-Iにより追加されるロードパスは それ以降の-lや-uオプションに影響を与えますが、それ以前のものには影響を 与えません。
以下の環境変数を認識します。
sys-available-processors
でシステムのプロセッサ数を
取得できます(環境の問い合わせ参照)。
ライブラリやプログラムの中には、その数に基づいて並行に走るスレッド数を
調整するものがあります。けれども、テストやベンチマークでその数を
変えたいと思うことがあるかもしれません。例えば、8コア上では自動的に
8スレッド使うプログラムがあったとして、並列化の効果を見るためにその
プログラムを1,2,4スレッドで走らせてベンチマークを取る、といった場合です。
この環境変数は、sys-available-processors
が返す値を上書きします。
#<undef>
が条件式のテスト式に使われた場合に警告を出します。
真偽値判定では#<undef>
は真とみなされます。しかし、
#<undef>
を返す手続きはしばしば、
「戻り値に意味はない」ことを示すためにそれを返しています。
戻り値に意味がないなら、その値に依存したコードを書くべきではありません。
もし、手続きが将来、もともと意味が無いのだからと戻り値を変えた場合に、
#<undef>
に依存してたコードは壊れる可能性があります。
詳しくは未定義値を参照してください。
この機能はなるべくONtにしておくようにお勧めします。 将来はデフォルトで警告を出すようにする予定です。
この変数によって、動的にロードするオブジェクト用の追加ロードパスを
指定できます。パスは ’:
’ で区切ります。
この変数によって指定されたパスはシステムのデフォルトのロードパスの前に
連結されます。
Gaucheが動的にロードするオブジェクトファイルを探す方法については ダイナミックライブラリのロードを参照してください。
これはgauche.interactive
モジュールのed
手続きで使われます。
詳しくはgauche.interactive
- インタラクティブセッションを参照してください。
REPLのヒストリがセーブされるファイル名を指定します。 この環境変数が定義されていなければ、ヒストリは~/.gosh_historyにセーブされます。 この環境変数が定義されており、しかし空文字列だった場合はヒストリはセーブされません。 (また、プロセスがsuid/sgidされている場合もヒストリは保存されません)。
この二つの環境変数は、キーワードがシンボルとして扱われるかどうかに影響します。 詳しくはキーワードを参照してください。
トップレベルのdefine
の振る舞いを0.9.8およびそれ以前のものに
合わせます。これは、厳密にはR7RSに従わない、古いコードを走らせる必要が
ある場合に使ってください。詳しくは
Scheme多世界へようこそ参照。
この環境変数によって、追加するロードパスを指定できます。
パスは ’:
’ で区切ります。
この変数によって指定されたパスはシステムのデフォルトのロードパスの前に
連結されます。
GaucheがロードするSchemeファイルを見つける方法について詳しくは Schemeファイルのロードを参照してください。
リテラルリストとリテラルベクタの改変を許します。 そういったコードは正しいSchemeプログラムではなく、今のGaucheはエラーを投げますが、 0.9.9とそれ以前のバージョンではリテラルリストとリテラルベクタの変更はチェックされて いませんでした。うっかりリテラルを変更してしまっている古いコードを走らせたい場合のみ この環境変数をセットしてください。詳しくはリテラル参照。
REPLプロンプトでの行編集機能をオフにします。
行編集機能はまた、-fno-read-edit
コマンドラインオプションや、
REPLセッション中の ,edit off
トップレベルコマンドでも切ることができます。
詳しくはインタラクティブな開発を参照してください。
これはquasirename
の振る舞いに影響を与え、
0.9.7以前との互換性のために使われます。詳しくは
Explicit-renamingマクロ変換器を参照してください。
これはREPLプロンプトでプリティプリントを抑制するために
gauche.interactive
で使われます。
詳しくはインタラクティブな開発を参照してください。
システムの警告(WARNING: ...
)を抑止します。気軽に使うべきではありません。
どうしても必要な場合のみ使ってください。
gauche.test
モジュールで使われます(gauche.test
- 単体テスト参照)。
定義されていた場合、その値を名前とするファイルにテストの統計が記録されます。
gauche.test
モジュールで使われます(gauche.test
- 単体テスト参照)。
定義されていた場合、テストのthunkがエラーを報告した場合に、
スタックトレースを標準エラー出力に表示します
(エラーがもともと期待されているテストでも出力されます)。
予想外のエラー発生の原因を調べるのに便利です。
これらはsys-tmpdir
の返り値に影響を与えます。プラットフォームによって
参照される環境変数は異なります。パス名を参照してください。
Windowsネイティブ環境(mingw)では、インタプリタとしてふたつの
実行ファイルがインストールされます。
gosh.exe
はWindowsコンソールアプリケーションとしてコンパイルされ、
普通のgosh
のように、標準入出力を第一の通信手段とします。
もう一つの実行ファイルgosh-noconsole.exe
はWindows非コンソールアプリケーション
としてコンパイルされています。こちらは起動時にコンソールに接続されません。
標準入力はNUL
デバイスに接続されます。標準出力と標準エラー出力は
特殊なポートに接続され、最初に書き込みがあった時点で新たなコンソールが作られて
出力されます。(このトリックはSchemeポート経由の出力のみで動きます。
低レベルのCライブラリが標準出力や標準エラー出力に直接書き出したデータは捨てられます)。
gosh-noconsole.exe
の目的は、Windows上でのスクリプティングです。
Schemeスクリプトがもしgosh.exe
に関連付けられていたとしたら、
Explorerからそのスクリプトを起動するたびに、
必ず新しいコンソールウィンドウが開くので非常に煩わしいです。
Schemeスクリプトをgosh-noconsole.exe
に
関連づけておけば、この煩わしいコンソールの出現を抑制できます。
Windows版のオフィシャルのインストーラを使ってGaucheをインストールしたなら、
Schemeスクリプト(*.scm)は既にgosh-noconsole.exe
に
関連づけられているので、ExplorerからSchemeスクリプトをダブルクリックすれば
Schemeプログラムを走らせることができます。
C:\Program Files\Gauche\examplesの下にいくつかサンプルが
あります
Next: インタラクティブな開発, Previous: Gaucheでのプログラミング, Up: Gaucheでのプログラミング [Contents][Index]