For Development HEAD DRAFTSearch (procedure/syntax/module):

3.1 Gaucheを起動する

Gaucheは独立したSchemeスクリプティングエンジンとしても、組み込みのSchemeライブラリとしても 使うことができます。Gaucheのディストリビューションには、goshという インタラクティブなインタプリタが附属しています。

Program: gosh [options] [scheme-file arg …]

Gaucheのインタプリタです。 scheme-fileが与えられなければ、 goshはインタラクティブに動作します。すなわち、標準入力からScheme式を読み込み、 それを評価して結果をプリントするという動作を、EOFを読むか明示的に終了させられるまで 続けます。

もしscheme-fileが与えられておらず、しかし入力が端末でない場合、 goshはread-eval-printループに入りますが、入力待ちの際にプロンプトを 表示しません。これはScheme式をパイプでgoshに処理させる場合に便利です。 -bまたは-iオプションでこの動作を強制的にonまたはoffできます。

scheme-fileが与えられた場合、goshはそれをSchemeプログラムとして ロードし、終了します。この動作に関してはSchemeスクリプトを書くを参照して 下さい。


3.1.1 コマンドラインオプション

goshには以下のようなコマンドラインオプションがあります。 ‘−’ で始まらない最初のコマンドライン引数がスクリプトファイルと認識されます。 スクリプトファイル名が ‘−’ で始まっている可能性がある場合は、ダミーオプション ‘--’ をスクリプトファイル名の前に置いて下さい。

Command Option: -I path

pathをロードパスのリストの最初に加えます。このオプションは複数指定できます。

Command Option: -A path

pathをロードパスのリストの末尾に加えます。このオプションは複数指定できます。

Command Option: -q

goshが起動時にシステムの初期化ファイルをロードしないようにします。

Command Option: -V

goshのバージョンおよび様々なコンフィグレーション情報を表示します (SRFI-176)。コンフィグレーション情報についてはversion-alistを見てください (環境の問い合わせ)。 どういった情報を表示するかは、環境変数GAUCHE_VERSION_INFO_EXCLUSIONで カスタマイズできます。環境変数参照。

Command Option: -v version

versionが実行されたgoshのバージョンでなく、かつ指定されたバージョンの Gaucheがシステムにインストールされていた場合、指定バージョンのgoshをかわりに起動します。 これは、Gaucheのバージョンを特定して実行したい場合に便利です。 なお、この機能で指定できるversionは0.9.6かそれ以降のみです。

指定のバージョンのGaucheがシステムにインストールされていない場合、goshは メッセージを出して終了します。これを避けたい場合、versionの前に:を 加えると、Gaucheは指定バージョンが見つからない場合は自分自身の実行を続けます。

# Suppose you don't have version 0.9.13 on your machine.
$ gosh -v 0.9.13
No installed Gauche with version 0.9.13 under /usr/lib/.
$ gosh -v :0.9.13
WARNING: No installed Gauche with version 0.9.13 under /usr/lib/. Using the current version.
gosh$ (gauche-version)
"0.9.15"
Command Option: -u module

起動後、インタラクティブなread-eval-printループに入る前、もしくはscheme-file をロードする前にmoduleを“use”します。つまりそのモジュールがロードされ インポートされます。(useの詳細についてはモジュールの定義と選択を参照して下さい。) このオプションは複数指定できます。

Command Option: -l file

起動後、インタラクティブなread-eval-printループに入る前、もしくはscheme-file をロードする前にfileをロードします。ロードの詳細についてはSchemeファイルのロード を参照して下さい。このオプションは複数指定できます。

Command Option: -L file

-lオプションと同様にfileをロードしますが、 fileが見つからなかった場合はエラーを報告せずに黙って無視します。 このオプションも複数指定できます。

Command Option: -e scheme-expression

起動後、インタラクティブなread-eval-printループに入る前、もしくはscheme-file をロードする前にscheme-expressionを評価します。評価は interaction-environment中で行われます(eval と repl参照)。 このオプションは複数指定できます。

Command Option: -E scheme-expression

オプション-eとほぼ同じですが、scheme-expressionは それが括弧で囲まれているかのように読まれます。 このオプションは複数指定できます。例:

% gosh -umath.const -E"print (sin (* pi/180 15))" -Eexit
0.25881904510252074
Command Option: -b

バッチ。入力が端末であってもプロンプトを出さないようにします。

Command Option: -i

インタラクティブ。入力が端末で無くてもプロンプトを出すようにします。

Command Option: -m module

スクリプトファイルが与えられた場合に、main手続きを 探すモジュールを指定します。デフォルトではuserモジュールが探されます。 スクリプトの実行について詳しくはSchemeスクリプトを書くを見てください。

moduleで指定されたモジュールが、スクリプトファイルのロード後にも 存在しない場合は、エラーが報告されます。

このオプションは、スクリプトとしても使えるようなSchemeモジュールを書く際に便利です。

Command Option: -f compiler-option

