Slide 1

Slide 1 text

iOSDC JAPAN 2017 #1349 ARC vs. GCʁARC in GCʁ @S_Shimotori

Slide 2

Slide 2 text

ͩΕʁ • @S_Shimotori / @S_Shimotori_pub • ϞϥτϦΞϜ ֶੜ • Swift͕޷͖ͳͷͰSwiftΛॻ͍͍ͯ·͢ • SPMΛ΍ͬͨΓiOSΛ΍ͬͨΓ͠·͢

Slide 3

Slide 3 text

ARC vs. GC ʘŲōŘŕ!!ʗ

Slide 4

Slide 4 text

ਓྨ͸ARCͱGCΛൺֱ͕ͪ͠ • GCΛ΍ΊͯARCʹ͠·͢ - Apple Guides and Sample Code[1] • ARCͱGCͷҧ͍ͬͯͳʹ - Stack Overflow[2] • ARC͔ΒGCʹม͑ͨ΄͏͕͍͍Μ͡Όͳ͍ͷ - Swift evolution[3] [1] https://developer.apple.com/library/content/releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html [2] https://stackoverflow.com/questions/7874342/what-is-the-difference-between-objective-c-automatic-reference-counting-and-garb [3] https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20160208/009403.html 4

Slide 5

Slide 5 text

• ͋ͷJVM͕࠾༻ͨ͠ϝϞϦ؅ཧํ๏ • ώʔϓྖҬΛෳ਺(youngྖҬͱoldྖҬͳͲ)ʹ෼͚ͯ࢖͏ • youngྖҬ͔Βॱ൪ʹ࢖͍ͬͯ͘ • શྖҬΛ࢖͍੾ͬͨ࣌ͷϑϧGC͕ා͍ • JVMʹ͸ΨϕʔδίϨΫλ͕ෳ਺༻ҙ͞Ε͍ͯΔ • ༻్ʹ߹ͬͨΞϧΰϦζϜͷ΋ͷΛ࢖͏ ΈΜͳେ޷͖ʮΨϕʔδίϨΫγϣϯʯ 5 ͦΕΛGCͬͯݴ͍͍ͬͯͷʁʁ ❌

Slide 6

Slide 6 text

͜Ε͕ຊ౰ͷΨϕʔδίϨΫγϣϯʂ • ࣗಈͰෆཁͳΦϒδΣΫτΛ୳͠ϝϞϦΛղ์͢Δ • ϝϞϦղ์ͷλΠϛϯάΛߟ͑ͳͯ͘Α͍ • ͍ͭͰʹϝϞϦྖҬΛ੔ཧ͢Δ͜ͱ΋͋Δ • ํ๏ͷҟͳΔ3छͷΨϕʔδίϨΫλ͕͋Δ • ࢀরΧ΢ϯτ • ϚʔΫΞϯυεΠʔϓ • ίϐʔGC • ୯ʹGCͱݺΜͩ৔߹͸τϨʔγϯάίϨΫλΛࢦ͢ • JVMͷGC΋τϨʔγϯάίϨΫλͷҰछ(ੈ୅ผGC) } τϨʔγϯάίϨΫλ 6

Slide 7

Slide 7 text

ARC͸GCͱରཱ͢Δ͠
 GCͷҰछͰ΋͋Δ

Slide 8

Slide 8 text

ͱ͜ΖͰɼ

Slide 9

Slide 9 text

Cyclone/Rustͷ ॴ༗ݖϞσϧɼ ਅࣅͪ͠Ό͓͏

Slide 10

Slide 10 text

࠾༻͍ͯ͠ΔϝϞϦ؅ཧํ๏Ͱ ௒ͬ͘͟Γ Θ͚ͯΈͨ खಈ C ಈతࣗಈ (޿ٛͷGC) ࢀরΧ΢ϯτ τϨʔγϯάίϨΫλ(ڱٛͷGC) Swift/ObjC Java Ruby D ※ݴޠࣗ਎ʹGC͕ͳ͍΋ͷͰ΋ϥΠϒϥϦ͕࡞ΒΕ͍ͯΔ͜ͱ͕͋Δɽ ※ओʹ࢖͍ͬͯΔํ๏ͷΈͰ෼͚ͨͷͰʮ௒ͬ͘͟ΓʯɽCyclone΋GCΛ෦෼తʹ࢖͍ͬͯΔ͠ɼJava΋੩తղੳΛ͍ͯ͠Δɽ OCaml .NET C++ LISP Pascal ੩తࣗಈ 10 Cyclone Python Rust

Slide 11

Slide 11 text

CycloneͱRust͸ ϝϞϦ؅ཧͷେઌഐʂ

Slide 12

Slide 12 text

·ͱΊ

Slide 13

Slide 13 text

·ͱΊ • ARC͸GCͱൺֱ͞ΕΔ͠ɼGCͷҰһͰ΋͋Δ • ޿ٛͷGCͱڱٛͷGCͰࢦ͍ͯ͠Δ΋ͷ͕ҧ͏ • Cyclone΋Rust΋ϝϞϦ؅ཧ໰୊ʹऔΓ૊ΜͰ͖ͨେઌഐ • ઌഐݴޠͷऔΓ૊Έ͕ͱͯ΋ࢀߟʹͳΔ͔΋ 13

Slide 14

Slide 14 text

͓͠·͍ʂ

Slide 15

Slide 15 text

