Slide 1

Slide 1 text

ᅳࢣ ੣໵ 2018೥౓ ৽ଔೖࣾ גࣜձࣾAbemaTV ։ൃຊ෦ NativeνʔϜ @ronnnnn_jp @ronnnnn

Slide 2

Slide 2 text

ᅳࢣ ੣໵ 2018೥౓ ৽ଔೖࣾ גࣜձࣾAbemaTV ։ൃຊ෦ NativeνʔϜ @ronnnnn_jp @ronnnnn

Slide 3

Slide 3 text

1. Kotlin Multiplatform MobileʢKMMʣͱ͸ 2. Kotlin Multiplatformͷ͜Ε·Ͱ 3. Kotlin Multiplatformͷ࢓૊Έ 4. νʔϜͰಋೖɾӡ༻͍ͯ͘͠ʹ͸ 5. KMMͷ՝୊ͱকདྷੑ 6. ࠷ۙͷτϐοΫε

Slide 4

Slide 4 text

Kotlin Multiplatform Mobile ʢKMMʣͱ͸

Slide 5

Slide 5 text

Kotlin Multiplatform? • Kotlin by JetBrains • ୯ҰͷιʔείʔυͰෳ਺ϓϥοτϑΥʔϜͷΞϓϦέʔ γϣϯ΍ϥΠϒϥϦΛ։ൃͰ͖Δٕज़ https://kotlinlang.org

Slide 6

Slide 6 text

Kotlin Multiplatform?🤔 Kotlin Multiplatform Project (KMP)?🤔 Kotlin Multiplatform Mobile (KMM)?🤔

Slide 7

Slide 7 text

Kotlin Multiplatform / KMP / KMM • KotlinʹΑͬͯෳ਺ϓϥοτϑΥʔϜͷ։ൃΛߦ͏ٕज़΍ ΤίγεςϜશମ Kotlin Multiplatform Kotlin Multiplatform Project (KMP) • Kotlin MultiplatformΛ༻͍ͯ։ൃ͞ΕΔϓϩδΣΫτ

Slide 8

Slide 8 text

Kotlin Multiplatform Mobile (KMM)? 🤝 https://youtu.be/PW-jkOLucjM?t=274 ⚙ Kotlin Multiplatform Multiplatform Gradle DSL Kotlin + Kotlin/JVM + Kotlin/Native + … Android Studio Plugin + CocoaPods integration + … 📱 Mobile Features SDK for cross-platform mobile development OFFICIAL

Slide 9

Slide 9 text

• KotlinͷڧྗͳAPIΛ׆༻ͯ͠ιʔείʔυΛڞ௨ԽͰ͖Δ • ֤ϓϥοτϑΥʔϜಛ༗ͷAPI΋΄ͱΜͲར༻Ͱ͖Δ • Ұ෦ϓϥοτϑΥʔϜΛআ͍ͯɼUI·Ͱڞ௨ԽͰ͖Δ • ର৅ϓϥοτϑΥʔϜ΋ଟ͍ • HTTPɼγϦΞϥΠζɼඇಉظॲཧͳͲ։ൃʹ͔ܽͤͳ͍ϥΠϒϥϦΛJetBrains͕ఏڙɾ ϝϯςφϯε͍ͯ͠Δ • খ͘͞ಋೖΛਐΊΒΕΔ • ϥΠϒϥϦͱͯ͠഑෍͢Δ͜ͱ΋Ͱ͖Δ Kotlin Multiplatform΍KMMͷϝϦοτ

Slide 10

Slide 10 text

Flutter΍UnityͳͲͱͷҧ͍͸ʁ • ֤ϓϥοτϑΥʔϜͰΞϓϦέʔγϣϯ͕ϥϯλΠϜͰಈ ࡞͢Δ࣮ߦ؀ڥΛඞཁͱ͢Δ • UI·Ͱڞ௨Խ͢Δ͜ͱ͕Մೳ Flutter, Unity… Kotlin Multiplatform • ಛఆͷ࣮ߦ؀ڥΛඞཁͱ͠ͳ͍ • KotlinΛ֤ϓϥοτϑΥʔϜͰಈ࡞͢ΔNativeίʔυʹม ׵͢Δ • ݱ࣌఺Ͱ͸iOSͷUIڞ௨ԽΛެ͕ࣜαϙʔτ͍ͯ͠ͳ͍

