2020-04-23T01:28:23+09:00
ModuleLoader 4.0.4 : AppleScript の近代的なライブラリシステム
ModuleLoader は AppleScript のライブラリシステムです。必要最小限の記述で外部のライブラリ/モジュールとしてのスクリプトをロードすることができます。
OS X 10.9 から AppleScript にライブラリ機能がサポートが追加されました(AppleScript Libraries) 。ModuleLoader は、それ以前の2006年から継続的に開発/メンテナンスされてきたライブラリシステムです。おおよそ AppleScript Libraries と同じことができます。
すなわち、
ホームフォルダ以下の及びルートディレクトリ以下の
からライブラリを探します。
OS X 10.9 以降では、AppleScript Libraries がファーストチョイスになるでしょう。ModuleLoader は、AppleScript Libraries と共に使うことができ AppleScript Libraries に次のような機能を追加します。
変更点:
AppleScript Libraries に無い ModuleLoader の機能の一つとして、バージョン番号の指定に不等号「>, <, >=, <=」が使えることです。AppleScript Libraries でバージョンを指定すると、指定したバージョン以上が必要ということになりますが、ModuleLoader は、指定したバージョン以下、という指定ができます。未来だけを見据えていれば、指定したバージョン以上という条件だけ事足ります。しかし、たまに後方互換性を確保したスクリプトを作りたい場合、指定したバージョン以下という条件でライブラリを読み込めると便利です。
不等号を使ってバージョン指定を行うのは、自分のアイデアではなく、AppleMods を真似しました。
バージョン番号の不等号をの解釈に ICU ライブラリの C API にアクセスしています。OSAX を作っていた頃は、NSRegularExpression とか無かったし、CoreFoundation でゴリゴリすることに快感を覚えていましたので、CoreFoundation 類似のインターフェースの正規表現モジュールを作りました。その中で ICU に渡す buffer のサイズが足りず、不正なメモリアクセスを発生させていました。
こういうメモリ関連のエラーは再現性が乏しいし、コードを間違えている箇所でエラーが発生しないので、発見が大変難しいです。生の C 言語で malloc とか free とかするもんじゃ無いな、とつくづく思います。Objecctive-C とか Swift とかで書き直すべきと思いますが、手塩にかけたコードが惜しくてまだ捨てられません (^_^;A。