saphire script language

このプログラムについて
    Linuxで動くスクリプト言語です。大変パフォーマンスが悪いので、その点を了承して使ってください。

コンパイルと実行を試したOS
    Debian 6
    OSX 10.7.0
    cygwin 1.7.9
    Oracle Solaris 11 Express
    FreeBSD 8.2

使用上の注意
    このプログラムの実行は自己責任で行ってください。プログラムの実行という重要な操作を行うプログラムであるという認識は作者にもあり、しっかりとデバッグを行っていますが、もし見過ごしている不具合があって、実行結果によって使用者が被害を被っても作者は責任は持てません。このことが承知できる方だけ使用してください。また、あくまで作者が余暇で個人的に作っているソフトウェアであるためミッションクリティカルなシステムでの使用は止めてください。自宅の個人で使うPCなどで使ってください。重要なシステムで使って損害が出ても作者は責任を取れません。あと仕様はこのプログラム自身なので仕様変更によってご迷惑をかけることがあるかもしれないことをご了承ください。

コンパイルの仕方
    コンパイルするためにはまずsaphireが使っている（依存している)ライブラリをインストールする必要があります。

    saphireが依存しているライブラリ、プログラムは

    gcc (コンパイラ)
    Cライブラリ。
    libm (数学ライブラリ。三角関数や指数計算などを行えるライブラリ)
    ncurses (端末制御ライブラリ。画面に文字列を任意の場所に表示するためのライブラリ)
    readline (行志向のインタラクティブユーザーインターフェース作成ライブラリ）
    oniguruma (正規表現ライブラリ。正規表現という文字列を楽に操作するため文字列処理用のライブラリです)
    C/migemo (日本語ファイルが変換無しのローマ字入力でコマンドライン補完できるライブラリ。このライブラリは無くてもコンパイルできます)

    の７つです。

    gccはFedoraではgcc, Debianでもgccをインストールします。Ubuntuではgccはデフォルトで入っています。

    Cライブラリは大抵のディストリビューションではデフォルトで入っています。Ubuntuでは2010年2月現在ではlibc6-devという名前になっています。インストールしてください。

    ncurseseは大抵のディストリビューションで最初からインストールされていますが、インストールされているのはユーザー用のパッケージである場合が多いです。コンパイルするためには開発用のパッケージをインストールする必要があります。Fedoraでは開発用のパッケージ名は-develと名づけられていることが多いです。ncursesの場合はncurses-develとなっています。Debian, Ubuntuでは-devというのが開発用のパッケージで、ncursesの場合はlibncurses-devとなっています。

    onigurumaも大抵のディストリビューションでパッケージになっていてFedoraではoniguruma-devel, Debian, Ubuntuではlibonig-devをインストールすれば良いです。

    libmは開発用のパッケージも大抵のディストリビューションでデフォルトでインストールされているはずです。

    C/Migemoは必ず必要なわけではありません。インタラクティブシェルでmigemoを使った補完が行いたい場合は./configureに--with-migemoを付けて有効にしてください。C/Migemoはパッケージになっているディストリビューションやなっていないディストリビューションがまちまちです。Fedoraではパッケージ名がcmigemo-develとなっています。Debian, Ubuntuではパッケージになっていないようなので以下のページでインストールしてください。

    Kaoriya.net http://www.kaoriya.net/#CMIGEMO

    ダウンロードするファイルはソースコード 1.3開発版 (MITラインセンス)がいいでしょう。コンパイル方法はダウンロードしたファイルの中のドキュメントに書いてあります。

注) 2010/03 KaoriyaのC/MigemoはUTF8の辞書ライブラリがありませんでした。/usr/share/cmigemo/{eucjp,sjis}か/usr/local/share/migemo/{eucjp,sjis}に置いてある辞書ファイル全てをnkf -w 辞書ファイル名 > /usr/local/share/migemo/utf-8/辞書ファイル名としてUTF-8の辞書を作ってください。

    readlineは開発用のパッケージはデフォルトでインストールされないようです。Fedoraではreadline-devel Debian, ubuntuではlibreadline-devをインストールしてください。OSXでは標準でインストールされるreadlineはlibeditなので、そのままではコンパイルが通りません。GNUのreadlineをインストールする必要があります。ftp://ftp.gnu.org/gnu/readlineの中にあるreadlineのソースを取ってきてコンパイル、インストールしてください。コンパイルしたreadlineは--with-readline-dirでreadlineがインストールされたディレクトリ(prefix)を示してください。/usr/local以下にインストールした場合は必要ないはずです。もしくはMacPortsやその他のGNUなどのフリーソフトウェアをパッケージとしてインストールするシステムを導入してパッケージとしてreadlineをインストールしてください。

    あと以下のプログラムにも依存しています。

    多言語対応ページャ lv 日本語でhelpが見たい場合は必要です。

    lvは大抵のディストリビューションでパッケージになっています。日本語でヘルプを読むために必要です。lessはディストリビューションによっては日本語が化ける場合があるようなのでページャはlvがおすすめです。

    さて依存ライブラリ、依存プログラムが全てインストールできたら

    ./configure 
    make
    sudo make install

    もしくは
    ./configure
    make
    su
    make install

    を行って下さい

    デフォルトのprefix(インストールディレクトリ)では/usr/local以下にインストールしようとするのでmake installの実行には管理者権限が必要です。

    DESTDIRでインストール先を別のディレクトリにする場合

    sudo make DESTDIR=??? install

    としてください。

    実行すれば/usr/local/binにsaphireshとsaphireコマンドが, /usr/local/etc/に設定ファイルがインストールされます。

    configureでは以下のオプションが使用できます。

    --prefix インストールするディレクトリを指定します。たとえば--prefix=$HOMEとすると$HOME/binに実行ファイルが$HOME/etcに設定ファイルが設定されます。デフォルトでは/usr/localです。
    --with-optimize コードの最適化を有効にします。最適化を行うと実行速度が速くなります。ただし有効にすると環境によっては不安定になります。(Linuxでは大丈夫なようです)
    --with-migemo C/Migemoを有効にします。C/Migemoはインストールしただけではsaphireで使われません。このオプションを指定して有効にしてください。
    --with-onig-dir 鬼車が標準の場所にインストールされていない場合はインストールされたディレクトリを指定します。(指定するのはprefixのディレクトリ)
    --with-migemo-dir C/Migemoが標準の場所にインストールされていない場合はインストールされたディレクトリを指定します。(指定するのはprefixのディレクトリ)
    --with-readline-dir Readlineが標準の場所にインストールされていない場合はインストールされたディレクトリを指定します。(指定するのはprefixのディレクトリ)
    --with-system-migemo-dir C/Migemoの辞書ファイルの位置を指定します。
    --with-debug デバッグ用の実行ファイルを作成する。gdbでデバッグできる-gオプションをgcc(コンパイラ)に付与します。メモリリークの検出も行えます。
    --with-gprof-debug プロファイラgprof用の実行ファイルを作成する。-pgオプションをCFLAGSに付与します。
    --with-static 共有ライブラリを使わない実行ファイルを作成する。

    saphireはライブラリを作成するので
    /etc/ld.so.confにlibsaphire.soがある場所(デフォルトなら/usr/local/lib)を追加して
    
    sudo ldconfig
    
    もしくは

    su
    ldconfig
    
    を実行して共有ライブラリの検索キャッシュを更新して置いてください。(Linuxでは)
    管理者権限がない場合は共有ライブラリのあるパスを
    環境変数LD_LIBRARY_PATHに書いておくとプログラムの実行時に行われる
    共有ライブラリのサーチに追加されます。(OSXではDYLD_LIBRARY_PATH_FALLBACK。DYLD_LIBRARY_PATHよりDYLD_LIBRARY_PATH_FALLBACKのほうがよい)