Slide 11

Slide 11 text

Kotlin Multiplatformͷ͜Ε·Ͱ

Slide 12

Slide 12 text

Kotlin 1.1 2016/02 Kotlin 1.2 2017/11 Kotlin 1.3 2018/10 Kotlin 1.4 2020/08 Kotlin 1.5 2021/05 Kotlin 1.6 2021/11 Kotlin 1.7 2022/06 KotlinΛJSʹίϯύΠϧ͢ΔػೳʢKotlin/JSʣ͕Stableʹ JVMͱJS؀ڥͷιʔείʔυڞ௨Խ͕Մೳʹ Kotlin/Native Beta (v1.0.1) Kotlin Multiplatform Mobile Alpha Hierarchical project structure Kotlin NativeͷύϑΥʔϚϯεվળ Experimental new memory manager Alpha new memory manager

Slide 13

Slide 13 text

Kotlin 1.1 2016/02 Kotlin 1.2 2017/11 Kotlin 1.3 2018/10 Kotlin 1.4 2020/08 Kotlin 1.5 2021/05 Kotlin 1.6 2021/11 Kotlin 1.7 2022/06 KotlinΛJSʹίϯύΠϧ͢Δػೳ(Kotlin/JS)͕Stableʹ JVMͱJS؀ڥͷιʔείʔυڞ௨Խ͕Մೳʹ Kotlin/Native Beta (v1.0.1) Kotlin Multiplatform Mobile Alpha Hierarchical project structure Kotlin NativeͷύϑΥʔϚϯεվળ Experimental new memory manager Alpha new memory manager https://blog.jetbrains.com/kotlin/2017/11/kotlin-1-2-released/

Slide 14

Slide 14 text

Kotlin 1.1 2016/02 Kotlin 1.2 2017/11 Kotlin 1.3 2018/10 Kotlin 1.4 2020/08 Kotlin 1.5 2021/05 Kotlin 1.6 2021/11 Kotlin 1.7 2022/06 KotlinΛJSʹίϯύΠϧ͢Δػೳ(Kotlin/JS)͕Stableʹ JVMͱJS؀ڥͷιʔείʔυڞ௨Խ͕Մೳʹ Kotlin/Native Beta (v1.0.1) Kotlin Multiplatform Mobile Alpha Hierarchical project structure Kotlin NativeͷύϑΥʔϚϯεվળ Experimental new memory manager Alpha new memory manager https://youtu.be/3uVUDsoE_5U?t=220
 https://blog.jetbrains.com/kotlin/2020/08/kotlin-multiplatform-mobile-goes-alpha/

Slide 15

Slide 15 text

Kotlin 1.1 2016/02 Kotlin 1.2 2017/11 Kotlin 1.3 2018/10 Kotlin 1.4 2020/08 Kotlin 1.5 2021/05 Kotlin 1.6 2021/11 Kotlin 1.7 2022/06 KotlinΛJSʹίϯύΠϧ͢Δػೳ(Kotlin/JS)͕Stableʹ JVMͱJS؀ڥͷιʔείʔυڞ௨Խ͕Մೳʹ Kotlin/Native Beta (v1.0.1) Kotlin Multiplatform Mobile Alpha Hierarchical project structure Kotlin NativeͷύϑΥʔϚϯεվળ Experimental new memory manager Alpha new memory manager https://blog.jetbrains.com/kotlin/2021/08/try-the-new-kotlin-native-memory-manager-development-preview/

Slide 16

Slide 16 text

https://youtu.be/3uVUDsoE_5U?t=303

Slide 17

Slide 17 text

https://blog.jetbrains.com/kotlin/2022/05/kotlin-multiplatform-mobile-beta-roadmap-update/ we have postponed Kotlin Multiplatform Mobile Beta until the memory model becomes the default, which we expect to be the case no later than autumn 2022.

Slide 18

Slide 18 text

https://youtu.be/LE-Dy9XCLxk?t=586

Slide 19

Slide 19 text

https://kotlinlang.org/docs/components-stability.html#current-stability-of-kotlin-components

Slide 20

Slide 20 text

Kotlin Multiplatformͷ࢓૊Έ

Slide 21

Slide 21 text

