Dlaczego pliki .scpt Edytora skryptów nie są zapisywane jako pliki zwykłego tekstu?

16

Script Editor (wcześniej AppleScript Editor wcześniejszy niż Yosemite 10.10) zapisuje .scptpliki jako pliki binarne, a nie zwykłe pliki tekstowe.

To sprawia, że ​​praca z nimi w systemach kontroli kodu źródłowego jest nieco kłopotliwa.

Czy ktoś wie, dlaczego tak jest? Czy istnieje długa historia, która wymagała, aby ten format pliku był czymś innym niż zwykły plik tekstowy?

Ian C.
źródło
Nie wiem, dlaczego tak jest, ale jak skomentowano tutaj , można zamiast tego napisać makro skrótu / skryptu, aby zapisać jako tekst. To ból, ale wykonalne ...
Vic
2
W panelu Zapisz możesz zapisywać skrypty w kilku różnych formatach, w tym w postaci zwykłego tekstu.
Chris Page
„Pobierz skrypt jako tekst z plików scpt?”: Lists.apple.com/archives/applescript-users/2007/Mar/...
pkamb

Odpowiedzi:

20

Artykuł Williama R. Cooka zawiera doskonałą historię i wgląd od osób związanych z AppleScript w 1989 roku.

To, co następuje, jest zabawne i spekulacyjne.

Oszczędzanie przestrzeni i przetwarzanie

AppleScript został napisany w czasie, gdy każdy bajt i bit był cenny. Leniwe kodowanie OS X jako formatów list nieruchomości byłoby marnotrawstwem w oczach tych wczesnych programistów.

Format binarny zapewnił wstępnie przeanalizowaną formę, która pozwoliła uniknąć powielania złożonego, podatnego na błędy i czasochłonnego procesu analizowania przy każdym ładowaniu z dysku. Lepiej załadować bezpośrednio do pamięci i uruchomić.

Adaptacyjny

Zapisanie w formacie binarnym pozwoliło na powiązanie skryptów AppleScript z leżącymi u ich podstaw kodami AppleEvent, a nie ze słownikiem terminologii o długiej formie.

Umożliwiłoby to skryptowi AppleScript napisanemu i zapisanemu w jednej wersji aplikacji automatyczne aktualizowanie zmian terminologicznych między wersjami docelowych aplikacji.

Obiekt całkowity może być nazwany w skrypcie liczbą całkowitą, ale zapisany jako czteroznakowy kod int w reprezentacji binarnej. Czteroznakowy kod pochodzący ze słownika AppleScript dostarczonego przez system operacyjny.

Jeśli przyszła terminologia AppleScript zdecyduje się zmienić słowo całkowite dla użytkownika, reprezentacja binarna może zostać odwzorowana na nowszą nazwę.

Odwrotną stronę tego można dziś zobaczyć. Napisz kod AppleScript w słowniku aplikacji. Następnie usuń aplikację całkowicie z komputera Mac. Co widzisz w Script Editor po otwarciu skryptu?

Przynajmniej w najnowszych wersjach edytor AppleScript pokazywał szewrony otaczające czteroznakowy kod . Kod został zapamiętany i wyróżniony. Nie terminologia związana z użytkownikiem.

Prawdopodobnie nie jest to podstawowa korzyść, ale możliwa korzyść.

Współczesne nastawienie

Warto docenić nasze nowoczesne podejście do dokumentów tekstowych. Doświadczenie nauczyło wielu z nas, że przechowywanie cennych treści w formacie binarnym niesie ze sobą ryzyko. Formaty binarne są często słabo udokumentowane, nieprzejrzyste dla użytkownika końcowego i trudne do otwarcia, gdy oprogramowanie nie jest utrzymywane.

Kiedy AppleScript i jego format binarny zostały utworzone, to uprzedzenie nie zostało jeszcze utworzone. Limity pamięci i obliczeń były bardzo realne, a każdy zaoszczędzony kilobajt lub tysiące cykli był opłacalny.

