Есть ли накладные расходы на написание библиотеки на Kotlin для Android?

Я рассматриваю возможность переноса библиотеки Java (Android) на Kotlin. Мне очень нравится Kotlin, и преимущества перед Java должны уменьшить количество ошибок в библиотеке.

Поскольку библиотека нацелена на среду с ограниченными ресурсами, я беспокоюсь, что перенос библиотеки на Kotlin приведет к дополнительным накладным расходам.

Вводит ли библиотека Kotlin (распространяемая в виде файлов .class) какое-либо время выполнения или дополнительные накладные расходы по сравнению с библиотекой Java?

Будет ли результирующее Android-приложение больше или медленнее из-за Kotlin?


person Marc O'Morain    schedule 22.09.2016    source источник
comment
Существует стандартная библиотека Kotlin, в которой количество методов составляет около 5747, хотя это может не иметь значения, если клиент все равно использует stdlib.   -  person nhaarman    schedule 22.09.2016
comment
Вы правы, есть компромисс: kotlin со stdlib может быть излишним для небольших библиотек, но для больших может иметь смысл, поскольку kotlin stdlib имеет много полезных API. Вы можете написать свою библиотеку на java и предоставить удобные API/расширения Kotlin через отдельную библиотеку, например, RxJava и RxKotlin.   -  person Stepango    schedule 22.09.2016
comment
Спасибо за предложение, но дело в том, что я хочу написать библиотеку на Котлине — мне нужны неизменяемые классы данных и нулевая безопасность.   -  person Marc O'Morain    schedule 22.09.2016
comment
@MarcO'Morain java также поддерживает неизменяемые классы, вы можете обеспечить нулевую безопасность в java с помощью аннотаций Nullable/NonNull. Если вы хотите использовать kotlin, почему вас беспокоит размер стандартной библиотеки?   -  person Stepango    schedule 22.09.2016
comment
› Если вы хотите использовать kotlin, почему вас беспокоит размер стандартной библиотеки? @Stepango Степанго, я не вижу здесь дихотомии. Я хочу использовать Kotlin для улучшения синтаксиса и безопасности во время компиляции. Это улучшение по сравнению с Java во всех отношениях. Я не хочу увеличивать размер APK приложений, использующих мою библиотеку, больше, чем это необходимо. Я не хочу добавлять какие-либо транзитивные зависимости в клиентские приложения.   -  person Marc O'Morain    schedule 22.09.2016


Ответы (1)


В Kotlin есть множество оптимизаций, специально предназначенных для Android. Если вы читаете сообщения в блогах, вы можете видеть, как он постоянно уменьшает размер стандартной библиотеки и количество классов в каждом выпуске.

Будет ли результирующее Android-приложение больше или медленнее из-за Kotlin?

No

Вводит ли библиотека Kotlin (распространяемая в виде файлов .class) какое-либо время выполнения или дополнительные накладные расходы по сравнению с библиотекой Java?

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

Поскольку библиотека нацелена на среду с ограниченными ресурсами, я беспокоюсь, что перенос библиотеки на Kotlin приведет к дополнительным накладным расходам.

Вы не определили, какие ресурсы ограничены. Kotlin не собирается использовать больше памяти, не собирается использовать больше диска, а stdlib крошечная.

Мне очень нравится Kotlin, и преимущества перед Java должны уменьшить количество ошибок в библиотеке.

Kotlin популярен на Android не просто так, и вы должны воспринимать это как знак того, что у него гораздо больше преимуществ, чем недостатков. На самом деле вы можете убедиться в этом сами, взяв небольшой пример на Java и небольшой пример на Kotlin и сравнив разницу. Оба Proguard имеют один и тот же тип конвейера сборки.

person Jayson Minard    schedule 22.09.2016
comment
Отличный ответ. Спасибо. Когда я говорю об ограниченных ресурсах, я имею в виду устройство Android в целом — чем меньше размер APK, тем лучше (быстрее загрузка, меньше места для хранения, меньше памяти). Я хочу максимально сократить использование памяти моей библиотекой, чтобы быть хорошим гражданином. - person Marc O'Morain; 22.09.2016
comment
Единственный удар, который вы принимаете, — это общий класс/метод из stdlib, и Kotlin продолжает работать над способами их уменьшения. Но вы компенсируете эти недостатки тем, что у вас меньше собственного кода, меньше других библиотек, а если некоторые из них встроены, они могут даже не учитываться. Таким образом, изменение NET будет зависеть от вашего использования. Есть много опубликованных заметок о Kotlin и Android, а также о влиянии, и slack-канал на Kotlin slack имеет канал #android, где люди могут отвечать на субъективные вопросы о нем. - person Jayson Minard; 22.09.2016
comment
я бы не сказал, что стандартная библиотека очень маленькая. Kotlin 1.3 stdlib добавляет 0,7 МБ, и это может быть проблемой для некоторых приложений. - person 4ntoine; 16.01.2019
comment
@4ntoine 1,30 МБ, если быть точным, для JVM. Например, без него мой JAR весит всего 20 Кб. Огромная разница. - person LppEdd; 22.11.2019
comment
@LppEdd 1.3.0 добавляет 1,1 МБ, чтобы быть еще более точным: mvnrepository. com/artifact/org.jetbrains.kotlin/kotlin-stdlib/ - person 4ntoine; 23.11.2019
comment
@ 4ntoine да, я имел в виду 1.3.6. - person LppEdd; 23.11.2019