¿Por qué los archivos .scpt del Editor de secuencias de comandos no se guardan como archivos de texto sin formato?

15

El Editor de secuencias de comandos (anteriormente AppleScript Editor pre-Yosemite 10.10) guarda los archivos .scpt como archivos binarios, no como archivos de texto sin formato.

Hace que trabajar con ellos en los sistemas de control de código fuente sea algo engorroso.

¿Alguien sabe por qué este es el caso? ¿Existe algún historial de larga data que requiera que este formato de archivo sea algo más que archivos de texto simple?

    
pregunta Ian C. 22.12.2014 - 20:51

3 respuestas

19

El documento de William R. Cook contiene una historia y una perspectiva excelentes de los involucrados con AppleScript en 1989.

Lo que sigue es divertido y especulativo.

Conservación del espacio y procesamiento

AppleScript se escribió en un momento en que cada byte y bit era valioso. La codificación perezosa de OS X como formato de lista de propiedades sería un desperdicio para los primeros desarrolladores.

El formato binario proporcionó un formulario pre-analizado que evitó la duplicación del proceso de análisis complejo, propenso a errores y que consume mucho tiempo con cada carga del disco. Mejor cargar directamente en la memoria y ejecutar.

Adaptable

Guardar en un formato binario permitió a AppleScripts estar vinculado a los códigos AppleEvent subyacentes en lugar de a su diccionario de terminología de formato largo.

Esto permitiría que un AppleScript escrito y guardado en una versión de una aplicación se actualice automáticamente a los cambios de terminología entre las versiones de las aplicaciones seleccionadas.

Un objeto entero se puede llamar 'entero' en el script pero se guarda como el código de cuatro caracteres ' int  ' en la representación binaria. El código de cuatro caracteres que proviene del diccionario AppleScript proporcionado por el sistema operativo.

Si una futura terminología de AppleScript decidiera alterar la palabra de cara al usuario para un entero, la representación binaria podría asignarse al nombre más reciente.

Un otro lado de esto se puede ver hoy. Escribe un AppleScript contra el diccionario de una aplicación. Luego elimine la aplicación completamente de su Mac. ¿Qué ves en el Editor de secuencias de comandos al abrir la secuencia de comandos?

Al menos en las versiones recientes, AppleScript Editor mostró chevrones que rodean el código de cuatro caracteres . El código ha sido recordado y resaltado. No es la terminología que enfrenta el usuario.

Probablemente este no sea el beneficio principal sino un posible beneficio.

Sesgo moderno

Vale la pena reconocer nuestro sesgo moderno para los documentos de texto. La experiencia nos ha enseñado a muchos de nosotros que almacenar contenido valioso en un formato binario conlleva riesgos. Los formatos binarios a menudo están deficiente documentados, son opacos para el usuario final y difícil de abrir cuando no se mantiene el software propietario.

Cuando se crearon AppleScript y su formato binario, este sesgo aún no se formó. Los límites de almacenamiento y computación eran muy reales y valía la pena cada kilobyte o miles de ciclos guardados.

Historia y orígenes

Las historias del origen de AppleScript son maravillosas pero difíciles de rastrear en estos días. AppleScript trató de ser un lenguaje amigable, como el inglés, y se quedó sin aliento en su visión; ¡La implementación real fue más difícil de lograr!

respondido por el Graham Miln 15.04.2015 - 21:29
15

En resumen, .scpt permite compatibilidad con versiones anteriores. Además, applecript / javascript (etc) se puede guardar con la misma extensión, dado que Script Editor ahora admite javascript.

Para descompilar .scpt en shell:

enlace

La parte más relevante:

osadecompile

Textmate es un editor de terceros que puede leer .scpt :

enlace

La parte más relevante:

[[OSAScript alloc] initWithCompiledData:];

Esta función proviene de OSAScript.h , aparte de OS X SDK. En OSAScript.h , hay un comentario largo:

  

Dada una URL que localiza un script compilado, una aplicación de script o una fuente de script, cree y devuelva un descriptor de datos de script publicado automáticamente con su contenido. Puede usar el descriptor para crear un script con - [OSAScript initWithScriptDataDescriptor: ...]. Esto le permite crear un script con una OSALanguageInstance específica. Puede usar + [OSALanguage languageForScriptDataDescriptor:] para obtener el idioma de los datos del script, que luego se puede usar para crear o seleccionar una instancia de idioma adecuada para un OSAScript. Los datos de origen del script pueden ser compilados por - [OSAScript initWithScriptDataDescriptor: ...], o puede forzar el descriptor a una cadena (usando los métodos NSAppleEventDescriptor) y crear explícitamente un OSAScript con la fuente.   + (NSAppleEventDescriptor *) scriptDataDescriptorWithContentsOfURL: (NSURL *) url AVAILABLE_MAC_OS_X_VERSION_10_6_AND_LATER;

Básicamente, cuando se guarda .scpt , también se guarda un descriptor OSALanguageInstance en el archivo.

Si un archivo se guarda como .applescript / text, el sistema lo compilará con la última versión del lenguaje de Applecript. Una secuencia de comandos, por ejemplo, escrita para una versión anterior de OS X puede no funcionar en una nueva versión porque algunas funciones se han vuelto obsoletas. Con .scpt , el sistema / aplicación ha elegido para qué versión de applescipt está destinada.

Desde 10.10, javascript se puede guardar en .scpt y ejecutarse correctamente.

    
respondido por el fartheraway 15.04.2015 - 21:29
0

Después de ver el comando de descompilación compartido por Fartheraway, descubrí la solución. Si desea que el archivo de AppleScript (.scpt) no sea binario.

@fartheraway también lo menciona en la parte inferior de su respuesta.

simplemente haga todo el desarrollo con la extensión .applescript.

El Editor de secuencias de comandos podrá ejecutar el código y no lo guardará en un formato compilado.

    
respondido por el Michael Dimmitt 25.02.2018 - 21:42

Lea otras preguntas en las etiquetas