How Kotlin Multiplatform works • KotlinͷίϯύΠϥʹ͸FrontendͱBackend͕͋ Γɼڞ௨ͷFrontendͰதؒදݱʹม׵ޙɼ֤ϓϥοτ ϑΥʔϜͷBackendΛ௨ͯ͡όΠφϦʹม׵͞ΕΔ • ঃʑʹҠߦத 🏃 K2 Compiler https://youtu.be/3uVUDsoE_5U?t=303 Kotlin Ecosystem • ϓϥοτϑΥʔϜڞ௨ͷϥΠϒϥϦ΍API • + ϓϥοτϑΥʔϜݻ༗ͷAPI • Kotlin/JVM, Kotlin/JS, Kotlin/Wasm, Kotlin/Native

Slide 22

Slide 22 text

Code sharing • commonιʔεηοτʹڞ௨ϓϥοτϑΥʔϜͷ࣮૷Λஔ ͘͜ͱ͕Ͱ͖Δ • ϓϥοτϑΥʔϜಛ༗ͷιʔεηοτ΋࣋ͯΔ • Hierarchical project structureʹΑͬͯɼ͍ۙ؀ڥͷϓ ϥοτϑΥʔϜΛڞ௨Խͨ͠ιʔεηοτ΋࡞ΕΔ https://kotlinlang.org/docs/multiplatform.html#how-kotlin-multiplatform-works

Slide 23

Slide 23 text

Project Structure Android޲͚ͷιʔεηοτ ϓϥοτϑΥʔϜڞ௨ιʔεηοτ iOS޲͚ͷιʔεηοτ

Slide 24

Slide 24 text

expect/actual • commonιʔεηοτʹϓϥοτϑΥʔϜ͝ͱʹ࣮૷ͷҟͳ ΔΫϥεɼؔ਺ɼϓϩύςΟͳͲΛexpectΛ༻͍ͯఆٛͰ͖ Δ • ֤ϓϥοτϑΥʔϜͷιʔεηοτʹactualΛ༻͍࣮ͯ૷ৄࡉ Λهड़͢Δ • commonιʔεηοτ͚ͩͰͳ͘ɼ؀ڥͷ͍ۙϓϥοτ ϑΥʔϜΛ·ͱΊͨιʔεηοτʹ΋expectΛ༻͍ͨఆ͕ٛՄ ೳ https://kotlinlang.org/docs/multiplatform-connect-to-apis.html ϓϥοτϑΥʔϜݻ༗ͷAPI

Slide 25

Slide 25 text

Target platforms • JVM • JS (browser/Node.js) • Android • Android NDK (ARM32/ARM64/x86/x86_64) • iOS (ARM32/ARM64/iOS simulator) • watchOS (ARM32/ARM64/watchOS simulator) • tvOS (ARM64/tvOS simulator) • macOS (x86_64/Apple Silicon) • Linux (ARM32/ARM64/MIPS/mipsel/x86_64) • Windows (32-bit Windows/64-bit Windows) • WebAssembly https://kotlinlang.org/docs/multiplatform-dsl-reference.html#targets

Slide 26

Slide 26 text

