Upgrade to Pro — share decks privately, control downloads, hide ads and more …

CodeFest 2018. Дмитирй Грязин (Avito) — Kotlin: новые перспективы кроссплатформенной разработки

16b6c87229eaf58768d25ed7b2bbbf52?s=47 CodeFest
April 09, 2018

CodeFest 2018. Дмитирй Грязин (Avito) — Kotlin: новые перспективы кроссплатформенной разработки

Посмотрите выступления Дмитрия: https://2018.codefest.ru/lecture/1263/

Доклад будет посвящен кроссплатформеной разработке на Kotlin. Расскажу про то какие возможности Kotlin позволяет получить и про то чем Kotlin не является.

16b6c87229eaf58768d25ed7b2bbbf52?s=128

CodeFest

April 09, 2018
Tweet

Transcript

  1. Kotlin новые перспективы кроссплатформенной разработки Дмитрий Грязин, Avito

  2. Cross-platform 2 Xamarin

  3. Cross-platform 3 Xamarin PhoneGap

  4. Cross-platform 4 Xamarin PhoneGap React Native

  5. Cross-platform 5 Xamarin PhoneGap React Native Intel XDK, Intel MultiOS

    engine
  6. Cross-platform 6 Xamarin PhoneGap React Native Intel XDK, Intel MultiOS

    engine Titanium, Ionic, J2ObjC, Mobile Angular, Unity...
  7. Cross-platform 7 Fragmentation Behind Native frameworks Tooling Less libraries

  8. Что такое Kotlin native? 8

  9. Что такое Kotlin native? Kotlin → JVM 9

  10. Что такое Kotlin native? Kotlin → JVM Kotlin → JS

    10
  11. Что такое Kotlin native? Kotlin → JVM Kotlin → JS

    Kotlin → LLVM 11
  12. LLVM? 12

  13. LLVM?? 13

  14. Low Level Virtual Machine 14

  15. Low Level Virtual Machine 15

  16. Low Level Virtual Machine C С++ C# Objective-C Swift Java

    bytecode x86 ARM 16
  17. Зачем Kotlin → LLVM? 17

  18. Зачем Kotlin → LLVM? Android iOS Web Backend 18

  19. Зачем Kotlin → LLVM? Android iOS Web Backend 19

  20. Зачем Kotlin → LLVM? Android iOS Web Backend J2ObjC Intel

    MultiOS engine 20
  21. Зачем Kotlin → LLVM? Android iOS Web Backend J2ObjC Intel

    MultiOS engine 21
  22. WebAssembly 22

  23. WebAssembly 23

  24. WebAssembly 24

  25. Зачем Kotlin → LLVM? Android iOS Web Backend 25

  26. Cross-platform 26 Run everywhere

  27. Cross-platform 27 Run everywhere Koltin everywhere

  28. Kotlin everywhere 28

  29. Kotlin native сегодня Могу ли я: - Использовать С-библиотеки? -

    Писать Android-приложения? - Писать iOS-приложения? - Писать Android- / iOS-приложения? 29
  30. С-библиотеки 30

  31. С-библиотеки cinterop → .klib 31

  32. С-библиотеки cinterop → .klib CPointer<T> 32

  33. С-библиотеки cinterop → .klib CPointer<T> CPointer<CPointerVar<ByteVar>> 33

  34. С-библиотеки cinterop → .klib CPointer<T> CPointer<CPointerVar<ByteVar>> COpaquePointer 34

  35. С-библиотеки cinterop → .klib CPointer<T> CPointer<CPointerVar<ByteVar>> COpaquePointer CValuesRef<T> 35

  36. С-библиотеки cinterop → .klib CPointer<T> CPointer<CPointerVar<ByteVar>> COpaquePointer CValuesRef<T> CValue<T> 36

  37. С-библиотеки cinterop → .klib CPointer<T> CPointer<CPointerVar<ByteVar>> COpaquePointer CValuesRef<T> CValue<T> StableObjPtr

    37
  38. С-библиотеки cinterop → .klib CPointer<T> CPointer<CPointerVar<ByteVar>> COpaquePointer CValuesRef<T> CValue<T> StableObjPtr

    38 .reinterpret<IntVar>()
  39. С-библиотеки cinterop → .klib CPointer<T> CPointer<CPointerVar<ByteVar>> COpaquePointer CValuesRef<T> CValue<T> StableObjPtr

    39 .reinterpret<IntVar>() nativeHeap.alloc nativeHeap.allocArray nativeHeap.free
  40. С-библиотеки cinterop → .klib CPointer<T> CPointer<CPointerVar<ByteVar>> COpaquePointer CValuesRef<T> CValue<T> StableObjPtr

    40 .reinterpret<IntVar>() nativeHeap.alloc nativeHeap.allocArray nativeHeap.free memScoped { }
  41. С-библиотеки cinterop → .klib CPointer<T> CPointer<CPointerVar<ByteVar>> COpaquePointer CValuesRef<T> CValue<T> StableObjPtr

    41 .reinterpret<IntVar>() nativeHeap.alloc nativeHeap.allocArray nativeHeap.free memScoped { } staticCFunction { } ...
  42. С-библиотеки 42

  43. С-библиотеки 43

  44. Kotlin native сегодня Могу ли я: - Использовать С-библиотеки? ДА,

    но... 44
  45. Android-приложения 45

  46. Android-приложения - CMake - no JNI - CLion 46

  47. Kotlin native сегодня Могу ли я: - Использовать С-библиотеки? ДА,

    но… - Писать Android-приложения? ДА, но... 47
  48. iOS-приложения 48

  49. iOS-приложения - CMake + cinterop? 49

  50. iOS-приложения - CMake + cinterop? - No XCode support. CLion?

    50
  51. iOS-приложения - CMake + cinterop? - No XCode support. CLion?

    - @ExportObjCClass 51
  52. iOS-приложения - CMake + cinterop? - No XCode support. CLion?

    - @ExportObjCClass - @konan.internal.Intrinsic external fun <T : ObjCObjectBase> T.initBy 52
  53. Kotlin native сегодня Могу ли я: - Использовать С-библиотеки? ДА,

    но… - Писать Android-приложения? ДА, но… - Писать iOS-приложения? ДА, но… 53
  54. Android- / iOS-приложения 54

  55. Android- / iOS-приложения 55 Common Business logic

  56. Android- / iOS-приложения 56 Common Business logic Android UI iOS

    UI UI libs SDK UI libs SDK View Binding View Binding
  57. Android- / iOS-приложения 57 ? Android UI iOS UI UI

    libs SDK UI libs SDK View Binding View Binding
  58. Android- / iOS-приложения 58 Android UI iOS UI UI libs

    SDK UI libs SDK View Binding View Binding Network Caching Parsing Models Presentation logic IO / Database
  59. Android- / iOS-приложения 59 Android UI iOS UI UI libs

    SDK UI libs SDK View Binding View Binding Network Caching Parsing Models Presentation logic IO / Database
  60. Android- / iOS-приложения 60 Android UI iOS UI UI libs

    SDK UI libs SDK View Binding View Binding Models Presentation logic Network Caching Parsing Database Network Caching Parsing Database
  61. Android- / iOS-приложения 61 Android UI iOS UI UI libs

    SDK UI libs SDK View Binding View Binding Models Presentation logic Network Caching Parsing Database Network Caching Parsing Database ? ?
  62. Multiplatform 62

  63. Multiplatform 63

  64. Multiplatform 64

  65. Multiplatform 65 https://github.com/JetBrains/KotlinMultiplatformPlayground

  66. Multiplatform 66 https://github.com/JetBrains/KotlinMultiplatformPlayground -produce framework

  67. Kotlin native сегодня Могу ли я: - Использовать С-библиотеки? ДА,

    но… - Писать Android-приложения? ДА, но… - Писать iOS-приложения? ДА, но… - Писать Android- / iOS-приложения? ДА 67
  68. Kotlin native сегодня 68

  69. Kotlin native сегодня 69 - Objective-C interop - POSIX API,

    UIKit...
  70. Kotlin native сегодня 70 - Objective-C interop - POSIX API,

    UIKit... - Compile as iOS framework
  71. Kotlin native сегодня 71 - Multiplatform - Objective-C interop -

    POSIX API, UIKit... - Compile as iOS framework
  72. Kotlin native сегодня 72 - Objective-C interop - POSIX API,

    UIKit... - Compile as iOS framework - Multiplatform
  73. Kotlin native: будущее - Coroutines - IDE support - iOS

    multiplatform projects 73
  74. 74

  75. Спасибо за внимание! 75

  76. Спасибо за внимание! https://github.com/JetBrains/kotlin-native 76 kotlinlang.slack.com