スクリプトエディタ(以前のAppleScript Editor 10.10より前のバージョン)は.scpt
、プレーンテキストファイルではなくバイナリファイルとしてファイルを保存します。
ソースコード管理システムでそれらを操作するのは多少面倒です。
なぜそうなのか、誰もが知っていますか?このファイル形式をプレーンテキストファイル以外のものにする必要がある長い歴史がありますか?
スクリプトエディタ(以前のAppleScript Editor 10.10より前のバージョン)は.scpt
、プレーンテキストファイルではなくバイナリファイルとしてファイルを保存します。
ソースコード管理システムでそれらを操作するのは多少面倒です。
なぜそうなのか、誰もが知っていますか?このファイル形式をプレーンテキストファイル以外のものにする必要がある長い歴史がありますか?
回答:
William R. Cookの論文には、 1989年にAppleScriptに関係した人々からの素晴らしい歴史と洞察が含まれています。
以下は楽しさと投機的です。
AppleScriptは、すべてのバイトとビットが貴重であったときに書かれました。OS Xのプロパティリスト形式としての遅延エンコードは、初期の開発者の目には無駄です。
バイナリ形式は、複雑でエラーが発生しやすく、時間のかかる解析プロセスをディスクからのロードごとに重複させない事前解析済みフォームを提供しました。メモリに直接ロードして実行する方が良い。
バイナリ形式で保存することにより、AppleScriptを長い形式の用語の辞書ではなく、基になるAppleEventコードに結び付けることができました。
これにより、アプリケーションの1つのバージョンに対して記述および保存されたAppleScriptが、ターゲットアプリケーションのバージョン間の用語の変更に自動的に更新されます。
整数オブジェクトは、スクリプトでは「整数」と呼ばれますがint
、バイナリ表現では4文字のコード「」として保存されます。オペレーティングシステムによって提供されるAppleScript辞書からの4文字のコード。
将来のAppleScriptの用語がユーザー向けの単語を整数に変更することを決定した場合、バイナリ表現は新しい名前にマッピングされる可能性があります。
これを裏返して、今日見ることができます。アプリケーションの辞書に対してAppleScriptを記述します。次に、Macからアプリケーションを完全に削除します。スクリプトを開くと、スクリプトエディターに何が表示されますか?
少なくとも最近のバージョンでは、AppleScript Editor は4文字コードを囲む山形を表示しました。コードは記憶され、強調表示されています。ユーザーが直面する用語ではありません。
これはおそらく主な利点ではなく、考えられる利点です。
テキスト文書に対する私たちの現代のバイアスを認める価値があります。私たちの多くは、貴重なコンテンツをバイナリ形式で保存することにはリスクが伴うことを経験しています。多くの場合、バイナリ形式は文書化が不十分であり、エンドユーザーには不透明であり、所有するソフトウェアが維持されていない場合は開くことが困難です。
AppleScriptとそのバイナリ形式が作成されたとき、このバイアスはまだ形成されていませんでした。ストレージと計算の制限は非常に現実的であり、1キロバイトまたは数千サイクルを節約する価値がありました。
AppleScriptの起源の物語は素晴らしいですが、最近では追跡するのが困難です。AppleScriptは、フレンドリーで英語のような言語になろうとし、そのビジョンに息をのむようなものでした。実際の実装を正しくするのは困難でした!
要するに、.scpt
後方互換性を可能にします。さらに、applescript / javascript(など)は、Script Editor
javascriptをサポートするようになったので、同じ拡張子で保存できます。
.scpt
シェルで逆コンパイルするには:
https://github.com/rupa/applescript/blob/master/decompile.sh
最も重要な部分:
osadecompile
Textmateは、次の読み取りが可能なサードパーティのエディターです.scpt
。
https://github.com/textmate/textmate/blob/master/Applications/decompile_as/src/decompile_as.mm
最も重要な部分:
[[OSAScript alloc] initWithCompiledData:];
この関数はOSAScript.h
、OS X SDKのほかにあります。ではOSAScript.h
、この長いコメントがあります:
コンパイルされたスクリプト、スクリプトアプリケーション、またはスクリプトソースを見つけるURLを指定して、そのコンテンツと共に自動解放されたスクリプトデータ記述子を作成して返します。記述子を使用して、-[OSAScript initWithScriptDataDescriptor:...]でスクリプトを作成できます。これにより、特定のOSALanguageInstanceでスクリプトを作成できます。+ [OSALanguage languageForScriptDataDescriptor:]を使用してスクリプトデータの言語を取得し、OSAScriptの適切な言語インスタンスを作成または選択するために使用できます。スクリプトソースデータは-[OSAScript initWithScriptDataDescriptor:...]でコンパイルできます。または、NSAppleEventDescriptorメソッドを使用して記述子を文字列に強制し、ソースでOSAScriptを明示的に作成できます。+(NSAppleEventDescriptor *)scriptDataDescriptorWithContentsOfURL:
基本的に、保存される.scpt
と、OSALanguageInstance
記述子もファイルに保存されます。
ファイルが.applescript
/ text として保存される場合、システムはapplescript言語の最新バージョンでそれをコンパイルします。たとえば、OS Xの古いバージョン用に記述されたスクリプトは、一部の機能が廃止されているため、新しいバージョンでは動作しない場合があります。を使用して.scpt
、システム/アプリは、対象となるapplesciptのバージョンを選択しました。
10.10以降では、javascriptを保存して.scpt
正しく実行できます。
asprint
< hasseg.org/asprint > からも利用できます。これにより、.scptファイルを「きれいに印刷」できます。唯一の欠点は、JavaScript .scptファイルでは機能せず、AppleScriptファイルでのみ機能することです。
Fartherawayが共有している逆コンパイルコマンドを見た後、解決策を発見しました。applescript(.scpt)ファイルをバイナリにしたくない場合。
@fartherawayは彼の答えの一番下でも言及しています。
単にすべての開発を.applescript拡張子で行います。
スクリプトエディタはコードを実行でき、コンパイルされた形式で保存しません。