L'éditeur de script (anciennement AppleScript Editor pré-Yosemite 10.10) enregistre les .scpt
fichiers sous forme de fichiers binaires, pas de fichiers de texte brut.
Cela rend le travail avec eux dans les systèmes de contrôle de code source quelque peu fastidieux.
Est-ce que quelqu'un sait pourquoi c'est le cas? Y a-t-il un historique de longue date qui a exigé que ce format de fichier soit autre chose que des fichiers en texte brut?
applescript
Ian C.
la source
la source
Réponses:
L'article de William R. Cook contient une excellente histoire et un aperçu de ceux impliqués dans AppleScript en 1989.
Ce qui suit est amusant et spéculatif.
Conservation de l'espace et traitement
AppleScript a été écrit à une époque où chaque octet et chaque bit étaient précieux. L'encodage paresseux d'OS X en tant que formats de liste de propriétés serait un gaspillage aux yeux de ces premiers développeurs.
Le format binaire fournit une forme pré-analysée qui évite de dupliquer le processus d'analyse complexe, sujet aux erreurs et qui prend du temps à chaque chargement à partir du disque. Mieux vaut charger directement en mémoire et exécuter.
Adaptatif
L'enregistrement dans un format binaire a permis à AppleScripts d'être lié aux codes AppleEvent sous-jacents plutôt qu'à leur dictionnaire de terminologie longue.
Cela permettrait à un AppleScript écrit et enregistré sur une version d'une application de se mettre automatiquement à jour en fonction des changements de terminologie entre les versions des applications ciblées.
Un objet entier peut être appelé 'entier' dans le script mais enregistré en tant que code à quatre caractères '
int
' dans la représentation binaire. Le code à quatre caractères provenant du dictionnaire AppleScript fourni par le système d'exploitation.Si une future terminologie AppleScript décidait de modifier le mot face à l'utilisateur pour un entier, la représentation binaire pourrait correspondre au nom le plus récent.
Un revers à cela est possible de voir aujourd'hui. Écrivez un AppleScript par rapport au dictionnaire d'une application. Supprimez ensuite l'application entièrement de votre Mac. Que voyez-vous dans l'Éditeur de script à l'ouverture du script?
Au moins dans les versions récentes, AppleScript Editor montrait des chevrons entourant le code à quatre caractères . Le code a été mémorisé et mis en évidence. Pas l'utilisateur face à la terminologie.
Ce n'est probablement pas le principal avantage mais un avantage possible.
Biais moderne
Il convient de reconnaître notre parti pris moderne pour les documents texte. L'expérience a enseigné à beaucoup d'entre nous que le stockage de contenu précieux dans un format binaire comporte des risques. Les formats binaires sont souvent mal documentés, opaques pour l'utilisateur final et difficiles à ouvrir lorsque le logiciel propriétaire n'est pas maintenu.
Lorsque AppleScript et son format binaire ont été créés, ce biais n'était pas encore formé. Les limites de stockage et de calcul étaient très réelles et chaque kilo-octet ou milliers de cycles économisés en valait la peine.
Histoire et origines
Les histoires d'origine d'AppleScript sont merveilleuses mais difficiles à retracer ces jours-ci. AppleScript a essayé d'être une langue conviviale, comme l'anglais, et était à couper le souffle dans sa vision; la mise en œuvre réelle était plus difficile à réaliser!
la source
En bref,
.scpt
permet une compatibilité descendante. De plus, applescript / javascript (etc) peut être enregistré avec la même extension, étant donné qu'ilScript Editor
prend désormais en charge javascript.Pour décompiler
.scpt
en shell:https://github.com/rupa/applescript/blob/master/decompile.sh
La partie la plus pertinente:
Textmate est un éditeur tiers qui peut lire
.scpt
:https://github.com/textmate/textmate/blob/master/Applications/decompile_as/src/decompile_as.mm
La partie la plus pertinente:
Cette fonction est issue
OSAScript.h
du SDK OS X. DansOSAScript.h
, il y a ce long commentaire:Fondamentalement, une fois enregistré
.scpt
, unOSALanguageInstance
descripteur est également enregistré dans le fichier.Si un fichier est enregistré sous
.applescript
/ text, le système le compilera avec la dernière version du langage applescript. Un script, par exemple, écrit pour une ancienne version d'OS X peut ne pas fonctionner sur une nouvelle version car certaines fonctions sont devenues obsolètes. Avec.scpt
, le système / l'application a choisi pour quelle version de applescipt il est destiné.Depuis 10.10, javascript peut être enregistré
.scpt
et exécuté correctement.la source
asprint
disponible à partir de < hasseg.org/asprint > qui vous permettra de "joli imprimer" les fichiers .scpt. Le seul inconvénient est qu'il ne fonctionne pas sur les fichiers JavaScript .scpt, uniquement sur les fichiers AppleScript.Après avoir vu la commande de décompilation partagée par Fartheraway, j'ai découvert la solution. Si vous souhaitez que le fichier applescript (.scpt) ne soit pas binaire.
@fartheraway le mentionne également au bas de sa réponse.
faites simplement tout le développement avec l'extension .applescript.
L'éditeur de script pourra exécuter le code et ne l'enregistrera pas dans un format compilé.
la source