Comments 10
inline, crossinline, noinline
появились еще до корутин, и никак не связаны с ними. А в подкасте, что вы упомянули, Алексей Шипилёв выражал свою озабоченность в целесообразности давать возможность разработчикам использовать inline
, что было вполне неплохо аргументировано Романом Елизаровым и многие опасения были развеяны.
0
Переслушаю подкаст. Может, я пропустил что-то, но почему даны столь серьёзные гарантии обратной совместимости для неоднозначной фичи, если можно было сделать аннотацию, а потом, если что, пометить её как deprecated и через несколько версий выпилить без поднятия мажорной версии языка? Может, Java научится сама грамотно инлайнить лямбды и выводить общие типы и тогда эта фича станет абсолютно бесполезной и даже вредной.
0
А кто-то может объяснить, или направить на страницу с пояснением, как технически они компилируют Kotlin код для iOS используя LLVM? Kotlin код транслируется в Objective-C?
0
Сначала генерируются хедеры для кода на Objective-C, который используется Kotlin'ом. Хранятся они в формате ".def". Генерируются с помощью cInterop.
После этого нужно скомпилировать этот используемый код на Objective-C в llvm байт-код (.bc) с помощью компилятора llvm clang.
Затем компилятору Kotlin konanc передаются хедеры Objective-C и файлы исходного кода (.kt). Он тоже сгенерирует llvm байт-код (.bc).
И, наконец, весь байт-код сливается вместе через llvm-lto.
Дальше можно, например, собрать из получившегося ".o" файла статическую библиотеку (.a) и использовать её в своём приложении под iOS, предварительно сгенерировав из Kotlin хода хедеры для Objective-C (я не нашёл способа это сделать сейчас. Возможно, он в разработке).
В этой статье описан процесс компиляции Kotlin вместе с C++: justmaku.org/2017-06-07-kotlin-on-ios
После этого нужно скомпилировать этот используемый код на Objective-C в llvm байт-код (.bc) с помощью компилятора llvm clang.
Затем компилятору Kotlin konanc передаются хедеры Objective-C и файлы исходного кода (.kt). Он тоже сгенерирует llvm байт-код (.bc).
И, наконец, весь байт-код сливается вместе через llvm-lto.
Дальше можно, например, собрать из получившегося ".o" файла статическую библиотеку (.a) и использовать её в своём приложении под iOS, предварительно сгенерировав из Kotlin хода хедеры для Objective-C (я не нашёл способа это сделать сейчас. Возможно, он в разработке).
В этой статье описан процесс компиляции Kotlin вместе с C++: justmaku.org/2017-06-07-kotlin-on-ios
0
Спасибо за столь подробное описание как это все работает.
Я пока вижу несколько серьезных проблем которые не позволяют использовать Kotlin для реальных проектов на iOS:
Я пока вижу несколько серьезных проблем которые не позволяют использовать Kotlin для реальных проектов на iOS:
- iOS Simulator не поддерживается. Это усложняет саму разработку, и делает практически невозможным писать Unit тесты и запускать их. Конечно, кто-то скажет что их можно запускать и на девайсе, но согласитесь, это одевание штанов через голову.
- Нет поддержки байт кода. Пока что Apple не запрещает сабмитить им iOS приложения для Appstore без байт кода, но для watchOS и tvOS это уже не прокатит. И никто не знает когда Apple перестанет принимать приложения без байт кода и для iOS.
+1
Sign up to leave a comment.
iOS+Kotlin. Что можно сделать сейчас