OSXでのコンパイルや実行について
    readlineのコンパイル
    6.1は通りました
    /usr/localがprefix

    OSXのreadlineはlibeditなのでGNU readlineを入れる必要がある

    nkfのコンパイル

    onigurumaのコンパイル

    C/Migemoのコンパイル
    
    nkfでC/MigemoでUtf8の辞書を作る
    (追記:iconvでUTF-8Macに変換する必要はありませんでした。）

    sudo bash
    cd /usr/local/share/migemo/cp932
    for i in *; do nkf -w $i > ../utf-8/$i; done

    ./configure --with-migemo --with-readline-dir=/usr/local --with-system-migemodir=/usr/local/share/migemo
    make && sudo make install

    で出来上がり

使用するファイル
    /usr/local/bin/saphire プログラム本体
    /usr/local/bin/saphiresh インタラクティブシェル本体
    /usr/local/etc/saphire.sa 設定ファイルのソース
    /usr/local/etc/saphire.sao 設定ファイルのsaphire実行形式
    /usr/local/etc/shelp.sa ヘルプの設定ファイル
    /usr/local/etc/shelp.sao ヘルプの設定ファイルの実行形式
    /usr/local/etc/completion.sa コマンドライン補完の設定ファイルのソース
    /usr/local/etc/completion.sao コマンドライン補完の設定ファイルのsaphire実行形式
    ~/.saphire/saphire.sao ユーザーの設定ファイルのsaphire実行形式(/usr/local/etc/saphire.saoが読まれた後に読まれる）
    ~/.saphire/user_compl.sao ユーザーのコマンドライン補完設定ファイルのsaphire実行形式(/usr/local/etc/user_compl.saoが読まれた後に読まれる）
    ~/.saphire/history コマンドラインヒストリー
    ~/.saphire/tmp 一時ファイルの格納ディレクトリ
    /usr/local/share/migemo/{utf-8,eucjp.sjis}/{han2zen.dat,hira2kana.dat,migemo-dict,roma2hira.dat} migemoの辞書ファイル
    /usr/share/cmigemo/{utf-8,eucjp.sjis}/{han2zen.dat,hira2kana.dat,migemo-dict,roma2hira.dat} migemoの辞書ファイル

saphireが使用するエンコード、改行コード
    スクリプトファイルはエンコードはUTF8,改行コードはLFできめ打ちです。言語本体が扱うデータはUTF8, EUCJP, SJISのエンコードやLF,CR,LFCRのラインフィールドに対応しています。
    インタラクティブシェルの使用端末はUTF8端末決めうちです。UTF8端末で実行してください。

使い方
    readlineインターフェースを使ったインタラクティブシェルとして使いたい場合はsaphireshを、スクリプトファイルの実行や-cオプションを使ったコマンド実行はsaphireをお使いください。スクリプトファイルの実行などはsaphireshでも行えますが、readlineやmigemoをリンクしない分、saphireの方が消費メモリも少なく起動も速いです。
    saphireshを実行中にヘルプが見たい場合はshelpをお使いください。

C/Migemoの使用メモリについて
    物凄く大きいです(コンソールアプリケーションにしては)。問題になる場合はmigemoを外してコンパイルしてください。Migemoによる日本語ファイルの補完はできなくなりますけど。

cygwinでの実行
    特に特別なことは行わなくてもコンパイルが通るはずです。作者はcygwinをよく使うので安定性も悪くないはずです。ただ、forkの実行速度が遅いため内部でsedを使っているコマンドライン補完は遅いです。

saphireをアプリケーションに組み込む
    saphireはアプリケーション組み込み用のとしても使えます。ただ、あまりインターフェースが整備されていないため、おすすめはできないかもしれません。
    詳しい組み込み方はmain.cとsaphire.hを見てもらえれば分かります。
    基本的にlibsaphire.soがサーチされていていればsaphire.hをincludeするだけで使えます。

バージョンアップ時の注意
    CHANGELOG.txtに書いてありますが、バージョンアップ時にsaphireのソースのコンパイル形式が変わることがあります。そのときは~/.saphire/saphire.saを書いていたら、もう一度コンパイルし直してください。起動できなくなります。他にもコンパイルしているソースがあるなら、コンパイルしなおしてください。

同封ファイルの説明
    AUTHORS 著者情報
    CHANGELOG.txt 変更記録
    LINCENSE MITラインセンス
    Makefile.in configureで使うMakefileの元
    README.ja.txt このファイル
    README.en.txt このファイルの英訳
    USAGE.ja.txt 使い方ファイル
    USAGE.en.txt 使い方のファイルの英訳
    config.h.in configureで使うconfig.hの元
    configure configureプログラム
    configure.in configureプログラムの元
    install.sh configureで使うファイル
    headers/saphire/saphire.h saphireをアプリケーションに組み込むときにインクルードするヘッダー
    saphire.sa saphireのランタイムスクリプト
    completion.sa saphireのコマンドライン補完のランタイムスクリプト
    shelp.sa saphireのヘルプファイル
    コマンドライン補完のランタイムスクリプト
    src/saphire_commands.c saphireの組み込みコマンド
    src/saphire_commands_string.c saphireの組み込みコマンド（文字列処理関連)
    headers/saphire/saphire_inner.h saphire内部で使う宣言
    src/saphire_main.c saphire内部で使うルーチン
    src/saphire_parser.c saphireのパーサー
    src/saphire_vm.c saphireの本体
    src/main.c saphireを組み込んだインタラクティブシェル(saphiresh)プログラム本体
    src/saphire_curses.c オリジナル端末制御ライブラリ
    headers/saphire/saphire_curses.h
    src/saphire_debug.c デバッグ用のライブラリ
    headers/saphire/saphire_debug.h
    src/saphire_extra.c その他の便利ルーチン
    headers/saphire/saphire_extra.h
    src/saphire_hash.c ハッシュコンテナライブラリ
    headers/saphire/saphire_hash.h
    src/saphire_kanji.c 漢字処理用のライブラリ
    headers/saphire/saphire_kanji.h
    src/saphire_list.c リストコンテナライブラリ
    headers/saphire/saphire_list.h
    src/saphire_string.c 文字列ライブラリ
    headers/saphire/saphire_string.h
    src/saphire_vector.c 動的配列ライブラリ(Javaと違ってsaphire_listより多くの場合効率的だと思われる)
    headers/saphire/saphire_vector.h
    src/readline.c readlineライブラリを使ってインタラクティブシェルを実現しているソース

著作権
    ab25cqにあります。ライセンスはMITライセンスとします。

