Slide 1

Slide 1 text

גࣜձࣾαΠόʔΤʔδΣϯτ ᅳࢣ੣໵!SPOOOOO@KQ ,PUMJO/BUJWFͷ/FX.FNPSZ .BOBHFSʹҠߦ͠Α͏

Slide 2

Slide 2 text

,PUMJO.VMUJQMBUGPSN.PCJMF#FUB )JTUPSZPG/FX.FNPSZ.BOBHFS 8IZ/FX.FNPSZ.BOBHFS/FFEFE $PODVSSFODZPO0ME.FNPSZ.BOBHFS (BSCBHF$PMMFDUPS"MHPSJUIN .FNPSZ.BOBHFS"QQSPBDI /FX.FNPSZ.BOBHFS7FSTJPOT .JHSBUFUP/FX.FNPSZ.BOBHFS /FX.FNPSZ.BOBHFS'FBUVSFT

Slide 3

Slide 3 text

,PUMJO.VMUJQMBUGPSN.PCJMF#FUB

Slide 4

Slide 4 text

IUUQTZPVUVCF$OH,%(#M'YL

Slide 5

Slide 5 text

,PUMJO.VMUJQMBUGPSN.PCJMF#FUB ɾ,PUMJO/BUJWF/FX.FNPSZ.BOBHFS ɾ,PUMJO/BUJWFCJOBSZDPNQBUJCJMJUZ ɾ)JFSBSDIJDBMQSPKFDUTUSVDUVSFTVQQPSU ɾ"QQMFJOUFHSBUJPOUPPMJOH ɾ/FXNVMUJQMBUGPSNCVJMEUPPMJOHBSDIJUFDUVSF ʜ IUUQTZPVUVCF-&%Z9$-YL

Slide 6

Slide 6 text

,PUMJO.VMUJQMBUGPSN.PCJMF#FUB IUUQTZPVUVCF-&%Z9$-YL ɾ,PUMJO/BUJWF/FX.FNPSZ.BOBHFS ɾ,PUMJO/BUJWFCJOBSZDPNQBUJCJMJUZ ɾ)JFSBSDIJDBMQSPKFDUTUSVDUVSFTVQQPSU ɾ"QQMFJOUFHSBUJPOUPPMJOH ɾ/FXNVMUJQMBUGPSNCVJMEUPPMJOHBSDIJUFDUVSF ʜ

Slide 7

Slide 7 text

,PUMJO.VMUJQMBUGPSN.PCJMF#FUB IUUQTZPVUVCF-&%Z9$-YL IUUQTCMPHKFUCSBJOTDPNLPUMJOLNNCFUB

Slide 8

Slide 8 text

)JTUPSZPG/FX.FNPSZ.BOBHFS

Slide 9

Slide 9 text

+VMZ .BZ "VHVTU 4FQUFNCFS )JTUPSZPG/FX.FNPSZ.BOBHFS .BZ

Slide 10

Slide 10 text

IUUQTCMPHKFUCSBJOTDPNLPUMJOLPUMJOOBUJWFNFNPSZNBOBHFNFOUSPBENBQ ɾ,PUMJO/BUJWFͷ৽͍͠.FNPSZ.BOBHFS Λ։ൃ͢ΔܭըΛൃද ɾ͜Ε·Ͱͷ.FNPSZ.BOBHFSͷ࢓૊Έͷ࠾ ༻ཧ༝΍໰୊఺ʹ͍ͭͯ΋ݴٴ )JTUPSZPG/FX.FNPSZ.BOBHFS +VMZ .BZ "VHVTU 4FQUFNCFS .BZ

Slide 11

Slide 11 text

IUUQTCMPHKFUCSBJOTDPNLPUMJOLPUMJOOBUJWFNFNPSZNBOBHFNFOUVQEBUF ɾ৽͍͠.FNPSZ.BOBHFSͷਐḿͱͦͷ (BSCBHF$PMMFDUPSͷઃܭํ਑Λެ։ ɾ࠾༻Ξϓϩʔνͱ࣮૷ܭը΋ڞ༗ )JTUPSZPG/FX.FNPSZ.BOBHFS +VMZ .BZ "VHVTU 4FQUFNCFS .BZ