このオプションはコンパイラとランタイムの動作に影響を与えます。 今のところ、次のオプションのみがcompiler-optionとして有効です。

case-fold

シンボルの大文字小文字を区別しません。 大文字小文字の区別 を参照して下さい。

include-verbose

ファイルがincludeされる時にそれを報告します。 正確にどのファイルがどういう順序でincludeされているかを調べるのに便利です。

load-verbose

ファイルがロードされる時にそれを報告します。 正確にどのファイルがどういう順序でロードされているかを調べるのに便利です。

no-inline

一切のインライン展開を行いません。このオプションは以下の no-inline-globals、 no-inline-locals、no-inline-constants、no-inline-setters を同時に指定したのと等価です。

no-inline-constants

定数のインライン展開を行ないません。

no-inline-globals

大域(global)関数のインライン展開を展開を行ないません。

no-inline-locals

局所(local)関数のインライン展開を展開を行ないません。

no-inline-setters

セッター関数のインライン展開を行いません。

no-lambda-lifting-pass

lambda lifting最適化パスを抑止します。

no-post-inline-pass

インライン展開後に再び最適化パスを走らせるのを抑止します。

no-source-info

デバッグのためのソースファイル情報を保持しません。メモリの使用量は小さくなります。

safe-string-cursors

文字列カーソルをそのカーソルが作られた文字列以外の文字列に使おうとした時に エラーを投げます。バグを検出できますが、文字列カーソルが常にヒープアロケートされる ので性能は低下します。文字列カーソル参照。

test

Gaucheをソースツリーからコンパイルしたまま、 インストールせずに実行するためのオプションです。 このオプションが指定されると、goshは初期化ファイルを読む前に、 goshのあるディレクトリからの相対パスで ../lib../libsrc../src をロードパスに加えます。

warn-legacy-syntax

文字列リテラル中に古い形式の16進数エスケープ形式があったら警告します。 リーダー字句モード を参照して下さい。

Command Option: -p profiler-option

プロファイラを有効にします。以下のようなprofiler-optionが 今のところサポートされています。

time

関数中で費された時間と、各関数が呼ばれた回数を記録して報告します。

load

各モジュールをロードするのにかかった時間を記録して報告します。 スクリプトの起動時間をチューンするのに便利です (実経過時間が報告されます)。

詳しくはプロファイラを使うを参照して下さい。

Command Option: -r standard-revision

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モジュールを継承した もので、importdefine-libraryだけが定義されています。

-r7をつけたgoshを対話REPLとして起動した場合は、簡便のために (scheme r5rs)を除く全てのR7RS-smallライブラリが importされた状態になっています。

GaucheがR7RSをどのようにサポートしているかの詳細については ライブラリモジュール - R7RS標準ライブラリを参照してください。

(註: -r7オプションは、リーダ字句モードをstrict-r7に 替えることはしません。strict-r7モードをデフォルトにすると、 多くのGaucheコードをロードすることができなくなるからです。リーダ字句モードについては リーダー字句モードを参照してください。)

Command Option: --

このオプションに出会うと、goshはオプションの解析を止めて、その次の引数を 無条件にscheme-fileであると見倣します。scheme-fileがマイナス記号で 始まっている場合に必要です。

オプション-I, -A, -l, -u, -e 及び -E は、それらがコマンドライン引数として 出現した順に処理されます。例えば、-Iにより追加されるロードパスは それ以降の-lや-uオプションに影響を与えますが、それ以前のものには影響を 与えません。


3.1.2 環境変数

以下の環境変数を認識します。

Environment variable: GAUCHE_AVAILABLE_PROCESSORS

sys-available-processors でシステムのプロセッサ数を 取得できます(環境の問い合わせ参照)。 ライブラリやプログラムの中には、その数に基づいて並行に走るスレッド数を 調整するものがあります。けれども、テストやベンチマークでその数を 変えたいと思うことがあるかもしれません。例えば、8コア上では自動的に 8スレッド使うプログラムがあったとして、並列化の効果を見るためにその プログラムを1,2,4スレッドで走らせてベンチマークを取る、といった場合です。 この環境変数は、sys-available-processorsが返す値を上書きします。

Environment variable: GAUCHE_CHECK_UNDEFINED_TEST

#<undef>が条件式のテスト式に使われた場合に警告を出します。

真偽値判定では#<undef>は真とみなされます。しかし、 #<undef>を返す手続きはしばしば、 「戻り値に意味はない」ことを示すためにそれを返しています。 戻り値に意味がないなら、その値に依存したコードを書くべきではありません。 もし、手続きが将来、もともと意味が無いのだからと戻り値を変えた場合に、 #<undef>に依存してたコードは壊れる可能性があります。 詳しくは未定義値を参照してください。

この機能はなるべくONにしておくようにお勧めします。 将来はデフォルトで警告を出すようにする予定です。

Environment variable: GAUCHE_DYNLOAD_PATH

