Pull to refresh

Comments 10

inline, crossinline, noinline появились еще до корутин, и никак не связаны с ними. А в подкасте, что вы упомянули, Алексей Шипилёв выражал свою озабоченность в целесообразности давать возможность разработчикам использовать inline, что было вполне неплохо аргументировано Романом Елизаровым и многие опасения были развеяны.

Переслушаю подкаст. Может, я пропустил что-то, но почему даны столь серьёзные гарантии обратной совместимости для неоднозначной фичи, если можно было сделать аннотацию, а потом, если что, пометить её как deprecated и через несколько версий выпилить без поднятия мажорной версии языка? Может, Java научится сама грамотно инлайнить лямбды и выводить общие типы и тогда эта фича станет абсолютно бесполезной и даже вредной.

Потому что inline это не оптимизация, а механизм мета-программирования, который призван заменить многие use-cases где в других языках прибегают к макросам. Может в уме заменять слово "inline fun" на "macro def" и тогда может будет понятней зачем оно нужно.

Спасибо, если так думать, то многое встаёт на свои места. Планируются какие-нибудь новые фичи, завязанные на это?
UFO just landed and posted this here
А кто-то может объяснить, или направить на страницу с пояснением, как технически они компилируют Kotlin код для iOS используя LLVM? Kotlin код транслируется в Objective-C?
Сначала генерируются хедеры для кода на 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
Спасибо за столь подробное описание как это все работает.
Я пока вижу несколько серьезных проблем которые не позволяют использовать Kotlin для реальных проектов на iOS:
  • iOS Simulator не поддерживается. Это усложняет саму разработку, и делает практически невозможным писать Unit тесты и запускать их. Конечно, кто-то скажет что их можно запускать и на девайсе, но согласитесь, это одевание штанов через голову.
  • Нет поддержки байт кода. Пока что Apple не запрещает сабмитить им iOS приложения для Appstore без байт кода, но для watchOS и tvOS это уже не прокатит. И никто не знает когда Apple перестанет принимать приложения без байт кода и для iOS.
Проект, пока что, на стадии разработки и не всё готово. Байт-код для llvm из Kotlin уже генерируется, а поддержка эмулятора заявлена, но, пока не реализована, насколько мне известно.
Sign up to leave a comment.

Articles