Можно ли заменить AppleScript на JavaScript?

У меня есть книга на AppleScript, и мне интересно, стоит ли мне ее хранить. Я уже знаю JavaScript.

Я понимаю, что Apple недавно добавила поддержку скриптов JavaScript в OS X.

Означает ли это, что мне не нужно больше изучать AppleScript для написания сценариев для приложений OS X, или это больше для него, чем для этого? Ваши мысли будут оценены.

Вышеупомянутый вопрос с точки зрения пользователя приложения, который хочет сделать приложение автоматически.

Как дела с разработчиками приложений (Cocoa)? Могут ли они уйти, не изучая AppleScript, если они хотят сделать свои приложения сценарием?

Обновление: Добавлена ​​награда. Вопрос перефразирован (неуважение к AppleScript и его пользователям): Учитывая, что я уже знаю JavaScript, есть ли веская причина, по которой я должен больше изучать AppleScript? Ваши подробные мысли по этому вопросу будут оценены.

Ответы

Ответ 1

Можно ли заменить AppleScript на JavaScript?

Для тривиальных вещей, наверное. Помимо этого, возможно, нет.

  • Слишком много функций Apple/OSA искалечены, сломаны или вообще отсутствуют в JXA. Это работает до определенной степени, но помимо того, что вы набиты. Для серьезных или производственных работ, когда вам нужны функции, которые JXA прикручивает, или когда речь идет о приложениях, которые заставляют JXA убегать и плакать, вам придется придерживаться AppleScript: это единственное в настоящее время решение, которое на самом деле делает это правильно.

  • Вам все равно нужно понять, как работает скриптинг приложений, для которого вам нужно будет прочитать литературу AppleScript. Собственная документация JXA является жалкой и ошибочной, поэтому вы не будете умнее читать это. Там нет сторонней литературы JXA, которая объясняет концепции, и все, что появляется в будущем, скорее всего, ошибочно ошибочно. (Хек, даже текущие книги AppleScript склонны вымываться/лгать/ошибаться.)

  • Вам также необходимо понять, как script конкретные приложения, а словари приложений, как известно, неполны и недостаточны сами по себе. Это означает, что вы полагаетесь на дополнительную документацию (если таковая существует), образцы сценариев и более опытные пользователи этих приложений. И все они основаны на AppleScript, поэтому вам нужно знать некоторые AppleScript, чтобы понимать и общаться с ними.

  • Разработчики приложений должны продолжать разрабатывать и тестировать свои приложения против AppleScript - это фактическая спецификация, против которой все скриптовые приложения были разработаны и протестированы за последние двадцать лет, и это будет продолжаться. Даже если JXA не был таким мешком ловцов, разработчикам все равно нужно было бы протестировать против AS, чтобы быть уверенным, что они не упускают из виду какие-либо причуды.

Ответ 2

JavaScript for Automation (JXA) 1.0 достаточно, если вы готовы быть ранним усыновителем и готовы проявлять гибкость в том, какой подход к внедрению. С JXA 1.0 вам, возможно, придется делать такие вещи, как:

  • используйте мост JXA-to-ObjC, когда мост JXA-to-Traditional-AppleEvents * не работает,
  • создайте фильтр JavaScript, если запрос моста JXA 1.0 whose не работает,
  • ясно подумайте, когда использовать сторону Objective-C, мост JXA-new-stuff-bridge, традиционный-AppleEvents-мост или сторону JavaScript

* Сценарии событий Apple происходят с начала 1990 года, начиная с Classic MacOS 7. Начиная с 2006 года Apple рекомендует рассматривать механизмы событий Apple.

Примечание. События Apple не всегда являются наиболее эффективным или подходящим механизмом для обмена данными между процессами. OS X предлагает другие механизмы... [Apple, "Open Scripting Architecture" ]

Икеты AppleScript (AS) и JavaScript для автоматизации (JXA) имеют аналогичное покрытие автоматизации. Мосты AppleScript более зрелые. У механизма JavaScriptCore есть больше встроенных возможностей. Например, такие возможности, как regex, encodeURI, JSON.stringify, уже встроены в JavaScriptCore.

|  Feature                     |    AS     |    JXA    |
|------------------------------|-----------|-----------|
| Scripting Dictionary         |     ✓     |     ✓     |
| Standard Scripting Additions |     ✓     |     ✓     |
| JavaScriptCore               |     ‐     |     ✓     |
| Apple Event Scripting        |     ✓     |     ✓     |
| Cocoa Scripting              |     ✓     |     ✓     |
| C function binding           |     ‐     |     ✓     |
| Automator Support            |     ✓     |     ✓     |
| #! shell runable             |     ✓     |     ✓     |
| Debugger                     | 3rd Party |     ‐     |
| Language Popularity          |  Niche    |   Broad   |

Означает ли это, что мне не нужно больше изучать AppleScript для написания сценариев...?

Может быть, да.

Иногда полезно прочитать существующий пример AppleScript. Хотя, иногда более продуктивно бросать файл AppleScript и начинать без предварительного задуманного подхода.

BTW: вам все равно нужно понять словарь сценариев для любого используемого языка сценариев.

с точки зрения пользователя приложения, который хочет, чтобы приложение делало это автоматически?

Как пользователь приложения, JavaScript для автоматизации будет работать с ранее отмеченными оговорками. В частности, рассмотрите возможность использования дополнительных функций JavaScript и Cocoa и менее возможностей Apple Events.

Например, "Традиционный подход" Системные события "имеет преимущество простоты, но использование $.NSFileManager дает значительно более высокую производительность". В одном случае $.NSFileManager был на 300% быстрее, чем "Системные события". [JXA-Cookbook Wiki: Получение списка содержимого папки]

... по отношению к разработчикам приложений (Cocoa)? Могут ли они уйти, не изучая AppleScript, если они хотят сделать свои приложения сценарием?

Да и Нет.

Что контролирует разработчик - это объект и методы, открытые через словарь сценариев. Этот Scripting Dictionary (.sdef) должен быть выполнен для доступа с любого языка сценариев, включая Perl, Python и Ruby.

Итак, за кулисами разработчик предоставляет шлюз сценариев приложений, который является Objective-C/Cocoa ориентированным и обычно агностиком языка сценариев.

Что разработчики не контролируют, это скриптовые мосты (например, Cocoa Scripting, Apple Events, ObjC, C Function Binding). Сообщить об ошибках сценариев моста в Apple Bug Reporter.

У conciencious разработчика будет набор тестов для использования приложения Scripting Dictionary через любой язык сценариев, имеющий значение для своих клиентов. Хорошее покрытие теста будет автоматизировано и, вероятно, будет использовать несколько языков сценариев.

... уже знаю JavaScript, есть ли веская причина, по которой я должен больше изучить AppleScript?

Пока не будет создано больше документов JXA, некоторые существующие материалы AppleScript могут быть полезны для объяснения различных аспектов архитектуры сценариев.

Существующие автоматики AppleScript, обладающие квалифицированными экспертными знаниями AppleScript, в рабочих процессах, связанных с переносом доходов, могут быть консервативны при принятии JXA.

Если вы уже знаете JavaScript и автоматизация для вас лично, то JXA (с отмеченными оговорками) кажется разумным выбором.

Обновление: теперь Apple опубликовала Руководство по разработке сценариев Mac

Версия 2016-10-27. Новый документ, который содержит введение в использование AppleScript и JavaScript