Мотивация J2ObjC

J2ObjC начал с разочарования; разочарование, которое испытывали несколько команд разработчиков из-за попыток быстро усовершенствовать свои веб- и мобильные продукты без разногласий по функциональности. Многие клиентские продукты Google были созданы с использованием GWT для веб-приложений (теперь J2CL ) и API Android для мобильных устройств Android. Остались приложения для iPod/iPad, которые должны были быть либо веб-приложениями на JavaScript, либо написанными от руки на Objective-C. Хотя приложения GWT и Android могли совместно использовать код бизнес-логики (не UI), не было никакого решения для совместного использования этого кода с приложениями iOS.

Было исследовано несколько подходов к решению этой проблемы. XMLVM выглядел очень многообещающе, но в то время на странице переводчика iOS было указано, что проект приостановлен (сейчас он снова активен и является хорошей альтернативой этому проекту). Другие инструменты перевода выполняли однократное преобразование кода, требуя дополнительного редактирования, прежде чем их выходные данные будут успешно собраны и запущены.

Рождение нового проекта

С самого начала многие инженеры считали, что такой переводчик, как J2ObjC, невозможен. Создать инструмент, который сможет точно перевести весь код Java-приложения в iOS, полностью сохраняя при этом его семантику, действительно невозможно! Это связано с тем, что в iOS действуют строгие стандарты дизайна пользовательского интерфейса, и пользователи прекрасно понимают, когда приложение им не соответствует. По нашему мнению, единственный способ получить быстрый пользовательский интерфейс iOS мирового класса — написать его на Objective-C с использованием фреймворков Apple iOS SDK.

Однако, как большинство инженеров узнали из пределов дифференциального исчисления, может быть очень полезно просто приблизиться к невозможному. Поэтому мы установили ряд ограничений, которые повысят шансы на успех J2ObjC:

  • Поддерживайте только разработку на стороне клиента. Инструменты командной строки и серверный код теоретически можно перевести, но в этом случае, скорее всего, возникнут проблемы, не решаемые J2ObjC.
  • Поддерживайте только код бизнес-логики и держитесь подальше от API пользовательского интерфейса (как раньше было на старых картах: «Здесь обитают монстры»).
  • Требуйте iOS Foundation Framework , а не более общую базу.
  • Используйте инструменты Xcode для проверки приемлемой производительности и использования памяти после внедрения лучших практик Apple по управлению памятью.
  • Сосредоточьтесь только на том, что нужно разработчикам приложения, а не на том, что необходимо для полноты. Потребности реальных приложений определяют требования проекта.

Мы находим это полезным, возможно, вы тоже

Мы открыли исходный код J2ObjC, поскольку некоторые внутренние проекты обнаружили, что он решает проблему совместного использования бизнес-логики Java с их приложениями для iOS. Сейчас несколько команд полагаются на переводчик, а мы активно добавляем новые функции и исправляем множество ошибок. Мы приглашаем другие команды разработчиков мобильных приложений попробовать его и сообщить нам, что работает, а что нуждается в улучшении.

Мы также считаем работу над проектом полезной. Две самые сложные задачи для любого переводчика Java: 1) правильный анализ, проверка типов и разрешение исходного кода Java и 2) обеспечение совместимой среды выполнения Java. С первой задачей хорошо справляется компилятор javac , а среда выполнения (включая ее модульные тесты) основана на библиотеке Android libcore . Нам остается самое интересное: изменение абстрактных синтаксических деревьев и генерация исходного кода, который легко отладить. Если вас интересуют инструменты и компиляторы Java, присоединяйтесь к нам! Нам еще многое предстоит сделать, и мы будем рады помощи.