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

Kotlin Native in 1.6

RyuNen344
November 16, 2021

Kotlin Native in 1.6

RyuNen344

November 16, 2021
Tweet

More Decks by RyuNen344

Other Decks in Programming

Transcript

  1. Kotlin/Native in 1.6
    2011.11.16 Mobileษڧձ Wantedly × νʔϜϥϘ
    Bunjiro Miyoshi

    View Slide

  2. About Me
    • (ࣗশ)ϚϧνϓϥοτϑΥʔϜܳਓ


    • KMM, Flutter etc...


    • ΞΠίϯ͕ϒϩοίϦʔͩͬͨΓɺγϯόϧͩͬͨΓ

    View Slide

  3. KMM will go Beta in Spring 2022

    View Slide

  4. Kotlin/Native 1.6ͷ໨ۄػೳ
    ......ͷલʹ

    View Slide

  5. ͝ଘ͡Ͱ͔͢ʁ


    Kotlin/Native 1.5ͷػೳ

    View Slide

  6. Kotlin 1.5.0
    • Performance޲্


    • Memory Leak Checkerͷެ։


    • ಺෦։ൃ༻ύϥϝʔλ͕ެ։͞Εͨ

    View Slide

  7. Kotlin 1.5.20
    • Performance޲্


    • KDocΛObjective-C Headerʹग़ྗՄೳʹͳͬͨ


    • JavaDocͷKotlinόʔδϣϯ(https://kotlinlang.org/docs/kotlin-
    doc.html)


    • Dokka(https://github.com/Kotlin/dokka)Λ࢖͏ͱ͓खܰʹυΩϡ
    ϝϯτΛੜ੒Ͱ͖Δ

    View Slide

  8. Kotlin 1.5.20 KDoc
    • build.gradleͰcompilerArgsʹ-Xexport-kdocΛ௥Ճ

    View Slide

  9. Kotlin 1.5.20 KDoc
    👇

    View Slide

  10. Kotlin 1.5.30
    • Apple Silicon Support


    • arm64ܥͷαϙʔτ


    • CocoaPods Gradle Pluginͷ֦ு


    • Swift 5.5 async/awaitޓ׵ੑ޲্


    • Companion Objectͷޓ׵ੑ޲্

    View Slide

  11. Kotlin 1.5.30 CocoaPods Gradle Plugin

    View Slide

  12. Kotlin 1.5.30 Swift 5.5 async/await
    • kotlinͷsuspendؔ਺ͷޓ׵ࣗମ͸kotlin 1.4Ͱಋೖ


    • Swift/Objective-CڞʹCompletion Handlerͱͯ͠ఏڙ͞Ε͍ͯͨ


    • Swift5.5Ҏ߱ʹ͍ͭͯ͸async/awaitͱͯ͠kotlinͷsuspendؔ਺Λ
    ࢖͑Δ

    View Slide

  13. Kotlin 1.5.30 Companion Object
    👉

    View Slide

  14. Kotlin/Native 1.6ͷ໨ۄػೳ
    ຊ୊ʹ໭ͬͯ

    View Slide

  15. ৽͍͠Memory Managementͷొ৔


    (experimental)

    View Slide

  16. WARNING


    Kotlin 1.6 RC2Ͱͷ಺༰Ͱ͢


    (લ೔ʹͳͬͯ1.6 Stable͕Release͞Ε·ͨ͠😢)

    View Slide

  17. େࡶ೺ʹݴ͏ͱ......
    • Tracing Garbage Collection͕ಋೖ͞Εͨ


    • freeze, @SharedImmutable, @ThreadLocal౳ͷKotlin/Nativeಛ༗ͷه
    ड़͕ෆཁʹͳͬͨ*

    View Slide

  18. ݱঢ়ͷMemory Management....ͷલʹ
    JVM/android Swift, Objective-C/iOS
    Tracing Garbage Collection Automatic Reference Counting
    Full GCͷ૸Δͱ͢΂͕ͯࢭ·Δ͜ͱ͕͋Δ
    (Stop The World)
    compile timeʹΧ΢ϯτ͢ΔॲཧΛຒΊࠐΉ


    increment, decrement͢ΔॲཧͷͨΊϧʔϓ
    ౳ͷॲཧͰΦʔόʔϔου͕ൃੜ

    View Slide

  19. ݱঢ়ͷMemory Management
    0ME /FX
    Deferred Reference Counting
    GC
    Stop The World mark and
    sweep GC
    εϨουͷϒϩοΫΛճආ͢Δඞཁ͕͋Δ(ཁ
    freeze)


    GCͷλΠϛϯάΛԆظͤ͞ΔͨΊස౓͸ݮΔ
    ͕ॲཧ͕࣌ؒ௕͘ͳΔ
    freeze͠ͳͯ͘΋εϨουΛލ͍ͰΦϒδΣΫ
    τͱϓϩύςΟʹΞΫηεͰ͖Δ*


    ύϑΥʔϚϯεѱ͍(εϨου͕ࢭ·Δ)
    ΞϧΰϦζϜ͸ݕ౼த

    View Slide

  20. Ͳ͏มΘΔʁ
    • ࠷্ҐϓϩύςΟͷ஗ԆॳظԽ


    • ࠷ॳʹΞΫηεͨ͠λΠϛϯάͰॳظԽ͞ΕΔΑ͏ʹ


    • ࠓޙ΋ϓϩάϥϜىಈ࣌ʹॳظԽͤ͞ͳ͚Ε͹ͳΒͳ͍΋ͷ͸
    @EagerInitializationΛ෇༩


    • ݪଇfreezeෆཁ


    • AtomicReference͸ඞཁ


    • by lazy {}͕εϨουηʔϑϞʔυΛαϙʔτ

    View Slide

  21. ࣮ࡍͷϝϞϦ࢖༻ྔͷΠϝʔδ
    • ը໘ભҠͱϦετੜ੒͢ΔΞϓϦ


    • Generate instanceϘλϯΛԡ͢ͱ
    data classͷϦετΛ10ສݸੜ੒͢Δ


    • Run GCϘλϯΛԡ͢ͱGCΛڧ੍త
    ʹ૸ΒͤΔ

    View Slide

  22. ࣮ࡍͷϝϞϦ࢖༻ྔͷΠϝʔδ
    ΞϓϦىಈ GCΛΩοΫ
    Ϧετը໘ʹભҠ
    20ສݸͷϦετੜ੒
    Emptyը໘ʹભҠ
    ݩը໘ʹ໭Δ


    ᶅ ᶆ


    View Slide

  23. ࣮ࡍͷϝϞϦ࢖༻ྔͷΠϝʔδ Old
    ᶃ ᶄ ᶅ ᶆ ᶇ ᶈ

    View Slide

  24. ࣮ࡍͷϝϞϦ࢖༻ྔͷΠϝʔδ New
    ᶃ ᶄ ᶅ ᶆ ᶇ ᶈ

    View Slide

  25. ࣮ࡍͷϝϞϦ࢖༻ྔͷΠϝʔδ
    • ࠓͷΞϧΰϦζϜͩͱKotlin/NativeଆͰॲཧதʹ࢖༻ͨ͠ϝϞϦ͕݁
    ߏ࢒Δ


    • େ͛͞ͳྫͳͷͰ࣮࢖༻Ͱ͸ී௨ʹ࢖͑ͦ͏
    🤔Ͳ͏ͯ͠΋GCΛ૸Β͍ͤͨ৔߹΋͋Δ͔΋

    View Slide

  26. ௕͍ఀࢭ࣌ؒɾΩϧ


    ϦεΫΛݮΒͨ͢Ίʹ

    View Slide

  27. ProgrammaticallyʹGCΛΩοΫ͢Δ
    • GCͷΞϧΰϦζϜͷ੍ݶͱͯ͠εϨουͷఀࢭ࣌ؒ͸ώʔϓ಺ͷΦ
    ϒδΣΫτ਺ʹґଘ͢Δ


    • iOS͸ΞϓϦͷঢ়ଶΛѻ͏ػೳ͕ͳ͍ͷͰόοΫάϥ΢ϯυʹҠߦ͠
    ͨ౳ΛΩοΫʹGCΛ૸ΒͤΔ͜ͱ͕Ͱ͖ͳ͍ͨΊOSʹΞϓϦ͕Ωϧ
    ͞ΕΔ֬཰͕ߴ·Δ
    👉ProgrammaticallyʹGCΛΩοΫͨ͘͠ͳΔ

    View Slide

  28. ProgrammaticallyʹGCΛΩοΫ͢Δ
    • kotlin.native.internalʹఆٛ͞Ε͍ͯΔGC.ktͱCleaner.ktΛ࢖༻͢Δ


    • ͦΕͧΕϦιʔεղফʹఏڙ͞Ε͍ͯΔinterface


    • C++ίʔυʹinteropͯ͋͠Γɺͦ͜ͰϝϞϦղ์Λߦ͏


    • σϑΥϧτͰ͸ެ։͞Ε͍ͯͳ͍ͷͰwrapper functionΛ༻ҙͯ͠ݺͼग़ͤΔ
    Α͏ʹͯ͋͛͠Δ


    • جຊతʹ͸Kotlin/Native Runtime͕ࣗಈͰGCΛΩοΫ͢ΔͷͰ࢖༻ස౓͸௿
    ͍(͸ͣ)

    View Slide

  29. ProgrammaticallyʹGCΛΩοΫ͢Δ
    ࣗಈͰ૸ΔGCͰղܾͰ͖ͳ͍΋ͷʹؔ͠
    ͯ͸ࠨهͷϝιουΛୟ͍ͯ΍Δ(ex.
    AppDelegate#applicationDidEnterBackground)

    View Slide

  30. ϥΠϒϥϦͷରԠঢ়گ
    • Ktor


    • 2.0.0ͰରԠ͞Εͨόʔδϣϯ͕stableʹͳΔ


    • eapΛࢼ͢৔߹͸1.6.2-native-mm-eap-196


    • Coroutine


    • 1.5.3ͰstableʹͳΓͦ͏


    • eapΛࢼ͢৔߹͸1.5.1-new-mm-dev2


    • SQLDelight


    • ಈ͔ͳ͍ࢫͷissueཱ͕͍ͬͯΔ (https://github.com/cashapp/sqldelight/issues/2556)


    • eapʹରԠ͸͠ͳ͍༷ࢠͳͷͰkotlinଆͷnew mm͕ରԠ͞Ε͔ͯΒʹͳΓͦ͏

    View Slide

  31. ·ͱΊ
    • Kotlin/Nativeʹ৽͍͠ϝϞϦϚωʔδϝϯτͷ࢓૊Έ͕ಋೖ͞Εɺ
    Kotlin/Nativeಛ༗ͷهड़͕ݮΒͤΔΑ͏ʹͳͬͨ


    • KtorͷHttpClientEngineੜ੒पΓ͕͔ͳΓָʹͳͬͯخ͍͠


    • ύϑΥʔϚϯε͸·ͩ·ͩ޲্͞Εͦ͏

    View Slide

  32. ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠

    View Slide

  33. ࢀߟࢿྉ
    • σϞΞϓϦ(https://github.com/RyuNen344/koin-mpp-sample/releases/tag/newmm)


    • Kotlin/Native Memory Management Update(https://blog.jetbrains.com/kotlin/
    2021/05/kotlin-native-memory-management-update/)


    • Prototype a new garbage collector(https://youtrack.jetbrains.com/issue/KT-42296)


    • Try the New Kotlin/Native Memory Manager Development Preview(https://
    blog.jetbrains.com/kotlin/2021/08/try-the-new-kotlin-native-memory-manager-
    development-preview/)


    • NEW_MM.md(https://github.com/JetBrains/kotlin/blob/master/kotlin-native/
    NEW_MM.md)

    View Slide