19 votos

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

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

Esto hace que trabajar con ellos en el control de código fuente de los sistemas de algo engorroso.

¿Alguien sabe por qué este es el caso? Hay una larga historia que necesitaba de este formato de archivo de ser algo distinto de archivos de texto sin formato?

22voto

Steve Evans Puntos 155

William R. Cook, el papel contiene una excelente historia y la visión de los involucrados con AppleScript en 1989.

Lo que sigue es divertido y especulativo.

La conservación del Espacio y de Procesamiento de

AppleScript fue escrito en un tiempo cuando todos los bytes y los bits era valioso. OS X perezoso de codificación como de la propiedad de los formatos de la lista sería un desperdicio en los ojos' de los primeros desarrolladores.

El formato binario proporciona un pre-analiza de forma que se evitaría la duplicación de los complejos, propensos a errores, tiempo y analizar el proceso con cada carga desde el disco. Mejor cargar directamente en memoria y ejecutar.

Adaptación

Guardar en un formato binario permite AppleScripts para ser atados a la subyacente AppleEvent códigos en lugar de que su diccionario de la forma larga de la terminología.

Esto permitiría un AppleScript escrita y guardada en contra de una versión de una aplicación para actualizar automáticamente a los cambios de terminología entre las versiones de las aplicaciones de destino.

Un objeto integer que se podría llamar 'entero' en el script, pero guarda como el código de cuatro caracteres 'int ' en la representación binaria. El código de cuatro caracteres que vienen desde el diccionario de AppleScript proporcionado por el sistema operativo.

Si un futuro AppleScript terminología decidió alterar el usuario se enfrenta palabra por entero, la representación binaria podrían asignar al nuevo nombre.

Una desventaja de esta opción es posible ver hoy en día. Escribir un AppleScript en contra de una aplicación de diccionario. A continuación, retire la aplicación por completo de su Mac. ¿Qué ves en el Editor de secuencias de Comandos al abrir la secuencia de comandos?

Al menos en las últimas versiones, el Editor AppleScript mostró angulares que rodea el código de cuatro caracteres. El código ha sido recordado y destacado. El usuario se enfrenta a la terminología.

Probablemente esta no sea la principal ventaja pero un posible beneficio.

Moderno Sesgo

Vale la pena reconocer nuestra moderna sesgo para los documentos de texto. La experiencia ha enseñado a muchos de nosotros que el almacenamiento de contenido valioso en un formato binario lleva un riesgo. Formatos binarios son a menudo mal documentado, opaco para el usuario final, y difícil abrir cuando el propietario del software no se mantiene.

Cuando AppleScript y es el formato binario fueron creados, este sesgo aún no estaba formado. Almacenamiento y límites computacionales eran muy reales y cada kilobyte o miles de ciclos de guardado se que vale la pena.

Historia y Orígenes

Las historias de AppleScript de origen son maravillosos pero difícil de rastrear en estos días. AppleScript trató de ser un amistoso, el idioma inglés como, el lenguaje y estaba tomando aliento en su visión; la implementación real era más difícil de conseguir a la derecha!

15voto

Tim Brigham Puntos 8727

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

Descompilar .scpt en la shell:

https://github.com/rupa/applescript/blob/master/decompile.sh

La parte más relevante:

osadecompile

Textmate es una tercera parte del editor que puede leer .scpt:

https://github.com/textmate/textmate/blob/master/Applications/decompile_as/src/decompile_as.mm

La parte más relevante:

[[OSAScript alloc] initWithCompiledData:];

Esta función proviene OSAScript.h, aparte de OS X SDK. En OSAScript.h, no es de este largo comentario:

Dada una dirección URL que se encuentra un script compilado, secuencia de comandos de la aplicación, o la fuente de secuencias de comandos, crear y devolver un autoreleased datos de secuencias de comandos descriptor con su contenido. Usted puede utilizar el descriptor para crear una secuencia de comandos con -[OSAScript initWithScriptDataDescriptor:...]. Esto le permite crear una secuencia de comandos con un determinado OSALanguageInstance. Usted puede usar +[OSALanguage languageForScriptDataDescriptor:] para obtener el lenguaje de la secuencia de comandos de datos, que puede entonces ser utilizado para crear o seleccionar un idioma adecuado instancia para un OSAScript. Secuencia de comandos de los datos de origen pueden ser compilados por -[OSAScript initWithScriptDataDescriptor:...], o puede coaccionar el descriptor a una cadena (utilizando NSAppleEventDescriptor métodos) 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 guardan .scpt, OSALanguageInstance descriptor también se guarda en el archivo.

Si se guarda un archivo como .applescript/texto, el sistema de compilación con la última versión del lenguaje de applescript. Una secuencia de comandos, por ejemplo, escrito para una versión anterior de OS X no puede trabajar en una nueva versión debido a que algunas funciones se han vuelto obsoletas. Con .scpt, el system/app tienes que seleccionar lo que la versión de applescipt es destinado.

A partir de las 10.10, javascript puede ser guardado en .scpt y se ejecuta correctamente.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X