この変数によって、動的にロードするオブジェクト用の追加ロードパスを 指定できます。パスは ’:’ で区切ります。 この変数によって指定されたパスはシステムのデフォルトのロードパスの前に 連結されます。

Gaucheが動的にロードするオブジェクトファイルを探す方法については ダイナミックライブラリのロードを参照してください。

Environment variable: GAUCHE_EDITOR
Environment variable: EDITOR

これはgauche.interactiveモジュールのed手続きで使われます。 詳しくはgauche.interactive - インタラクティブセッションを参照してください。

Environment variable: GAUCHE_HISTORY_FILE

REPLのヒストリがセーブされるファイル名を指定します。 この環境変数が定義されていなければ、ヒストリは~/.gosh_historyにセーブされます。 この環境変数が定義されており、しかし空文字列だった場合はヒストリはセーブされません。 (また、プロセスがsuid/sgidされている場合もヒストリは保存されません)。

Environment variable: GAUCHE_KEYWORD_DISJOINT
Environment variable: GAUCHE_KEYWORD_IS_SYMBOL

この二つの環境変数は、キーワードがシンボルとして扱われるかどうかに影響します。 詳しくはキーワードを参照してください。

Environment variable: GAUCHE_LEGACY_DEFINE

トップレベルのdefineの振る舞いを0.9.8およびそれ以前のものに 合わせます。これは、厳密にはR7RSに従わない、古いコードを走らせる必要が ある場合に使ってください。詳しくは Scheme多世界へようこそ参照。

Environment variable: GAUCHE_LOAD_PATH

この環境変数によって、追加するロードパスを指定できます。 パスは ’:’ で区切ります。 この変数によって指定されたパスはシステムのデフォルトのロードパスの前に 連結されます。

GaucheがロードするSchemeファイルを見つける方法について詳しくは Schemeファイルのロードを参照してください。

Environment variable: GAUCHE_MUTABLE_LITERALS

リテラルリストとリテラルベクタの改変を許します。 そういったコードは正しいSchemeプログラムではなく、今のGaucheはエラーを投げますが、 0.9.9とそれ以前のバージョンではリテラルリストとリテラルベクタの変更はチェックされて いませんでした。うっかりリテラルを変更してしまっている古いコードを走らせたい場合のみ この環境変数をセットしてください。詳しくはリテラル参照。

Environment variable: GAUCHE_NO_READ_EDIT

REPLプロンプトでの行編集機能をオフにします。 行編集機能はまた、-fno-read-editコマンドラインオプションや、 REPLセッション中の ,edit off トップレベルコマンドでも切ることができます。 詳しくはインタラクティブな開発を参照してください。

Environment variable: GAUCHE_QUASIRENAME_MODE

これはquasirenameの振る舞いに影響を与え、 0.9.7以前との互換性のために使われます。詳しくは Explicit-renamingマクロ変換器を参照してください。

Environment variable: GAUCHE_REPL_NO_PPRINT

これはREPLプロンプトでプリティプリントを抑制するために gauche.interactiveで使われます。 詳しくはインタラクティブな開発を参照してください。

Environment variable: GAUCHE_SUPPRESS_WARNING

システムの警告(WARNING: ...)を抑止します。気軽に使うべきではありません。 どうしても必要な場合のみ使ってください。

Environment variable: GAUCHE_TEST_RECORD_FILE

gauche.testモジュールで使われます(gauche.test - 単体テスト参照)。 定義されていた場合、その値を名前とするファイルにテストの統計が記録されます。

Environment variable: GAUCHE_TEST_REPORT_ERROR

gauche.testモジュールで使われます(gauche.test - 単体テスト参照)。 定義されていた場合、テストのthunkがエラーを報告した場合に、 スタックトレースを標準エラー出力に表示します (エラーがもともと期待されているテストでも出力されます)。 予想外のエラー発生の原因を調べるのに便利です。

Environment variable: GAUCHE_VERSION_INFO_EXCLSION

値はversion-alistに現れるキーをコンマ区切りで並べたものです (環境の問い合わせ参照)。ここに挙げられたキーは、gosh -V の出力から除外されます。例えば次の設定は、gosh -Vの出力に scheme.pathbuild.configureを含めません。 これらの値はユーザ名やプロジェクト名を含んでいる場合がありますが、 バグレポート等にgosh -Vの結果を含める時に、 それらをうっかり公開してしまわないようにしたい、という場合などに便利です。

GAUCHE_VERSION_INFO_EXCLUSION=scheme.path,build.configure
Environment variable: TMP
Environment variable: TMPDIR
Environment variable: TEMP
Environment variable: USERPROFILE

これらはsys-tmpdirの返り値に影響を与えます。プラットフォームによって 参照される環境変数は異なります。パス名を参照してください。


3.1.3 Windows特有の実行ファイル

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の下にいくつかサンプルが あります



For Development HEAD DRAFTSearch (procedure/syntax/module):
DRAFT