ࢀߟจݙ • ΨϕʔδίϨΫγϣϯͱ͸ͳΜͧ΍ɽ • ൧໺୎ݟʰΨϕʔδίϨΫγϣϯͷ࣮૷๏ͱධՁʱɼ(ࢀর2017-09-11)ɽ • ԕ౻හ෉ʮҰൠڭཆͱͯ͠ͷGarbage Collection (ίϯύΠϥԋश൪֎ฤ)ʯɼ(ࢀর2017-09-11)ɽ • ΑͦͷݴޠͰͷϝϞϦ؅ཧઓུ • Scott Oaksஶ(2015)ʰJavaύϑΥʔϚϯεʱ຀໺૱༁ɼגࣜձࣾΦϥΠϦʔɾδϟύϯɽ • ੨໦ๆ࿠ʰRubyιʔείʔυ׬શղઆʱɼ(ࢀর2017-09-11)ɽ • OCamlʰΨϕʔδίϨΫγϣϯ – OCamlʱɼ(ࢀর2017-09-11)ɽ • MicrosoftʰGarbage Collectionʱɼ(ࢀর2017-09-11)ɽ • Jeffrey Richterஶ(2013)ʰϓϩάϥϛϯά .NET Framework ୈ4൛ʱ౻ݪ༤հ༁ɼ೔ܦBPࣾɽ • Digital MarsʰΨϕʔδίϨΫγϣϯ - ϓϩάϥϛϯάݴޠ D (೔ຊޠ༁)ʱɼ(ࢀর2017-09-11)ɽ • naruseʰRuby 2.2.0 ϦϦʔεʱɼ(ࢀর2017-09-11)ɽ • CycloneʰCyclone: User Manualʱɼ(ࢀর2017-09-12)ɽ • Robert C. Seacordஶ(2014)ʰC/C++ηΩϡΞίʔσΟϯά ୈ2൛ʱՎ୅࿨ਖ਼΄͔༁ɼגࣜձࣾKADOKAWAɽ • Richard Reeseஶ(2013)ʰৄઆ CϙΠϯλʱ٠஑জ༁ɼגࣜձࣾΦϥΠϦʔɾδϟύϯɽ • Pythonʰcpython/gcmodule.c at 2ebc5ce42a8a9e047e790aefbf9a94811569b2b6 · python/cpythonʱɼ(ࢀর2017-09-13)ɽ • Neil SchemenauerʰGarbage Collection for Pythonʱɼ(ࢀর2017-09-13)ɽ

Slide 16

Slide 16 text

ࢀߟจݙ • Swiftͷߦ͘຤΍͍͔ʹɽ • Appleʰswift/OwnershipManifesto.md at fa2f2bd4577e536130f9298fabfd2960a357693c · apple/swiftʱɼ(ࢀর2017-09-11)ɽ • Appleʰswift-evolution/0176-enforce-exclusive-access-to-memory.md at b9d815099453912069998b579948a3319246042b · apple/swift-evolutionʱɼ(ࢀর 2017-09-11)ɽ • Appleʰ [swift-evolution] RFC: Preventing Retain Cycles (Memory Ownership Model)ʱɼ(ࢀর2017-09-12)ɽ • ૉࡐ • TopeconHeroesʰਧ͖ग़͠ૉࡐઐ໳αΠτʮϑΩμγσβΠϯʯʱɼ(ࢀর2017-09-11)ɽ

Slide 17

Slide 17 text

εϥΠυʹࡌͤͳ͔ͬͨ࿩͚ͩͲಡΜͩΒ໘ന͍͔΋ • ΋ͬͱGCΛษڧ͢Δ • ౦ژେֶ৘ใՊֶՊʰIndex of Compiler Resumeʱɼ(ࢀর2017-09-16)ɽ • ాӜ ݈࣍࿕ʮϓϩάϥϛϯάݴޠ 6 ΨϕʔδίϨΫγϣϯ(2)ʯɼ(ࢀর2017-09-16)ɽ • ੈͷதʹ͸·ͩͨ͘͞Μͷݴޠ͕͋Δ • garicchiʰComponent Object Model(COM)ͱ͸Կ͔ ·ͱΊΔ – garicchi.comʱɼ(ࢀর2017-09-13)ɽ • தౡେҰʰGolangͷGCΛ௥͏ | SOTAʱɼ(ࢀর2017-09-11)ɽ • ໦ຊ༟لʰPerlͷΨʔϕοδίϨΫγϣϯ(GC)ͷಛੑʹ͍ͭͯ - PerlͳΒαϯϓϧίʔυPerlೖ໳ʱɼ(ࢀর 2017-09-11)ɽ • ໦ຊ༟لʰʮϦϑΝϨϯεΧ΢ϯτࣜͷGCʯ͸ɺITքͰ͸GCͱೝࣝ͞Ε͍ͯͳ͍ͷͩΖ͏͔? - Qiitaʱɼ(ࢀর 2017-09-11)ɽ • ʰΨʔϕδίϨΫγϣϯ - ݴޠผGCͷ࢓૊Έ(31402)ʛteratailʱɼ(ࢀর2017-09-12)ɽ • SwiftͲ͏ͳΔͷ • খ໺ক೭ʰSwift 3ͷ։ൃͷৼΓฦΓͱSwift 4ͷܭը͕ه͞Εͨϝʔϧͷ঺հ - Qiitaʱɼ(ࢀর2017-09-12)ɽ • দؗେًʰSwift5ͷٞ࿦͕ελʔτ:ABIͷ҆ఆԽɺฒߦॲཧɺݴޠͷਐԽϓϩηεͷมߋ – Daiki Matsudate – Mediumʱɼ(ࢀর2017-09-12)ɽ