Vlisp-compile
- 構文
- (vlisp-compile 'mode filename [out-filename])
- 機能
- AutoLISP ソース コードを FAS ファイル(bricscadでは DESファイル)にコンパイルする。
- 注: vlisp-compile 関数を実行するには、Visual LISP IDE が開いている必要があるため、AutoCAD 2021 以降は lispsys のシステム変数を変えて実行する必要がある。
- 引数
-
- mode : コンパイラ モード。次のシンボルの 1 つを指定することができる。
- st 標準の作成モード
- lsm 最適化および間接リンク
- lsa 最適化および直接リンク
-
- filename : AutoLISP ソース ファイルを示す文字列。ソース ファイルが CAD のサポート ファイル検索パス内に存在する場合、パスを省略できる。ファイル拡張子を省略すると、.lsp とみなされる。
- out-filename : コンパイルされた出力ファイルを示す文字列。出力ファイルを指定しなかった場合、vlisp-compile 関数は出力ファイルを、入力ファイルと同じ名前になる。拡張子は AutoCAD の場合は .fas に、BricsCAD の場合は .des になる。
出力ファイル名を指定し、入力ファイルと出力ファイルのどちらにもパス名を指定しなかった場合、vlisp-compile 関数は出力ファイルを CAD のインストール フォルダに作成する。
- 戻り値
- コンパイルが成功した場合は T。 それ以外の場合は nil。
mode引数について
- st(標準の作成モード)= 最小の出力ファイルが生成される。このモードは 1 つのファイルからなるプログラムに適している。
- lsm (間接的に最適化およびリンク)= コンパイルされたファイルが最適化されるが、コンパイルされたコード内のコンパイルされた関数への直接参照は作成されない。
- lsa (直接的に最適化およびリンク)= コンパイルされたファイルが最適化され、関数シンボルへの直接参照の代わりに、コンパイルされたコード内のコンパイルされた関数への直接参照が作成される。
注: lsm,lsa の最適化オプションはどちらも、大きくて複雑なプログラムに適している。
次に、最適化の基本的な機能を示す。
- 関数呼び出しをリンクして関数シンボルに対してではなく、コンパイルされたコード内のコンパイルされた関数に対する直接参照を作成する。この機能により、コンパイルされたコードのパフォーマンスが向上し、実行時に関数が再定義されないようにコードが保護される。
- 関数名をドロップしてコンパイルされたコードをより安全確実にし、プログラムのサイズを小さくしてロード時間を短縮する。
- すべてのローカル変数名をドロップし、ローカル変数名の参照を直接リンクする。これは、コンパイルされたコードをより安全確実にし、プログラムサイズを小さくしてロード時間を短縮する。
- 1つの機能を複数のファイルで構成して作成しているようなプログラムの場合に、lsm,lsa のモードを検討するとパフォーマンスも上がるし変数の扱いも間違えなくなるし良いよねという事。それ以外の適当に作成しているプログラムとかは st モードが楽かもしれません。
- BricsCAD では、mode は無視される。読み込み時に別の手法で最適化される仕組みがある。
AutoCAD 2021 からのユニコード対応
AutoCAD 2021 ベースの製品は、LISP がユニコード対応したため FAS ファイルを Unicode と MBSC(マルチバイト文字列)の 2 つの異なるファイル形式にコンパイルできるようになっている。 Unicode 形式の FAS ファイルは、AutoCAD 2021 以前の製品とは互換性がなくなるので、Unicode 文字列を適切にサポートする必要がある。 Unicode と MBSC の切り替えは、lispsys のシステム変数で行うことが出来、内容は次の通り。
- LISPSYS = 1 : ユニコードの FAS にコンパイルされる。
- LISPSYS = 0 または 2 : ASCII(MBSC)の FAS にコンパイルされる。
- サンプル
; yinyang.lsp が CAD のサポートのファイル検索パスで指定されたフォルダに存在する場合、次のコマンドは、そのプログラムをコンパイルする。 (vlisp-compile 'st "yinyang.lsp") T ; autocad だと yinyang.fas bricscadだと yinyan.des という名前の出力ファイルが、ソース ファイルと同じフォルダに作成される。 ; 次のコマンドは、yinyang.lsp をコンパイルし、GoodKarma.fas という名前の出力ファイルを作成する。 (vlisp-compile 'st "yinyang.lsp" "GoodKarma.fas") ; 上記のコマンドの出力ファイルは、yinyang.lsp が存在するフォルダではなく、AutoCAD インストール フォルダに作成されることに注意。 ; 次の例は、yinyang.lsp をコンパイルし、出力ファイルを c:¥my documents フォルダに作成する。 (vlisp-compile 'st "yinyang.lsp" "c:/my documents/GoodKarma") ; 最後の例では、コンパイルされるファイルの絶対パスを指定する。 (vlisp-compile ‘st "c:/program files/<AutoCAD installation directory>/Sample/yinyang.lsp") ; AutoCAD だと yinyang.fas、BricsCAD だと yinyang.des という名前のファイルが入力ファイルと同じフォルダに作成される。