Build configuration kotlin { android() listOf( iosX64(), iosArm64(), iosSimulatorArm64() ).forEach { it.binaries.framework { baseName = "base" } } sourceSets { val commonMain by getting { dependencies { // … } } val commonTest by getting val androidMain by getting val androidTest by getting val iosX64Main by getting val iosArm64Main by getting val iosSimulatorArm64Main by getting val iosMain by creating { dependsOn(commonMain) iosX64Main.dependsOn(this) iosArm64Main.dependsOn(this) iosSimulatorArm64Main.dependsOn(this) } val iosX64Test by getting val iosArm64Test by getting val iosSimulatorArm64Test by getting val iosTest by creating { dependsOn(commonTest) iosX64Test.dependsOn(this) iosArm64Test.dependsOn(this) iosSimulatorArm64Test.dependsOn(this) } } }

Slide 27

Slide 27 text

Build configuration kotlin { android() listOf( iosX64(), iosArm64(), iosSimulatorArm64() ).forEach { it.binaries.framework { baseName = "base" } } sourceSets { val commonMain by getting { dependencies { // … } } val commonTest by getting val androidMain by getting val androidTest by getting val iosX64Main by getting val iosArm64Main by getting val iosSimulatorArm64Main by getting val iosMain by creating { dependsOn(commonMain) iosX64Main.dependsOn(this) iosArm64Main.dependsOn(this) iosSimulatorArm64Main.dependsOn(this) } val iosX64Test by getting val iosArm64Test by getting val iosSimulatorArm64Test by getting val iosTest by creating { dependsOn(commonTest) iosX64Test.dependsOn(this) iosArm64Test.dependsOn(this) iosSimulatorArm64Test.dependsOn(this) } } } λʔήοτϓϥοτϑΥʔϜͷࢦఆ

Slide 28

Slide 28 text

Build configuration kotlin { android() listOf( iosX64(), iosArm64(), iosSimulatorArm64() ).forEach { it.binaries.framework { baseName = "base" } } sourceSets { val commonMain by getting { dependencies { // implementation(…) } } val commonTest by getting val androidMain by getting val androidTest by getting val iosX64Main by getting val iosArm64Main by getting val iosSimulatorArm64Main by getting val iosMain by creating { dependsOn(commonMain) iosX64Main.dependsOn(this) iosArm64Main.dependsOn(this) iosSimulatorArm64Main.dependsOn(this) } val iosX64Test by getting val iosArm64Test by getting val iosSimulatorArm64Test by getting val iosTest by creating { dependsOn(commonTest) iosX64Test.dependsOn(this) iosArm64Test.dependsOn(this) iosSimulatorArm64Test.dependsOn(this) } } } ґଘؔ܎ͳͲͷઃఆ ※ ґଘ͢ΔϥΠϒϥϦଆͰɼ λʔήοτͱͳΔϓϥοτϑΥʔ ϜʹରԠ͍ͯ͠ͳ͍ͱ͍͚ͳ͍

Slide 29

Slide 29 text

Build configuration kotlin { android() listOf( iosX64(), iosArm64(), iosSimulatorArm64() ).forEach { it.binaries.framework { baseName = "base" } } sourceSets { val commonMain by getting { dependencies { // implementation(…) } } val commonTest by getting val androidMain by getting val androidTest by getting val iosX64Main by getting val iosArm64Main by getting val iosSimulatorArm64Main by getting val iosMain by creating { dependsOn(commonMain) iosX64Main.dependsOn(this) iosArm64Main.dependsOn(this) iosSimulatorArm64Main.dependsOn(this) } val iosX64Test by getting val iosArm64Test by getting val iosSimulatorArm64Test by getting val iosTest by creating { dependsOn(commonTest) iosX64Test.dependsOn(this) iosArm64Test.dependsOn(this) iosSimulatorArm64Test.dependsOn(this) } } } ϥΠϒϥϦͷґଘؔ܎ ※ commonͰґଘ͍ͯ͠ΔϥΠϒ ϥϦ͕֤ϓϥοτϑΥʔϜʹର Ԡ͍ͯ͠Ε͹ɼϓϥοτϑΥʔ ϜผʹґଘΛॻ͘ඞཁ͸ͳ͍

Slide 30

Slide 30 text

Build configuration kotlin { android() listOf( iosX64(), iosArm64(), iosSimulatorArm64() ).forEach { it.binaries.framework { baseName = "base" } } sourceSets { val commonMain by getting { dependencies { // implementation(…) } } val commonTest by getting val androidMain by getting val androidTest by getting val iosX64Main by getting val iosArm64Main by getting val iosSimulatorArm64Main by getting val iosMain by creating { dependsOn(commonMain) iosX64Main.dependsOn(this) iosArm64Main.dependsOn(this) iosSimulatorArm64Main.dependsOn(this) } val iosX64Test by getting val iosArm64Test by getting val iosSimulatorArm64Test by getting val iosTest by creating { dependsOn(commonTest) iosX64Test.dependsOn(this) iosArm64Test.dependsOn(this) iosSimulatorArm64Test.dependsOn(this) } } } ιʔεηοτಉ࢜ͷґଘؔ܎

Slide 31

Slide 31 text

Build configuration kotlin { android { compilations.all { kotlinOptions.jvmTarget = "1.8" } publishAllLibraryVariants() } ios { binaries.framework { baseName = "base" } } // ... } • ෳ਺λʔήοτͷγϣʔτΧοτ΋༻ҙ͞Ε͍ͯΔ • ios (iosArm64/iosX64) • tvos (tvosArm64/tvosX64) • watchOS (watchosArm32/watchosArm64/watchosX64) • xxxSimulatorArm64͸ݱঢ়ؚ·Ε͍ͯͳ͍

Slide 32

Slide 32 text

νʔϜͰಋೖɾӡ༻͍ͯ͘͠ʹ͸

Slide 33

Slide 33 text

Kotlin΍Kotlin MultiplatformΛ஌Δ • ެࣜυΩϡϝϯτ • ެࣜϒϩά • YouTubeνϟϯωϧ • Slack • Twitter • reddit • ϋϯζΦϯ • αϯϓϧϓϩδΣΫτ • …

Slide 34

Slide 34 text

Kotlin΍Kotlin MultiplatformΛ஌Δ • ެࣜυΩϡϝϯτ • ެࣜϒϩά • YouTubeνϟϯωϧ • Slack • Twitter • reddit • ϋϯζΦϯ • αϯϓϧϓϩδΣΫτ • … • ެࣜυΩϡϝϯτ • ެࣜϒϩά • YouTubeνϟϯωϧ • Slack • Twitter • reddit

Slide 35

Slide 35 text

Kotlin΍Kotlin MultiplatformΛ஌Δ • ެࣜυΩϡϝϯτ • ެࣜϒϩά • YouTubeνϟϯωϧ • Slack • Twitter • reddit • ϋϯζΦϯ • αϯϓϧϓϩδΣΫτ • … • ϋϯζΦϯ • αϯϓϧϓϩδΣΫτ

Slide 36

Slide 36 text

Ͳ͏ಋೖ͍͔ͯ͘͠Λߟ͑Δ https://youtrack.jetbrains.com/issue/KT-49521 • ϞϊϨϙʁϥΠϒϥϦʁ • Ͳ͜Λڞ௨Խ͢Δʁ • ΞʔΩςΫνϟ • ϓϩδΣΫτͷߏ੒ • ϥΠϒϥϦબఆ • ςετͷํ਑

Slide 37

Slide 37 text

Ͳ͏ಋೖ͍͔ͯ͘͠Λߟ͑Δ https://www.youtube.com/channel/UCYvmsuoQ32tVY6MpOYhr5jA/videos • ϞϊϨϙʁϥΠϒϥϦʁ • Ͳ͜Λڞ௨Խ͢Δʁ • ΞʔΩςΫνϟ • ϓϩδΣΫτͷߏ੒ • ϥΠϒϥϦબఆ • ςετͷํ਑ ABEMAͷࣄྫ

Slide 38

Slide 38 text

νʔϜΛઆಘ͢Δ • έʔεελσΟ https://kotlinlang.org/lp/mobile/case-studies/

Slide 39

Slide 39 text

ϝϯόʔͷࢀೖϋʔυϧΛԼ͛Δ • υΩϡϝϯςʔγϣϯ • ษڧձ

Slide 40

Slide 40 text

No content

Slide 41

Slide 41 text

KMMͷ՝୊ͱকདྷੑ

Slide 42

Slide 42 text

KMMͷ՝୊ͱকདྷੑ • ͍͔ͭ͘ͷϓϥοτϑΥʔϜͰ͸UI·Ͱڞ௨Խ͕೉͍͠ • StableͰͳ͍ͷͰϓϩδΣΫτશମͷେ͖ͳมߋ͕ඞཁͱͳΔ৔߹͕͋Δ • Swiftͱͷޓ׵ੑͰਏ͍͜ͱ͕… • Kotlin/NativeͷϏϧυ͕࣌ؒ௕͍ • ίϛϡχςΟ͕·ͩൺֱతখ͍͔͞΋ʁ

Slide 43

Slide 43 text

• ͍͔ͭ͘ͷϓϥοτϑΥʔϜͰ͸UI·Ͱڞ௨Խ͕೉͍͠ • StableͰͳ͍ͷͰϓϩδΣΫτશମͷେ͖ͳมߋ͕ඞཁͱͳΔ৔߹͕͋Δ • Swiftͱͷޓ׵ੑͰਏ͍͜ͱ͕… • Kotlin/NativeͷϏϧυ͕࣌ؒ௕͍ • ίϛϡχςΟ͕·ͩൺֱతখ͍͔͞΋ʁ • ͍͔ͭ͘ͷϓϥοτϑΥʔϜͰ͸UI·Ͱڞ௨Խ͕೉͍͠ FUTURE? KMMͷ՝୊ͱকདྷੑ

Slide 44

Slide 44 text

• ͍͔ͭ͘ͷϓϥοτϑΥʔϜͰ͸UI·Ͱڞ௨Խ͕೉͍͠ • StableͰͳ͍ͷͰϓϩδΣΫτશମͷେ͖ͳมߋ͕ඞཁͱͳΔ৔߹͕͋Δ • Swiftͱͷޓ׵ੑͰਏ͍͜ͱ͕… • Kotlin/NativeͷϏϧυ͕࣌ؒ௕͍ • ίϛϡχςΟ͕·ͩൺֱతখ͍͔͞΋ʁ FUTURE? • Swiftͱͷޓ׵ੑͰਏ͍͜ͱ͕… https://youtrack.jetbrains.com/issue/KT-49521 KMMͷ՝୊ͱকདྷੑ

Slide 45

Slide 45 text

• ͍͔ͭ͘ͷϓϥοτϑΥʔϜͰ͸UI·Ͱڞ௨Խ͕೉͍͠ • StableͰͳ͍ͷͰϓϩδΣΫτશମͷେ͖ͳมߋ͕ඞཁͱͳΔ৔߹͕͋Δ • Swiftͱͷޓ׵ੑͰਏ͍͜ͱ͕… • Kotlin/NativeͷϏϧυ͕࣌ؒ௕͍ • ίϛϡχςΟ͕·ͩൺֱతখ͍͔͞΋ʁ KEEP GOING https://youtrack.jetbrains.com/issue/KT-49521 • Kotlin/NativeͷϏϧυ͕࣌ؒ௕͍ KMMͷ՝୊ͱকདྷੑ

Slide 46

Slide 46 text

• ͍͔ͭ͘ͷϓϥοτϑΥʔϜͰ͸UI·Ͱڞ௨Խ͕೉͍͠ • StableͰͳ͍ͷͰϓϩδΣΫτશମͷେ͖ͳมߋ͕ඞཁͱͳΔ৔߹͕͋Δ • Swiftͱͷޓ׵ੑͰਏ͍͜ͱ͕… • Kotlin/NativeͷϏϧυ͕࣌ؒ௕͍ • ίϛϡχςΟ͕·ͩൺֱతখ͍͔͞΋ʁ KEEP GOING https://github.com/dropbox/AffectedModuleDetector • Kotlin/NativeͷϏϧυ͕࣌ؒ௕͍ KMMͷ՝୊ͱকདྷੑ ABEMAͰ͸ɼdropbox/AffectedModuleDetectorΛ Kotlin MultiplatformͰར༻Ͱ͖ΔΑ͏ʹͯ͠ɼมߋӨڹ ͷ͋ΔϞδϡʔϧͷΈΛϏϧυ͍ͯ͠Δ

Slide 47

Slide 47 text

࠷ۙͷτϐοΫε

Slide 48

Slide 48 text

Hierarchical Project Structure • ϓϥοτϑΥʔϜͷιʔεηοτΛ·ͱΊΔ͜ͱ͕Մೳʹ • Kotlin 1.4.0͔ΒಋೖՄೳ • Kotlin 1.6.20͔Β৽نϓϩδΣΫτ࡞੒ͷࡍʹσϑΥϧτͰઃఆ͞ΕΔΑ͏ʹ commonMain androidMain iosArm64Main iosX64Main commonMain androidMain iosArm64Main iosX64Main iosMain No Hierarchical Hierarchical https://kotlinlang.org/docs/multiplatform-hierarchy.html

Slide 49

Slide 49 text

Hierarchical project structure • gradle.propertiesͰઃఆ • ґଘ͍ͯ͠ΔϥΠϒϥϦ͕ରԠ͍ͯ͠ͳ͍৔߹͸ɼiosMain ͱ͍ͬͨڞ௨ιʔεηοτͰϥΠϒϥϦΛ࢖༻Ͱ͖ͳ͍ ࢀߟจݙɿhttps://kotlinlang.org/docs/multiplatform.html#how-kotlin-multiplatform-works ରԠ͢Δʹ͸ʁ kotlin.mpp.enableGranularSourceSetsMetadata=true kotlin.native.enableDependencyPropagation=false https://kotlinlang.org/docs/multiplatform-hierarchy.html

Slide 50

Slide 50 text

Hierarchical project structure ࢀߟจݙɿhttps://kotlinlang.org/docs/multiplatform.html#how-kotlin-multiplatform-works Lean More? https://youtu.be/5QPPZV04-50

Slide 51

Slide 51 text

Kotlin/Native Memory Management • ݻ༗ͷϧʔϧ • ϧʔϧ1ɿMutable State == 1 thread • ϧʔϧ2ɿImmutable State == many thread • Immutable State != val • ϥϯλΠϜͰෆมͳঢ়ଶʢfrozen stateʣͰ͋Δ͜ͱ͕ٻΊΒΕΔ • freeze()Ͱ͋ΒΏΔΠϯελϯεΛfreezeͰ͖Δ https://kotlinlang.org/docs/multiplatform-mobile-concurrency-overview.html Kotlin/NativeͷϚϧνεϨουϓϩάϥϛϯάͷ՝୊

Slide 52

Slide 52 text

Kotlin/Native Memory Management • ղܾࡦ • AtomicXxxΛ࢖༻͢Δ • Thread-isolate stateΛ࢖༻͢Δ ImmutableͰͳ͍ͱෳ਺εϨουͰѻ͑ͳ͍ʁ https://kotlinlang.org/docs/multiplatform-mobile-concurrent-mutability.html

Slide 53

Slide 53 text

ͱ͸͍͑ɼKotlin/NativeͷͨΊʹ ରԠ͕ඞཁʹͳΔͷਏ͍… 🥲 AtomicReferenceͷϝϞϦϦʔΫͷ໰୊΋͋Δ… 🥲

Slide 54

Slide 54 text

New Kotlin/Native Memory Management • Reference-counting GC → Tracing GC ※ ࠓޙΞϧΰϦζϜ͕มΘΔՄೳੑ΋͋Δ • ฒߦͰͷGC͕Մೳʹ • freeze()͕ෆཁʹͳΔ • AtomicReference͸Ҿ͖ଓ͖ඞཁ • AtomicReferenceΛؚΜͩ॥؀ࢀরʹΑΔϝϞϦϦʔΫͷ৺഑͸ແ͘ͳͬͨ • Kotlin 1.6.20͔ΒexperimentalͳNew Memory Manager͕࢖༻Մೳ • GCͷύϑΥʔϚϯεʹ·ͩ໰୊͋Γ • Kotlin 1.7.0Ͱalphaʹ New Memory ManagementͰͲ͏ͳΔ͔ https://blog.jetbrains.com/kotlin/2021/05/kotlin-native-memory-management-update/

Slide 55

Slide 55 text

New Kotlin/Native Memory Management • ϚΠάϨʔγϣϯΨΠυ • https://github.com/JetBrains/kotlin/blob/master/kotlin-native/NEW_MM.md • ϥΠϒϥϦ • kotlinx.coroutines • 1.6.0Ҏ߱ɼnative-mtόʔδϣϯΛ࢖༻͠ͳͯ͘ྑ͘ͳΔ • ktor • 2.0.0Ҏ߱͸New memory managementʹରԠ͢Δඞཁ͕͋Δ New Memory ManagementΛࢼ͢

Slide 56

Slide 56 text

Kotlin roadmap update https://kotlinlang.org/docs/roadmap.html • KMM Beta ʹ޲͚ͯ҆ఆੑΛߴΊ͍ͯ͘ಈ͖ • AGPͱͷ࿈ܞ͕ڧԽ͞Εͦ͏ʁ (KT-52599)

Slide 57

Slide 57 text

Kotlin roadmap update https://kotlinlang.org/docs/roadmap.html • Swift΁ͷ௚઀ม׵͸Ұ౓pending͞Εͨ (KT-49521) • Ϟδϡʔϧ͝ͱͷ໊લۭؒΛ࡞੒͢Δಈ͖͕ਐΈͦ͏ (KT-42248)

Slide 58

Slide 58 text

Have a Nice Kotlin!