Теперь с объявлением Jack Google разъяснил обозримое будущее Java в отношении Android. Но каковы последствия для Scala и других разработчиков на основе JVM-языков. В частности:
- Scala делает это магией из-за собственного компилятора, который создает байт-код Java. Но Jack toolchain не занимается байт-кодом. Будет ли генерируемый байт-код получить какие-либо преимущества оптимизации обработки Джека?
- Начиная с Scala 12 поддерживается только Java 8+. То есть сгенерированный байт-код - это Java 8+. Может ли Джек использовать байт-код Java 8 (без ограничений или с ограничениями)?
- Могут ли новые поддерживаемые функции Java 8 использоваться для разработки для более старых версий Android (minSdkVersion < 'N') или я должен поддерживать отдельную ветвь для каждой версии Java? (это не ясно из документации).
Все эти вопросы сводятся к одному: может ли Scala использоваться для разработки Android в будущем, не жертвуя преимуществами новых функций Scala и новой цепочки инструментов Android?
Связанное чтение:
поделитесь ссылкой в комментариях или ответах
Похожие вопросы:
по теме:
Пожалуйста, проголосуйте за запрос функции инструмента Jack:
EDIT:
Я пытаюсь рассуждать (не отвечать) на мой вопрос, надеясь, что эксперты исправит меня, если я ошибаюсь.
Ниже приведен гипотетический поток Jack build с некоторыми дополнительными блоками, которые были добавлены на основе моей логики и того, что я узнал из доступных документов.
Базовое предположение заключается в том, что Dalvik поддерживает инструкции по байт-коду Java 7. Если это правильно, Java 8-инструкции не могут быть напрямую переданы Dalvik, их каким-то образом следует преобразовать в Java 7. (Может быть, что-то похожее на то, что компилятор Scala всегда делает).
Чем вопрос, где происходит это преобразование? Кажется, что Jill не может обрабатывать байт-код Java 8, так как это возможно в блоке (3) гипотетического потока. Если это правильно, то только файлы исходных проектов Java могут быть преобразованы, а ответ на 2-й вопрос - Нет. Классы Java 8 из библиотек не могут использоваться до тех пор, пока Джилл не сможет это сделать (если вообще возможно). То есть мы не можем использовать Scala 12 +.
Если вся оптимизация кода выполняется в блоке (6), чем ответ на 1-й вопрос - Да. Scala код, преобразованный в библиотеку .jar, может выиграть от оптимизации Джека. Но предварительно он должен быть преобразован в .jayce(AST-подобное представление), которое увеличит время сборки.
И, наконец, Джек выпускает байт-код .dex Dalvik для поддержания совместимости со старыми временами работы Dalvik (ART также использует байт-код Dalvik). Таким образом, ответ на 3-й вопрос: Да, могут использоваться функции Java 8. Но только в проектных Java-источниках. Приложение по-прежнему совместимо с любым временем выполнения. Но преимущества Java 8 снижаются из-за перехода на Java 7 (байт-код Dalvik).