Historia i pochodzenie

Historie o pochodzeniu AppleScript są obecnie wspaniałe, ale trudne do wyśledzenia. AppleScript starał się być przyjaznym językiem angielskim i zapierał dech w piersiach; rzeczywiste wdrożenie było trudniejsze do poprawnego działania!

Graham Miln
źródło
16

Krótko mówiąc, .scptumożliwia kompatybilność wsteczną. Dodatkowo, applecript / javascript (itp.) Można zapisać z tym samym rozszerzeniem, ponieważ Script Editorobsługuje teraz javascript.

Aby dekompilować .scptw powłoce:

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

Najważniejsza część:

osadecompile

Textmate to zewnętrzny edytor, który potrafi czytać .scpt:

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

Najważniejsza część:

[[OSAScript alloc] initWithCompiledData:];

Ta funkcja pochodzi OSAScript.hoprócz OS X SDK. W OSAScript.htym jest długi komentarz:

Biorąc pod uwagę adres URL, który lokalizuje skompilowany skrypt, aplikację skryptu lub źródło skryptu, utwórz i zwróć automatycznie wydany deskryptor danych skryptu z jego zawartością. Za pomocą deskryptora można utworzyć skrypt za pomocą - [OSAScript initWithScriptDataDescriptor: ...]. Umożliwia to utworzenie skryptu z określonym OSALanguageInstance. Możesz użyć + [OSALanguage languageForScriptDataDescriptor:], aby uzyskać język dla danych skryptu, który może następnie zostać użyty do utworzenia lub wybrania odpowiedniej instancji języka dla OSAScript. Dane źródłowe skryptu mogą być kompilowane przez - [OSAScript initWithScriptDataDescriptor: ...] lub można przymusić deskryptor do łańcucha (używając metod NSAppleEventDescriptor) i jawnie utworzyć OSAScript ze źródłem. + (NSAppleEventDescriptor *) scriptDataDescriptorWithContentsOfURL:

Zasadniczo, gdy zapisane .scpt, OSALanguageInstancedeskryptor jest również zapisywane w pliku.

Jeśli plik zostanie zapisany jako .applescript/ text, system skompiluje go z najnowszą wersją języka AppleScript. Na przykład skrypt napisany dla starszej wersji OS X może nie działać w nowej wersji, ponieważ niektóre funkcje stały się przestarzałe. Dzięki .scptsystemowi / aplikacji wybraliśmy, dla jakiej wersji applecipt jest przeznaczony.

Od 10.10 javascript można zapisywać .scpti wykonywać poprawnie.

dalej
źródło
Masz „errOSASourceNotAvailable (-1756).” Co to znaczy?
TCB13
1
+1 za link do dekompilacji. @ TCB13, które zdarza się, gdy plik .scpt nie jest binarny i powinno być tak, aby edytor miał problem z obejściem problemu i zamknięciem okna z prośbą o kopię. Następnie kopia będzie zapisywać informacje w skompilowanym formacie. Jednak wszystko to zostanie rozwiązane w odpowiedzi, którą zamierzam opublikować, której nauczyłem się z tej dalszej odpowiedzi zawierającej polecenie dekompilacji.
Michael Dimmitt,
Aby to dodać, jest również asprintdostępny na < hasseg.org/asprint >, który pozwoli ci „ładnie drukować” pliki .scpt. Jedyną wadą jest to, że nie działa na plikach .scpt JavaScript, tylko na AppleScript.
TJ Luoma
1

Po obejrzeniu polecenia dekompilacji udostępnionego przez Fartheraway odkryłem rozwiązanie. Jeśli chcesz, aby plik applecript (.scpt) nie był binarny.

@fartheraway również wspomina o tym w dolnej części swojej odpowiedzi.

po prostu zrób cały program z rozszerzeniem .applescript.

Edytor skryptów będzie mógł uruchomić kod i nie zapisze go w skompilowanym formacie.

Michael Dimmitt
źródło