スクリプトエディタの.scptファイルがプレーンテキストファイルとして保存されないのはなぜですか?


15

スクリプトエディタ(以前のAppleScript Editor 10.10より前のバージョン)は.scpt、プレーンテキストファイルではなくバイナリファイルとしてファイルを保存します。

ソースコード管理システムでそれらを操作するのは多少面倒です。

なぜそうなのか、誰もが知っていますか?このファイル形式をプレーンテキストファイル以外のものにする必要がある長い歴史がありますか?


理由はわかりませんが、ここでコメントしように、代わりにテキストとして保存するホットキー/スクリプトマクロを書くことができます。それは痛みですが、実行可能です...-
ヴィック

2
[保存]パネルでは、プレーンテキストを含むいくつかの異なる形式でスクリプトを保存できます。
クリスページ

「SCPTファイルからテキストとしてスクリプトを取得する?」:lists.apple.com/archives/applescript-users/2007/Mar/...
pkamb

回答:


19

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は、フレンドリーで英語のような言語になろうとし、そのビジョンに息をのむようなものでした。実際の実装を正しくするのは困難でした!


16

要するに、.scpt後方互換性を可能にします。さらに、applescript / javascript(など)は、Script Editorjavascriptをサポートするようになったので、同じ拡張子で保存できます。

.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正しく実行できます。


「errOSASourceNotAvailable(-1756)」を入手しました。これはどういう意味ですか?
TCB13

1
逆コンパイルリンクの場合は+1。@ scb13は、.scptファイルがバイナリではない場合に発生します。エディターが問題を回避するには、コピーを作成するように求めるウィンドウを閉じる必要があります。コピーには、その後、コンパイルされた形式で情報が保存されます。ただし、これはすべて、逆コンパイルコマンドを含むこの遠く離れた回答から学んだ投稿で解決しようとしています。
マイケルディミット

これに追加するために、asprint< hasseg.org/asprint > からも利用できます。これにより、.scptファイルを「きれいに印刷」できます。唯一の欠点は、JavaScript .scptファイルでは機能せず、AppleScriptファイルでのみ機能することです。
TJルオマ

1

Fartherawayが共有している逆コンパイルコマンドを見た後、解決策を発見しました。applescript(.scpt)ファイルをバイナリにしたくない場合。

@fartherawayは彼の答えの一番下でも言及しています。

単にすべての開発を.applescript拡張子で行います。

スクリプトエディタはコードを実行でき、コンパイルされた形式で保存しません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.