Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

About Me • (ࣗশ)ϚϧνϓϥοτϑΥʔϜܳਓ • KMM, Flutter etc... • ΞΠίϯ͕ϒϩοίϦʔͩͬͨΓɺγϯόϧͩͬͨΓ

Slide 3

Slide 3 text

KMM will go Beta in Spring 2022

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

͝ଘ͡Ͱ͔͢ʁ Kotlin/Native 1.5ͷػೳ

Slide 6

Slide 6 text

Kotlin 1.5.0 • Performance޲্ • Memory Leak Checkerͷެ։ • ಺෦։ൃ༻ύϥϝʔλ͕ެ։͞Εͨ

Slide 7

Slide 7 text

Kotlin 1.5.20 • Performance޲্ • KDocΛObjective-C Headerʹग़ྗՄೳʹͳͬͨ • JavaDocͷKotlinόʔδϣϯ(https://kotlinlang.org/docs/kotlin- doc.html) • Dokka(https://github.com/Kotlin/dokka)Λ࢖͏ͱ͓खܰʹυΩϡ ϝϯτΛੜ੒Ͱ͖Δ

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

Kotlin 1.5.20 KDoc 👇

Slide 10

Slide 10 text

Kotlin 1.5.30 • Apple Silicon Support • arm64ܥͷαϙʔτ • CocoaPods Gradle Pluginͷ֦ு • Swift 5.5 async/awaitޓ׵ੑ޲্ • Companion Objectͷޓ׵ੑ޲্

Slide 11

Slide 11 text

Kotlin 1.5.30 CocoaPods Gradle Plugin

Slide 12

Slide 12 text

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ؔ਺Λ ࢖͑Δ

Slide 13

Slide 13 text

Kotlin 1.5.30 Companion Object 👉

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

৽͍͠Memory Managementͷొ৔ (experimental)

Slide 16

Slide 16 text

WARNING Kotlin 1.6 RC2Ͱͷ಺༰Ͱ͢ (લ೔ʹͳͬͯ1.6 Stable͕Release͞Ε·ͨ͠😢)

Slide 17

Slide 17 text

େࡶ೺ʹݴ͏ͱ...... • Tracing Garbage Collection͕ಋೖ͞Εͨ • freeze, @SharedImmutable, @ThreadLocal౳ͷKotlin/Nativeಛ༗ͷه ड़͕ෆཁʹͳͬͨ*

Slide 18

Slide 18 text

ݱঢ়ͷMemory Management....ͷલʹ JVM/android Swift, Objective-C/iOS Tracing Garbage Collection Automatic Reference Counting Full GCͷ૸Δͱ͢΂͕ͯࢭ·Δ͜ͱ͕͋Δ (Stop The World) compile timeʹΧ΢ϯτ͢ΔॲཧΛຒΊࠐΉ increment, decrement͢ΔॲཧͷͨΊϧʔϓ ౳ͷॲཧͰΦʔόʔϔου͕ൃੜ

Slide 19

Slide 19 text

ݱঢ়ͷMemory Management 0ME /FX Deferred Reference Counting GC Stop The World mark and sweep GC εϨουͷϒϩοΫΛճආ͢Δඞཁ͕͋Δ(ཁ freeze) GCͷλΠϛϯάΛԆظͤ͞ΔͨΊස౓͸ݮΔ ͕ॲཧ͕࣌ؒ௕͘ͳΔ freeze͠ͳͯ͘΋εϨουΛލ͍ͰΦϒδΣΫ τͱϓϩύςΟʹΞΫηεͰ͖Δ* ύϑΥʔϚϯεѱ͍(εϨου͕ࢭ·Δ) ΞϧΰϦζϜ͸ݕ౼த

Slide 20

Slide 20 text

Ͳ͏มΘΔʁ • ࠷্ҐϓϩύςΟͷ஗ԆॳظԽ • ࠷ॳʹΞΫηεͨ͠λΠϛϯάͰॳظԽ͞ΕΔΑ͏ʹ • ࠓޙ΋ϓϩάϥϜىಈ࣌ʹॳظԽͤ͞ͳ͚Ε͹ͳΒͳ͍΋ͷ͸ @EagerInitializationΛ෇༩ • ݪଇfreezeෆཁ • AtomicReference͸ඞཁ • by lazy {}͕εϨουηʔϑϞʔυΛαϙʔτ

Slide 21

Slide 21 text

࣮ࡍͷϝϞϦ࢖༻ྔͷΠϝʔδ • ը໘ભҠͱϦετੜ੒͢ΔΞϓϦ • Generate instanceϘλϯΛԡ͢ͱ data classͷϦετΛ10ສݸੜ੒͢Δ • Run GCϘλϯΛԡ͢ͱGCΛڧ੍త ʹ૸ΒͤΔ

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

࣮ࡍͷϝϞϦ࢖༻ྔͷΠϝʔδ • ࠓͷΞϧΰϦζϜͩͱKotlin/NativeଆͰॲཧதʹ࢖༻ͨ͠ϝϞϦ͕݁ ߏ࢒Δ • େ͛͞ͳྫͳͷͰ࣮࢖༻Ͱ͸ී௨ʹ࢖͑ͦ͏ 🤔Ͳ͏ͯ͠΋GCΛ૸Β͍ͤͨ৔߹΋͋Δ͔΋

Slide 26

Slide 26 text

௕͍ఀࢭ࣌ؒɾΩϧ ϦεΫΛݮΒͨ͢Ίʹ

Slide 27

Slide 27 text

ProgrammaticallyʹGCΛΩοΫ͢Δ • GCͷΞϧΰϦζϜͷ੍ݶͱͯ͠εϨουͷఀࢭ࣌ؒ͸ώʔϓ಺ͷΦ ϒδΣΫτ਺ʹґଘ͢Δ • iOS͸ΞϓϦͷঢ়ଶΛѻ͏ػೳ͕ͳ͍ͷͰόοΫάϥ΢ϯυʹҠߦ͠ ͨ౳ΛΩοΫʹGCΛ૸ΒͤΔ͜ͱ͕Ͱ͖ͳ͍ͨΊOSʹΞϓϦ͕Ωϧ ͞ΕΔ֬཰͕ߴ·Δ 👉ProgrammaticallyʹGCΛΩοΫͨ͘͠ͳΔ

Slide 28

Slide 28 text

ProgrammaticallyʹGCΛΩοΫ͢Δ • kotlin.native.internalʹఆٛ͞Ε͍ͯΔGC.ktͱCleaner.ktΛ࢖༻͢Δ • ͦΕͧΕϦιʔεղফʹఏڙ͞Ε͍ͯΔinterface • C++ίʔυʹinteropͯ͋͠Γɺͦ͜ͰϝϞϦղ์Λߦ͏ • σϑΥϧτͰ͸ެ։͞Ε͍ͯͳ͍ͷͰwrapper functionΛ༻ҙͯ͠ݺͼग़ͤΔ Α͏ʹͯ͋͛͠Δ • جຊతʹ͸Kotlin/Native Runtime͕ࣗಈͰGCΛΩοΫ͢ΔͷͰ࢖༻ස౓͸௿ ͍(͸ͣ)

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

ϥΠϒϥϦͷରԠঢ়گ • 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͕ରԠ͞Ε͔ͯΒʹͳΓͦ͏

Slide 31

Slide 31 text

·ͱΊ • Kotlin/Nativeʹ৽͍͠ϝϞϦϚωʔδϝϯτͷ࢓૊Έ͕ಋೖ͞Εɺ Kotlin/Nativeಛ༗ͷهड़͕ݮΒͤΔΑ͏ʹͳͬͨ • KtorͷHttpClientEngineੜ੒पΓ͕͔ͳΓָʹͳͬͯخ͍͠ • ύϑΥʔϚϯε͸·ͩ·ͩ޲্͞Εͦ͏

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

ࢀߟࢿྉ • σϞΞϓϦ(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)