Perché i file script di Script Editor non vengono salvati come file di testo normale?

15

Lo Script Editor (precedentemente AppleScript Editor pre-Yosemite 10.10) salva .scpt file come file binari, non come semplici file di testo.

Rende alquanto complicato lavorare con loro nei sistemi di controllo del codice sorgente.

Qualcuno sa perché questo è il caso? C'è una cronologia di vecchia data che ha reso necessario che questo formato di file fosse diverso dai file di testo?

    
posta Ian C. 22.12.2014 - 20:51
fonte

3 risposte

19

La di William R. Cook contiene una storia e una visione eccellenti di quelli coinvolti con AppleScript nel 1989.

Quello che segue è divertente e speculativo.

Conservazione di spazio ed elaborazione

AppleScript è stato scritto in un momento in cui ogni byte e bit era prezioso. La codifica pigra di OS X come formato di elenco di proprietà sarebbe inutile agli occhi di quei primi sviluppatori.

Il formato binario fornito un modulo pre-analizzato che evitava di duplicare il processo di analisi complesso, soggetto a errori e che richiede tempo con ogni carico dal disco. Meglio caricare direttamente nella memoria ed eseguire.

Adaptive

Il salvataggio in un formato binario ha consentito agli AppleScript di essere associati ai codici AppleEvent sottostanti piuttosto che al loro dizionario di terminologia a lungo termine.

Ciò consentirebbe a un AppleScript scritto e salvato su una versione di un'applicazione di aggiornarsi automaticamente alle modifiche terminologiche tra le versioni delle applicazioni di destinazione.

Un oggetto intero potrebbe essere chiamato 'intero' nello script ma salvato come il codice di quattro caratteri ' int  ' nella rappresentazione binaria. Il codice di quattro caratteri proveniente dal dizionario AppleScript fornito dal sistema operativo.

Se una futura terminologia di AppleScript ha deciso di modificare la parola rivolta all'utente per intero, la rappresentazione binaria potrebbe mappare al nuovo nome.

Un rovescio della medaglia è possibile vedere oggi. Scrivi un AppleScript contro il dizionario di un'applicazione. Quindi rimuovi l'applicazione interamente dal tuo Mac. Cosa vedi in Script Editor all'apertura dello script?

Almeno nelle versioni recenti, AppleScript Editor ha mostrato chevrons che circondano il codice a quattro caratteri . Il codice è stato ricordato ed evidenziato. Non la terminologia dell'utente.

Questo probabilmente non è il vantaggio principale ma un possibile vantaggio.

Modern Bias

Vale la pena riconoscere il nostro pregiudizio moderno per i documenti di testo. L'esperienza insegna a molti di noi che la memorizzazione di contenuti di valore in un formato binario comporta dei rischi. I formati binari sono spesso male documentati, opachi all'utente finale e difficile da aprire quando il software proprietario non viene mantenuto.

Quando sono stati creati AppleScript e il suo formato binario, questa distorsione non era ancora stata creata. I limiti di archiviazione e calcolo erano molto reali e ogni kilobyte o migliaia di cicli salvati valeva la pena.

Storia e origini

Le storie di origine di AppleScript sono meravigliose ma difficili da rintracciare in questi giorni. AppleScript ha cercato di essere un linguaggio amichevole, di lingua inglese, ed è stato mozzafiato nella sua visione; l'implementazione effettiva era più difficile da ottenere!

risposta data 15.04.2015 - 21:29
fonte
15

In breve, .scpt consente la retrocompatibilità. Inoltre, applescript / javascript (ecc.) Può essere salvato con la stessa estensione, dato che Script Editor ora supporta javascript.

Per decompilare .scpt nella shell:

link

La parte più rilevante:

osadecompile

Textmate è un editor di terze parti che può leggere .scpt :

link

La parte più rilevante:

[[OSAScript alloc] initWithCompiledData:];

Questa funzione proviene da OSAScript.h , a parte OS X SDK. In OSAScript.h , c'è questo lungo commento:

Given a URL that locates a compiled script, script application, or script source, create and return an autoreleased script data descriptor with its contents. You may use the descriptor to create a script with -[OSAScript initWithScriptDataDescriptor:...]. This enables you to create a script with a specific OSALanguageInstance. You may use +[OSALanguage languageForScriptDataDescriptor:] to get the language for the script data, which may then be used to create or select an appropriate language instance for an OSAScript. Script source data may be compiled by -[OSAScript initWithScriptDataDescriptor:...], or you can coerce the descriptor to a string (using NSAppleEventDescriptor methods) and explicitly create an OSAScript with the source. + (NSAppleEventDescriptor *)scriptDataDescriptorWithContentsOfURL:(NSURL *)url AVAILABLE_MAC_OS_X_VERSION_10_6_AND_LATER;

Fondamentalmente, quando è stato salvato .scpt , anche un descrittore OSALanguageInstance viene salvato nel file.

Se un file viene salvato come .applescript / testo, il sistema lo compilerà con la versione più recente del linguaggio applescript. Uno script, ad esempio, scritto per una versione precedente di OS X potrebbe non funzionare su una nuova versione perché alcune funzioni sono diventate obsolete. Con .scpt , il sistema / app ha scelto quale versione di applescipt è destinata.

A partire dal 10.10, javascript può essere salvato in .scpt ed eseguito correttamente.

    
risposta data 15.04.2015 - 21:29
fonte
0

Dopo aver visto il comando di decompilazione condiviso da Fartheraway ho scoperto la soluzione. Se vuoi che il file applescript (.scpt) non sia binario.

@fartheraway lo menziona anche nella parte inferiore della sua risposta.

semplicemente fai tutto lo sviluppo con l'estensione .applescript.

Lo Script Editor sarà in grado di eseguire il codice e non lo salverà in un formato compilato.

    
risposta data 25.02.2018 - 21:42
fonte

Leggi altre domande sui tag