Cluster, Inc. All Rights Reserved. 2
ҙ
2022/09࣌Ͱͷ
ใΛݩʹൃද͓ͯ͠Γ·͢
ࢥ͍ΛͤΔ༰ͳͷͰओ؍ؚ·Ε͓ͯΓ·͢
Context Receiversݱࡏprototypeஈ֊Ͱ͢
ྃ͝ঝ͍ͩ͘͞
Slide 3
Slide 3 text
Cluster, Inc. All Rights Reserved. 3
ࣗݾհ
@uzzu
Cluster, Inc.
ιϑτΣΞΤϯδχΞ
झຯ: VR, ࡶଟͳٕज़ݕূ, ಡॻ, DTM, ֨ήʔ, εϓϥ
Slide 4
Slide 4 text
Cluster, Inc. All Rights Reserved. 4
ClusterͷAndroidΞϓϦʹ͍ͭͯ
AndroidΞϓϦ ࠾༻ใ
AndroidΞϓϦΤϯδχΞืू
⬆ inroom (Unity as a Library)
⬅︎
outroom (Native App)ɹɹɹ
Slide 5
Slide 5 text
Cluster, Inc. All Rights Reserved. 5
ΞδΣϯμ
ɾContext Receivers͕དྷΔ·Ͱͷ͓͞Β͍
ɾContext Receiversͱɺ༻ྫ
ɾContext Receiversͷ՝ɺࢥ͍
ɾ·ͱΊ
Slide 6
Slide 6 text
Cluster, Inc. All Rights Reserved. 6
ContextReceivers͕དྷΔ·Ͱͷ͓͞Β͍
KEEP(https://github.com/Kotlin/KEEP)
YouTrack(https://youtrack.jetbrains.com/)
Kotlin Slack(https://kotlinlang.slack.com/)
͍͔ͭ͋͘Δ͕ͦͷதͰ2ͭͷissueΛൈਮ
Slide 7
Slide 7 text
Cluster, Inc. All Rights Reserved. 7
Compile-time Extension Interfaces
https://github.com/Kotlin/KEEP/pull/87
2017/10ࠒ
ɾ࠷ॳظʮType Classesʯͱ͍͏λΠτϧͰproposal͕ॻ͔Ε͍ͯͨ
ɾʮ͍ͭʹKotlinʹܕΫϥε͕དྷΔ…?!ʯͱ͍͏ࣄͰք۾Γ্͕Δ
Slide 8
Slide 8 text
Cluster, Inc. All Rights Reserved. 8
Compile-time Extension Interfaces
https://github.com/Kotlin/KEEP/pull/87
Slide 9
Slide 9 text
Cluster, Inc. All Rights Reserved. 9
Compile-time Extension Interfaces
https://github.com/Kotlin/KEEP/pull/87
ɾcompanion objectͱͷׂͷॏෳ
ɾJVMͱͷ૬ޓӡ༻
ɾෳͷϨγʔόʹର͢Δ֦ுߏจ͕ඞཁ
ɾimplicit parameterͷ͠͞
ɾetc…
Slide 10
Slide 10 text
Cluster, Inc. All Rights Reserved. 10
Multiple receivers on extension functions/properties
https://youtrack.jetbrains.com/issue/KT-10468
https://youtrack.jetbrains.com/issue/KT-42435
Slide 11
Slide 11 text
Cluster, Inc. All Rights Reserved. 11
ͦͯ͠Context Receivers
https://github.com/Kotlin/KEEP/issues/259
https://github.com/Kotlin/KEEP/blob/master/proposals/context-
receivers.md
ឯ༨ۂંʹ͍ͭͯProposalʹॻ͔Ε͍ͯΔ
(Alternative approaches and design tradeoffs)
1.6.20-M1 ʹͯPrototypeͱͯ͠ϦϦʔε
https://blog.jetbrains.com/kotlin/2022/02/kotlin-1-6-20-m1-
released/
freeCompilerArgs = listOf("-Xcontext-receivers")
Slide 12
Slide 12 text
Cluster, Inc. All Rights Reserved. 12
Context ReceiversͷGoal (ͷ͏ͪ2͚ͭͩհ)
ɾίϯςΩετநԽΛهड़͢ΔͨΊͷ
ɹmember extension(ϝϯόʔ֦ு)ΛऔΓআ͘
Slide 13
Slide 13 text
Cluster, Inc. All Rights Reserved. 13
Context ReceiversͷGoal (ͷ͏ͪ2͚ͭͩհ)
Slide 14
Slide 14 text
Cluster, Inc. All Rights Reserved. 14
Context ReceiversͷGoal (ͷ͏ͪ2͚ͭͩհ)
Slide 15
Slide 15 text
Cluster, Inc. All Rights Reserved. 15
Context ReceiversͷGoal (ͷ͏ͪ2͚ͭͩհ)
Slide 16
Slide 16 text
Cluster, Inc. All Rights Reserved. 16
Context ReceiversͷGoal (ͷ͏ͪ2͚ͭͩհ)
ɾKotlinͷܕγεςϜͰෳͷϨγʔόΛ࣋ͭ
ɹίʔυϒϩοΫΛදݱͰ͖ΔΑ͏ʹ͢Δ
Slide 17
Slide 17 text
Cluster, Inc. All Rights Reserved. 17
Context Receiversͷͦͷଞͷྫ
ɾίϯετϥΫλͷӅṭ + Contextࢀর
Slide 18
Slide 18 text
Cluster, Inc. All Rights Reserved. 18
Context Receiversͷͦͷଞͷྫ
ɾOverloading(※ҙ͋Γ)
͜͏͍͏ίʔυॻ͔ͳ͍Ͱɺͳ༰Proposalʹهࡌ͞Ε͍ͯΔ
(contexts-and-coding-style)
Slide 19
Slide 19 text
Cluster, Inc. All Rights Reserved. 19
ɾContext Functionͷείʔϓ֊ͷਂ͞(ݕ౼த)
ɾReflectionະରԠ(Prototypeஈ֊ͰΒͳͦ͏ͳؾ͕)
ɾΤοδέʔεͷରԠ (Kotlin 1.8.0ͰҰ෦मਖ਼ࡁ)
ɾSyntax Highlighting(Τϥʔు͘ͷͰےͰ)
ɾetc…
Context Receiversͷ՝(Future Work)
Slide 20
Slide 20 text
Cluster, Inc. All Rights Reserved. 20
(ϓϩτλΠϓஈ֊Ͱͱ͔͍͘͏͖
Ͱͳ͍ͷঝͰ)
ɾهड़ͷબࢶ͕ଟͯ͋͘Μ·Γࠓ·ͰͷKotlinΒ͘͠ͳ͍Α͏ͳؾ͕͢Δͷ͕
ɹݸਓతʹٯʹ໘ന͍
ɾCompile-time extensionํ໘Ͱ্͕ͬͨ՝͔ΒݟΔʹՄೳͳهड़
ɹ͜Ε͔ΒߜΒΕ͍ͯͬͯཉ͍͠ͳʔͱࢥ͍ͬͯΔ
ɹ(ཞ༻͕ාͯ͘ਂ͘৮Εͳ͍ਓʑ͕͍ͦ͏ͳͷ͍ͬͨͳ͍ɺͱ͍͏ҙຯͰ)
ɾݱঢ়Ͱᙱ͍ͱ͜Ζʹख͕ಧ͘ͷͰݸਓతʹॿ͔Δ
Context Receiversͷࢥ͍
Slide 21
Slide 21 text
Cluster, Inc. All Rights Reserved. 21
Context Receiversͷࢥ͍
ɾͦͦͳͥ ”Context” ʹͳͬͨͷ͔…ʁ
ɹ=> Multiple receiversͷϓϩτλΠϓͷஈ֊Ͱ
ɹɹύϥϝʔλΛஔ͖͑ΔͨΊʹ͋ΔΘ͚Ͱͳ͘
ɹɹؔݺͼग़͠ͷͨΊͷίϯςΩετΛՃ͢Δҝͷ
ɹɹઃܭ͕ඞཁͩͱؾ͍ͮͨҝ
ɹɹ=> ύϥϝʔλͷΘΓʹ༻͢Δ߹ʹ
ɹɹɹهड़͕ʹͳΔΑ͏͍͑ͯͯ͠Δ
ɹɹɹ=> ཞ༻͞Εͳ͍Α͏ʹ
https://youtrack.jetbrains.com/issue/KT-10468/Multiple-receivers-on-extension-functionsproperties#focus=Comments-27-4608759.0-0
Slide 22
Slide 22 text
Cluster, Inc. All Rights Reserved. 22
Context Receiversͷࢥ͍
ɾͦͦͳͥ ”Context” ʹͳͬͨͷ͔…ʁ
ɹ=> Multiple receiversͷϓϩτλΠϓͷஈ֊Ͱ
ɹɹύϥϝʔλΛஔ͖͑ΔͨΊʹ͋ΔΘ͚Ͱͳ͘
ɹɹؔݺͼग़͠ͷͨΊͷίϯςΩετΛՃ͢Δҝͷ
ɹɹઃܭ͕ඞཁͩͱؾ͍ͮͨҝ
ɹɹ=> ύϥϝʔλͷΘΓʹ༻͢Δ߹ʹ
ɹɹɹهड़͕ʹͳΔΑ͏͍͑ͯͯ͠Δ
ɹɹɹ=> ཞ༻͞Εͳ͍Α͏ʹ
https://youtrack.jetbrains.com/issue/KT-10468/Multiple-receivers-on-extension-functionsproperties#focus=Comments-27-4608759.0-0
ͻΐͬͱͯ͠ਅ໘ʹimplicit parameterʹcode generationͳΓͰ
ͪΌΜͱରԠͰ͖ΔΑ͏ʹɺ༨നͱ͍ͯͯ͠͠ΔͷͩΖ͏͔…ʁ
ؾʹͳΔ…ͦΘͦΘ…ৄ͍͠ਓڭ͍͑ͯͩ͘͞
Slide 23
Slide 23 text
Cluster, Inc. All Rights Reserved. 23
·ͱΊ
ɾContext ReceiversܕΫϥεͷProposal͔Β
ɹෳͷϨγʔόʹର͢Δ֦ுߏจ͕ඞཁͱ͍͏
ɹྲྀΕͰ࡞ΒΕͨ
ɾKotlinʹͯࣗ͘͠͠༝ͷߴ͍Proposal
ɾָ͍͠ͷࠓ͚͔ͩ…ʁ
ɹProposalΛಡΜͰָ͘͠ɹ ʂ