Slide 12

Slide 12 text

IUUQTCMPHKFUCSBJOTDPNLPUMJOUSZUIFOFXLPUMJOOBUJWFNFNPSZNBOBHFSEFWFMPQNFOUQSFWJFX ɾ%FWFMPQNFOU1SFWJFXΛެ։ ,PUMJO. ɾ"MQIB൛Λެ։ ,PUMJO )JTUPSZPG/FX.FNPSZ.BOBHFS +VMZ .BZ "VHVTU 4FQUFNCFS .BZ

Slide 13

Slide 13 text

)JTUPSZPG/FX.FNPSZ.BOBHFS IUUQTZPVUVCF0(OQPX+H& U ɾ,PUMJOͰ/FX.FNPSZ.BOBHFS͕ 
 σϑΥϧτͰ༗ޮʹ ɾ/FX.FNPSZ.BOBHFSͱ,PUMJO.VMUJQMBUGPSN .PCJMF͕#FUBʹ +VMZ .BZ "VHVTU 4FQUFNCFS .BZ

Slide 14

Slide 14 text

8IZ/FX.FNPSZ.BOBHFS/FFEFE

Slide 15

Slide 15 text

8IZ/FX.FNPSZ.BOBHFS/FFEFE ,PUMJO.VMUJQMBUGPSNͷڧΈ͸ʁ ɾ1MBUGPSNؒͷ࣮૷Λڞ௨ԽͰ͖Δ ɾ֤1MBUGPSNΛؾʹ͢Δͷ͸ɺಛ༗ͷ"1*Λ࢖࣮ͬͯ૷͢Δ৔߹ DPNNPO.BJO BOESPJE.BJO JPT.BJO

Slide 16

Slide 16 text

,PUMJO.VMUJQMBUGPSNͷڧΈ͸ʁ ɾฒߦॲཧͷ࣮૷ʹؔͯ͠ɺ,PUMJO/BUJWFಛ༗ͷ͓࡞๏͕ඞཁ ɾLPUMJOYDPSPVUJOFTͰϝϞϦϦʔΫ͕ൃੜ͢Δ͜ͱ͕͋Δ چ.FNPSZ.BOBHFSʹΑΔ੍໿ͱ՝୊ ,PUMJO/BUJWFΛߟྀ࣮ͨ͠૷ɾ։ൃऀମݧ͕ѱ͍ ˠ,PUMJO.VMUJQMBUGPSNͷීٴΛ๦͛Δͱ൑அ 8IZ/FX.FNPSZ.BOBHFS/FFEFE

Slide 17

Slide 17 text

$PODVSSFODZPO0ME.FNPSZ.BOBHFS

Slide 18

Slide 18 text

$PODVSSFODZPO0ME.FNPSZ.BOBHFS ,PUMJO/BUJWFͷϚϧνεϨουॲཧʹ͓͚Δϧʔϧ Մมͳঢ়ଶγϯάϧεϨου ෆมͳঢ়ଶϚϧνεϨου

Slide 19

Slide 19 text

$PODVSSFODZPO0ME.FNPSZ.BOBHFS ɾঢ়ଶ͕ՄมͰ͋Δ৔߹͸ෳ਺εϨου͔Βࢀরɾૢ࡞Ͱ͖ͳ͍ ɾ6*ͷߋ৽͕ϝΠϯεϨουҎ֎͔Βߦ͑ͳ੍͍໿ʹࣅ͍ͯΔ Մมͳঢ়ଶγϯάϧεϨου

Slide 20

Slide 20 text

$PODVSSFODZPO0ME.FNPSZ.BOBHFS ෆมͳঢ়ଶϚϧνεϨου ɾঢ়ଶ͕ෆมͰ͋Ε͹ෳ਺εϨου͔Βࢀরɾૢ࡞Ͱ͖Δ ɾෆมWBM ෆมGSP[FOTUBUF

Slide 21

Slide 21 text

ɾ,PUMJO/BUJWFͰ͸ϥϯλΠϜͰՄมɾෆมΛධՁ͢Δඞཁ͕͋Δ 
 ˠϥϯλΠϜͰෆมͰ͋Δ͜ͱΛࣔ͢GSP[FOTUBUF͕ඞཁʹͳΔ ɾ,PUMJO/BUJWFʹ͓͍ͯ͸ɺ͍͔ͳΔΦϒδΣΫτ΋GSFF[FՄೳ data class SomeData(val s: String, val i: Int) // i is stable data class SomeData(val s: String, val i: SomeInterface) // i is unstable $PODVSSFODZPO0ME.FNPSZ.BOBHFS

Slide 22

Slide 22 text

'SP[FOTUBUFͷಛ௃ ɾঢ়ଶΛม͑Δ͜ͱ͕Ͱ͖ͳ͍ ɾঢ়ଶΛม͑Α͏ͱ͢Δͱ*OWBMJE.VUBCJMJUZ&YDFQUJPO͕ൃੜ͢Δ ɾ'SP[FOTUBUFͷ఻೻ ɾΦϒδΣΫτΛGSFF[F͢ΔͱɺࢠͷΦϒδΣΫτ΋࠶ىతʹGSFF[F $PODVSSFODZPO0ME.FNPSZ.BOBHFS

Slide 23

Slide 23 text

data class MoreData(val strData: String, var width: Float) data class SomeData(val moreData: MoreData, var count: Int) //... val sd = SomeData(MoreData("abc", 10.0), 0) sd.freeze() $PODVSSFODZPO0ME.FNPSZ.BOBHFS

Slide 24

Slide 24 text

GSFF[F ؔ਺ ɾ,PUMJO/BUJWFͷGSFF[F ؔ਺ʹΑͬͯɺΦϒδΣΫτΛGSFF[FͰ͖Δ ɾ೚ҙͷΦϒδΣΫτʹରͯ͠GSFF[F ͨ࣌͠఺ͰɺͦͷΦϒδΣΫτ͕ ࢀর͍ͯ͠ΔΦϒδΣΫτ΋࠶ىతʹGSFF[F͞ΕΔ ɾGSFF[F ͸ෆՄٯૢ࡞ͳͷͰɺVOGSFF[Fͤ͞Δ͜ͱ͸Ͱ͖ͳ͍ $PODVSSFODZPO0ME.FNPSZ.BOBHFS

Slide 25

Slide 25 text

άϩʔόϧΦϒδΣΫτ ɾGSFF[F Λݺ͹ͳͯ͘΋GSFF[F͞ΕΔ ɾ͍͔ͳΔεϨου͔Β΋ΞΫηεͰ͖Δ͕ෆมͰͳ͍ͱ͍͚ͳ͍ $PODVSSFODZPO0ME.FNPSZ.BOBHFS object SomeState { var count = 0 fun add() { count++ //This will throw an exception } }

Slide 26

Slide 26 text

άϩʔόϧΦϒδΣΫτ ɾ!5ISFBE-PDBMΛ࢖͏͜ͱͰෳ਺εϨουͰͷૢ࡞͕Մೳ ɾεϨου͝ͱʹ஋Λίϐʔ͢ΔͨΊεϨου͝ͱʹ஋͕ҟͳΔՄೳੑ $PODVSSFODZPO0ME.FNPSZ.BOBHFS @ThreadLocal object SomeState{ var count = 0 fun add(){ count++ //👍 } }

Slide 27

Slide 27 text

άϩʔόϧϓϩύςΟ ɾWBSͰఆٛͰ͖Δ͕ɺϝΠϯεϨου͔ΒͷΈࢀরɾૢ࡞͕Մೳ $PODVSSFODZPO0ME.FNPSZ.BOBHFS @SharedImmutable ϝΠϯεϨουҎ֎͔Β΋ࢀরͰ͖Δ͕GSFF[F͞ΕΔ @ThreadLocal εϨου͝ͱʹ஋ͷίϐʔΛ࡞੒͢ΔͨΊɺෳ਺εϨ ουͰͷࢀরɾૢ࡞͕Մೳ

Slide 28

Slide 28 text

εϨουηʔϑΛ࣮ݱ͢ΔͨΊʹ $PODVSSFODZPO0ME.FNPSZ.BOBHFS "UPNJDT 5ISFBEJTPMBUFE4UBUF

Slide 29

Slide 29 text

$PODVSSFODZPO0ME.FNPSZ.BOBHFS "UPNJDT ɾ,PUMJO/BUJWFͰ͸ɺ஋ͷมߋ͕Մೳͳ͕ΒGSFF[FͰ͖Δੑ࣭Λ࣋ͬͨ "UPNJD9YYΫϥεΛఏڙ͍ͯ͠Δ ɾ"UPNJD3FGFSFODF͸ɺϦετͷૢ࡞ͱ͍ͬͨಛఆεϨουͰίετ͔ ͔Δૢ࡞Λߦ͏৔߹ʹεϨουηʔϑʹͳΒͳ͍Մೳੑ͕͋Δ

Slide 30

Slide 30 text

$PODVSSFODZPO0ME.FNPSZ.BOBHFS 5ISFBEJTPMBUFE4UBUF ɾՄมͳঢ়ଶΛಛఆͷεϨουʹด͡ࠐΊɺผεϨου͔Βͦͷঢ়ଶʹ ରͯ͠΍ΓͱΓΛߦ͏ ɾҟͳΔεϨουͷ΍ΓͱΓΛಉ͡XPSLRVFVF্Ͱߦ͏͜ͱͰɺεϨ ουηʔϑΛ࣮ݱ

Slide 31

Slide 31 text

"UPNJD3FGFSFODFWT5ISFBEJTPMBUFE4UBUF $PODVSSFODZPO0ME.FNPSZ.BOBHFS ɾγϯϓϧͳ஋΍খ͍͞ΦϒδΣΫτ͸"UPNJD3FGFSFODF͕؆ܿͰѻ͍ ΍͍͢ ɾ஋ͷૢ࡞ʹίετ͕͔͔Δ৔߹΍ϦετͰ͸ɺSBDFDPOEJUJPOΛ๷͙ ͨΊʹ5ISFBEJTPMBUFE4UBUFΛར༻͢Δ

Slide 32

Slide 32 text

$PODVSSFODZPO0ME.FNPSZ.BOBHFS ɾOBUJWFNUϒϥϯνͰ੍໿ʹରԠ࣮ͨ͠૷͕։ൃ͞Ε͍ͯΔ ɾGSFF[Fޙ΋஋ͷมߋ͕Մೳͳ"UPNJD9YYͷ࣮૷Λར༻ LPUMJOYDPSPVUJOFT "UPNJDΫϥεͷࢀরΛ௥੻Ͱ͖ͣɺϝϞϦϦʔΫ͢Δέʔε͕ଘࡏ

Slide 33

Slide 33 text

IUUQTLPUMJOMBOHPSHEPDTOBUJWFJNNVUBCJMJUZIUNM

Slide 34

Slide 34 text

(BSCBHF$PMMFDUPS"MHPSJUIN

Slide 35

Slide 35 text

(BSCBHF$PMMFDUPS"MHPSJUIN 3FGFSFODFDPVOUJOH($ ɾΦϒδΣΫτʹࢀর਺ ϙΠϯλͷ਺ Λ෇ਵ͢Δ ɾࢀর਺ʹͳͬͨΦϒδΣΫτΛճऩ͢Δ

Slide 36

Slide 36 text

SPPU 3FGFSFODFDPVOUJOH($ (BSCBHF$PMMFDUPS"MHPSJUIN

Slide 37

Slide 37 text

SPPU 3FGFSFODFDPVOUJOH($ (BSCBHF$PMMFDUPS"MHPSJUIN

Slide 38

Slide 38 text

SPPU 3FGFSFODFDPVOUJOH($ (BSCBHF$PMMFDUPS"MHPSJUIN

Slide 39

Slide 39 text

SPPU ౸ୡෆೳˠϝϞϦϦʔΫ 3FGFSFODFDPVOUJOH($ (BSCBHF$PMMFDUPS"MHPSJUIN

Slide 40

Slide 40 text

5SBDJOH 5SBWFSTJOH ($ ɾϧʔτ͔ΒϙΠϯλΛͨͲΓɺ౸ୡՄೳͳΦϒδΣΫτΛൃݟ ɾ౸ୡͰ͖ͳ͍ΦϒδΣΫτΛճऩ ɾ͞Βʹ͍͔ͭ͘छྨ͕͋Δ .BSL4XFFQ($ $PQZ($ (BSCBHF$PMMFDUPS"MHPSJUIN

Slide 41

Slide 41 text

SPPU 5SBDJOH 5SBWFSTJOH ($ (BSCBHF$PMMFDUPS"MHPSJUIN

Slide 42

Slide 42 text

SPPU 5SBDJOH 5SBWFSTJOH ($ (BSCBHF$PMMFDUPS"MHPSJUIN

Slide 43

Slide 43 text

SPPU 5SBDJOH 5SBWFSTJOH ($ (BSCBHF$PMMFDUPS"MHPSJUIN

Slide 44

Slide 44 text

SPPU 5SBDJOH 5SBWFSTJOH ($ (BSCBHF$PMMFDUPS"MHPSJUIN

Slide 45

Slide 45 text

3FGFSFODFDPVOUJOHWT5SBDJOH 5SBDJOH 5SBWFSTJOH ($ 3FGFSFODFDPVOUJOH($ ɾ࣮૷͕༰қͰγϯϓϧ ɾࢀর਺ͷมߋΛτϦΨʔʹͰ͖Δ ɾϝϞϦϦʔΫ͕ى͖΍͍͢ ɾ࣮૷͕೉͍͠ ɾޮ཰తʹ($Λ૸ΒͤΔ͜ͱ͕೉͍͠ ɾϝϞϦϦʔΫΛ๷͗΍͍͢

Slide 46

Slide 46 text

.FNPSZ.BOBHFS"QQSPBDI

Slide 47

Slide 47 text

0ME.FNPSZ.BOBHFS"QQSPBDI ɾ؆ܿ͞ͱ͍͏؍఺͔Β࠾༻ ɾ3FGFSFODFDPVOUJOH($ʹΑΔ॥؀ࢀরͷ໰୊͸ɺผͷΞϧΰϦζϜ USJBM EFMFUJPO Λ૊Έ߹ΘͤͯରԠ ɾϝϞϦׂΓ౰͕ͯසൃ͢ΔΞϓϦέʔγϣϯ΍ϚϧνεϨουͱฒߦॲཧ͕ࠞ ࡏ͢ΔΞϓϦέʔγϣϯͰύϑΥʔϚϯε͕γϏΞʹͳΓGSFF[Fͷಋೖ 3FGFSFODFDPVOUJOH($

Slide 48

Slide 48 text

/FX.FNPSZ.BOBHFS"QQSPBDI ɾ3FGFSFODFDPVOUJOHΑΓ΋ॊೈͰνϡʔχϯά͠΍͍͢ ɾϚϧνεϨουΞϓϦέʔγϣϯʹ͓͚Δཁ݅ʹϑΟοτ͠΍͍͢ ɾϥϯλΠϜͱίϯύΠϥͷ࣮૷͕ඇৗʹ೉͍͠ͷ͕ܽ఺ ɾ͞·͟·ͳΞϧΰϦζϜ΍ͦͷ૊Έ߹Θͤͷ($Λར༻Ͱ͖ΔΑ͏ʹ($Λઃܭ 5SBDJOH 5SBWFSTJOH ($

Slide 49

Slide 49 text

/FX.FNPSZ.BOBHFS7FSTJPOT

Slide 50

Slide 50 text

/FX.FNPSZ.BOBHFS7FSTJPOT ɾγϯϓϧͳTUPQUIFXPSMENBSLTXFFQUSBDJOH($Λ࣮૷ ɾGSFF[Fͳ͠ʹ͋ΒΏΔεϨου͔ΒΦϒδΣΫτ΍ϓϩύςΟͷࢀর͕Մೳʹ ɾTUEMJC LPUMJOYDPSPVUJOFT ,UPS$MJFOUͰ/FX.FNPSZ.BOBHFSʹରԠ IUUQTZPVUSBDLKFUCSBJOTDPNJTTVF,51SPUPUZQFBOFXHBSCBHFDPMMFDUPS 1SPUPUZQF ,PUMJO.

Slide 51

Slide 51 text

ɾύϑΥʔϚϯεվળͱ҆ఆੑͷ޲্ ɾ($ͷTXFFQϑΣʔζΛฒߦ࣮ߦՄೳʹ ɾ/FX.FNPSZ.BOBHFS͕༗ޮͳࡍʹGSFF[F͕σϑΥϧτͰແޮʹ IUUQTZPVUSBDLKFUCSBJOTDPNJTTVF,51SPNPUFOFXNFNPSZNBOBHFSUP"MQIB "MQIB ,PUMJO /FX.FNPSZ.BOBHFS7FSTJPOT

Slide 52

Slide 52 text

ɾߋͳΔύϑΥʔϚϯεվળ ɾ($ͷεέδϡʔϥΛޮ཰ԽɺώʔϓαΠζΛεέʔϥϒϧʹ ɾσόοάϏϧυͷόΠφϦΛ࠷దԽ͠࠷େͰͷ࣮ߦ࣌ؒվળ ɾ/FX.FNPSZ.BOBHFS͕σϑΥϧτͰ༗ޮʹ IUUQTZPVUSBDLKFUCSBJOTDPNJTTVF,51SPNPUFOFXNFNPSZNBOBHFSUP#FUBBOEFOBCMFJUCZEFGBVMU #FUB ,PUMJO /FX.FNPSZ.BOBHFS7FSTJPOT

Slide 53

Slide 53 text

.JHSBUFUP/FX.FNPSZ.BOBHFS

Slide 54

Slide 54 text

.JHSBUFUP/FX.FNPSZ.BOBHFS IUUQTHJUIVCDPN+FU#SBJOTLPUMJOCMPCWLPUMJOOBUJWF/&[email protected] ,PUMJO.d kotlin.native.binary.memoryModel=experimental kotlin.targets.withType(KotlinNativeTarget::class.java) { binaries.all { binaryOptions["memoryModel"] = "experimental" } } ɾ/FX.FNPSZ.BOBHFSΛ༗ޮʹ͢ΔͨΊʹͲͪΒ͔ͷઃఆ͕ඞཁ HSBEMFQSPQFSUJFT CVJMEHSBEMFLUT

Slide 55

Slide 55 text

.JHSBUFUP/FX.FNPSZ.BOBHFS IUUQTHJUIVCDPN+FU#SBJOTLPUMJOCMPCWLPUMJOOBUJWF/&[email protected] ɾOBUJWFNUͷόʔδϣϯΛ࢖Θͳ͍͍ͯ͘ LPUMJOYDPSPVUJOFT LUPS OFXNNFBQ ɾσϑΥϧτͷFOHJOFͩͱྫ֎͕ൃੜ͢ΔͷͰɺ*PT͔ͦͷଞͷFOHJOFΛ࢖͏ ,PUMJO.d

Slide 56

Slide 56 text

.JHSBUFUP/FX.FNPSZ.BOBHFS IUUQTHJUIVCDPN+FU#SBJOTLPUMJOCMPCWLPUMJOOBUJWF/&[email protected] ɾγϯάϧεϨου͔ͭTUPQUIFXPSMEͷNBSLTXFFQΞϧΰϦζϜΛ ࠾༻͍ͯ͠ΔͨΊɺύϑΥʔϚϯεʹӨڹ͕ग़Δ ɾίϯύΠϥΩϟογϡ͕αϙʔτ͞Εͯͳ͍ͨΊɺEFCVHόΠφϦͷί ϯύΠϧʹ͕͔͔࣌ؒΔ ,PUMJO.d ஫ҙࣄ߲

Slide 57

Slide 57 text

.JHSBUFUP/FX.FNPSZ.BOBHFS IUUQTLPUMJOMBOHPSHEPDTOBUJWFNJHSBUJPOHVJEFIUNM ɾ/FX.FNPSZ.BOBHFS͸σϑΥϧτͰ༗ޮ ɾ0ME.FNPSZ.BOBHFSΛ࢖͏͜ͱ΋Ͱ͖Δ͕ɺίϯύΠϥΩϟογϡ ͕ޮ͔ͳ͍ͷͰίϯύΠϧ͕࣌ؒ௕͘ͳΔͷͰ஫ҙ HSBEMFQSPQFSUJFT kotlin.native.binary.memoryModel=strict ,PUMJOd

Slide 58

Slide 58 text

.JHSBUFUP/FX.FNPSZ.BOBHFS IUUQTLPUMJOMBOHPSHEPDTOBUJWFNJHSBUJPOHVJEFIUNM ɾGSFF[Fͤͣͱ΋͍͔ͳΔεϨου͔Β΋ΦϒδΣΫτͷ ࢀরɺૢ࡞͕Մೳ ɾ"UPNJD3FGFSFODFΛؚΜͩ॥؀ࢀরͰ͋ͬͯ΋ 
 ϝϞϦϦʔΫ͠ͳ͘ͳͬͨ ɾάϩʔόϧม਺͸஗ԆॳظԽ͞ΕΔΑ͏ʹ 
 !&BHFS*OJUJBMJ[BUJPOͰ஗ԆॳظԽ͞Εͳ͍Α͏ʹͰ͖Δ @SharedImmutable freeze() isFrozen ensureNeverFrozen() ,PUMJOd

Slide 59

Slide 59 text

.JHSBUFUP/FX.FNPSZ.BOBHFS IUUQTLPUMJOMBOHPSHEPDTOBUJWFNJHSBUJPOHVJEFIUNM ɾಛʹϚΠάϨʔγϣϯ͸ෆཁ ɾ͔Β,PUMJOʹґଘ ɾ/FX.FNPSZ.BOBHFSʹؔ͢ΔϚΠάϨʔγϣϯ͸ෆཁ ,PUMJOd LPUMJOYDPSPVUJOFT d LUPS d

Slide 60

Slide 60 text

.JHSBUFUP/FX.FNPSZ.BOBHFS IUUQTLUPSJPEPDTNJHSBUJOHIUNM ,PUMJOd

Slide 61

Slide 61 text

/FX.FNPSZ.BOBHFS'FBUVSFT

Slide 62

Slide 62 text

/FX.FNPSZ.BOBHFS'FBUVSFT IUUQTLPUMJOMBOHPSHEPDTOBUJWFNFNPSZNBOBHFSIUN !4IBSFE*NNVUBCMFͷάϩʔόϧม਺͸GSFF[F͞Εͳ͍͕ɺ GSFF[F ΛݺͿͱGSFF[F͞ΕΔ kotlin.native.binary.freezing=disabled // explicitOnly kotlin.targets.withType(KotlinNativeTarget::class.java) { binaries.all { binaryOptions["freezing"] = “disabled" // “explicitOnly” } } HSBEMFQSPQFSUJFT CVJMEHSBEMFLUT ґଘ͍ͯ͠ΔϥΠϒϥϦ͕GSFF[F͢Δέʔε ,PUMJO.d disabled explicitOnly GSFF[F ΛݺΜͰ΋Կ΋͠ͳ͍

Slide 63

Slide 63 text

IUUQTLPUMJOMBOHPSHEPDTOBUJWFNFNPSZNBOBHFSIUN ɾLPUMJOOBUJWFJOUFSOBM($DPMMFDU Ͱڧ੍తʹಈ࡞ͤ͞Δ͜ͱ͕Ͱ͖Δ ,PUMJOd ($Λ໌ࣔతʹૢ࡞͢Δ ($Λແޮʹ͢Δ ɾςετͳͲ($Λಈ͔ͨ͘͠ͳ͍৔߹͸(SBEMFͷϑϥά 9HDOPPQ Λઃఆ /FX.FNPSZ.BOBHFS'FBUVSFT

Slide 64

Slide 64 text

IUUQTHJUIVCDPNNJDSPTPGUNJNBMMPD ɾ.FNPSZ.BOBHFSͷύϑΥʔϚϯε͸ઈ͑ͣվળ͍ͯ͠ΔͷͰɺ,PUMJOͷό ʔδϣϯΛ্͛ͯվળ͢Δ͔֬ೝ͢Δ ɾͦΕͰ΋վળ͠ͳ͍έʔεͰ͸NJNBMMPDΛར༻ͯ͠ΈΔ HSBEMFQSPQFSUJFT ,PUMJO#FUBҎ߱ ύϑΥʔϚϯε͸͍͍͕৴པੑ͕௿Լ͢ΔՄೳੑ͋Γ kotlin.native.binary.mimallocUseCompaction=true (SBEMFͷίϯύϧΦϓγϣϯ -Xallocator=std ,PUMJOd ($ͷύϑΥʔϚϯεΛௐࠪ͢Δ /FX.FNPSZ.BOBHFS'FBUVSFT

Slide 65

Slide 65 text

IUUQTLPUMJOMBOHPSHEPDTOBUJWFNFNPSZNBOBHFSIUN ɾ(SBEMFͷϑϥά 9SVOUJNFMPHTHDJOGP Ͱ($ͷϩάΛग़͢͜ͱ͕Ͱ͖Δ ɾύϑΥʔϚϯεௐࠪʹಛԽͨ͠ϩάͰ͸ͳ͍ ,PUMJOd ($ͷύϑΥʔϚϯεΛௐࠪ͢Δ /FX.FNPSZ.BOBHFS'FBUVSFT

Slide 66

Slide 66 text

IUUQTLPUMJOMBOHPSHEPDTOBUJWFJPTJOUFHSBUJPOIUNMTVQQPSUGPSCBDLHSPVOETUBUFBOEBQQFYUFOTJPOT ɾσϑΥϧτͰ͸ΞϓϦέʔγϣϯͷঢ়ଶʹґͬͯɺ.FNPSZ.BOBHFSͷৼΔ ෣͍͸มΘΒͳ͍ ɾසൟʹ($Λಈ͔ͨ͘͠ͳ͍έʔεͰɺϝϞϦ࢖༻ྔ͕ඇৗʹଟ͍͚࣌ͩ($͕ ಈ͘Α͏ʹͰ͖Δ HSBEMFQSPQFSUJFT kotlin.native.binary.appStateTracking=enabled ,PUMJOd J04ͷόοΫάϥ΢ϯυঢ়ଶͱ"QQ&YUFOTJPOTͱͷ࿈ܞ /FX.FNPSZ.BOBHFS'FBUVSFT

Slide 67

Slide 67 text

IUUQTLPUMJOMBOHPSHEPDTOBUJWFNFNPSZNBOBHFSIUNM

Slide 68

Slide 68 text

)BWFBOJDF,PUMJO