バインドとシュラウド


シュラウド・コマンド

概要:

     shroud [-full_debug] [-list] [-quiet] [-out shrouded_file] filename.ex[w/u]

主にshroud(シュラウド)コマンドはEuphoriaプログラムをメインファイルとインクルードファイルを一つにまとめて圧縮した単一のファイルへ変換します。この単一のファイルは扱いやすいだけではなく、利用者にソースコードを配布することなくプログラムだけを配布できます。

シュラウドが行われたファイルはEuphoriaソースコードの命令文を一切含みません。正確にはバックエンドインタプリタによって実行される低レベル中間言語(IL)からなります。シュラウドが行われたファイルは一切の構文解析を必要としません。それは即時実行され、大規模プログラムは短時間で起動します。シュラウドが行われたファイルはバックエンドインタプリタで実行する必要があります: backend.exe (DOS), backendw.exe (Windows) または backendu (Linux/FreeBSD)。このバックエンドはフリーであり、プログラムと一緒に自由に配布することができます。これはEuphoriaインタプリタパッケージ euphoria\bin に格納されています。DOSで.ilを実行するには次のようにします:

      backend myprog.il
Windowsでの使用方法:
      backendw myprog.il
Linux または FreeBSDでの使用方法:
      backendu myprog.il

.ilファイルがソースコード命令文を一切含まない場合は、ランタイムエラーが発生して原因の究明に役立つダンプファイルex.errを出力します。

should(シュラウド)は、未使用のルーチンと変数をプログラムから除去します。これにより.ilファイルを圧縮します。大抵は大量の未使用ルーチンと変数が存在します。例えばプログラムがサードパティ製のインクルードファイルと、加えてeuphoria\includeにあるEuphoria標準インクルードファイルをインクルードしているとき、各ファイルはアイテムを数点しか使用していないことがあります。その場合は未使用アイテムは削除されます。

使用できるオプション:

-full_debug - クラッシュ発生時にex.errの完全なダンプを提供するために必要なデバッグ情報を含む大きい.ilファイルを生成します。

通常は、変数名と行番号に関する情報は.ilファイルから除去されるため、ex.errは各変数において名前がない場合は単に"無名(no-name)"にして、行番号はルーチンまたはファイルの開始のみ正確なものになります。なお、グローバルまたローカル変数ではなくプライベート変数の値だけ提示されます。さらに空き領域を節約するために、一部の人々はex.errファイルの情報を一切非公開としたシュラウドを行ったファイルのほうを好むかもしれません。

-list - 削除対象のルーチンおよび定数のリストとして deleted.txtを生成します。
-quiet - 通常のメッセージと統計の出力を抑制します。ただしエラーレポートは出力します。
-out shrouded_file - 変換結果をshrouded_fileへ書き込んでファイルとして出力します。

Euphoriaインタプリタはシュラウドが行われたファイルに対してトレースを行うことはできません。トレースはソース原本に対して行う必要があります。

Linux/FreeBSDでは、シュラウドはシュラウドが行われたファイルの1行目にbackenduのパスとして!#(shebang構文)を加えて実行可能にします。プログラムのメインEuphoriaファイルの1行目に!#を指定することにより#!を上書きできます。

ソース原本のコピーは保存しておいてください。シュラウドが行われたファイルからソースを復旧する方法はありません。


バインド・コマンド

概要:

     bind  [-full_debug] [-list] [-quiet] [-out executable_file] [filename.ex ]
     bindu [-full_debug] [-list] [-quiet] [-out executable_file] [filename.exu]
     bindw [-full_debug] [-list] [-quiet] [-out executable_file] [-con] [-icon filename.ico] [filename.exw]

bind(バインド) (bindwまたはbind)にはshroudと相似する挙動とオプションがあります。それはシュラウドが行われた.ilファイルとバックエンド・インタプリタ(backend.exe, backendw.exe または backendu)を一つに連結した、独立した実行ファイルを作成します。これによりプログラムの利用者はEuphoriaのインストールが不要になります。実行可能ファイルを動作させるたびに、不正改竄または破損に対する迅速に完全性検査が行われます。構文解析を一切必要としないためプログラムは非常に迅速に起動します。

Euphoriaインタプリタはソースに命令文が存在しなくなったときから、バインドが行われたファイルに対してトレースを行うことはできません

使用できるオプション:

-full_debug - 上述のshroudと同じです。 仮にEuphoriaはエラーを検出したとき、このオプションが指定された実行ファイルは一部または完全なex.errのダンプを生成します。
-list - 上述のshroudと同じです。
-quiet - 上述のshroudと同じです。
-out executable_file - このオプションはバインダーによって生成される実行ファイルの名前を指定します。このオプションが指定されないとき、バインドはメインのEuphoriaソースファイルの名前を元に実行ファイルを生成します。
-con - (bindw専用) このオプションはWindows GUIプログラムではなくWindowsコンソールプログラムを生成します。コンソールプログラムは標準出入力を使用でき、新規ウィンドウを生成せずにプログラムを現在のコンソールウィンドウ内で動作させることができます。
-icon filename[.ico] - (bindw専用)プログラムに対してバインドを行うとき、exw.exeのアイコンをあなたが作成または用意したものに差し替えることができます。exw.exeは32x32ドット 256色のアイコンを使用しています。それはE)の形状と相似しています。Windowsのファイルリストでは、この形状はexw.exeおよびバインドが行われたプログラムにおいて表示されます。このアイコンを"exw"という名前を用いてリソースとしてロードすることもできます(用例はeuphoria\demo\win32\window.exw参照してください)。プログラムをバインドするとき、アイコンを32x32ドット 256色 2238バイト以下のものに差し替えることができます。ファイルサイズが2238バイト以下である場合に限り他の寸法のイメージでも動作する場合があります。ファイルには単一のアイコンが要求されます(Windowsは必要に応じて最小・最大イメージを生成します)。なお、標準のE)アイコンファイル euphoria.icoはeuphoria\binディレクトリにあります。

1行Euphoriaプログラムのバインドを行うと、生成された実行ファイルはバックエンドと同じくらいのファイルサイズとなりますが、プログラムに変更を加え続けても実行ファイルの大きさは緩慢に増えていきます。Euphoria標準エディタ ed.exにバインドを行うと、バックエンドに27Kバイトだけ大きさが増えた実行ファイルが生成されます。backendw.exe および backendu (Linux) はUPX を使用して圧縮済みです(http://upx.sourceforge.netを参照してください)。backend.exeはCauseWay DOSエクステンダに添付されているツールを使用して圧縮されています。 backend.exebackendw.exeまたはbackenduには含まれていない多数のピクセルグラフィックスが含まれているため、これら3つのなかでは非常に大きいです。注意事項: いくつかの特別な場合において、圧縮済み実行ファイルはウィルス・スキャナが警告メッセージを発する引き金となることがあります。これは単純な理由としてウィルス・スキャナが不正な実行ファイルであると判断するからです。

ライブラリルーチン command_line()により返された最初の2つの引数において、 バインドされたプログラムでは僅かな差異があります。詳細はlibrary.docを参照してください。

バインドによって生成された実行ファイルは標準出入力を扱うことができます。すなわち、

        myprog.exe < file.in > file.out
"ex myprog.ex"の行を含む小さなDOS .batファイル"ex myprog.ex"を書いたとき、次の方法では出入力のリダイレクトができません:
        myprog.bat < file.in > file.out     (DOSでは動作しません!)
しかし、.batファイルでは別々にリダイレクトを使用することができます。