Slide 1

Slide 1 text

Dartͷഉଞ੍ޚ͓͞Β͍ͯ͠Έͨ 2022.02.22 Mobileษڧձ Wantedly × νʔϜϥϘ Bunjiro Miyoshi

Slide 2

Slide 2 text

About Me • νʔϜϥϘॴଐ • (ࣗশ)ϚϧνϓϥοτϑΥʔϜܳਓ • KMM, Flutter etc... • oura ringΛฆࣦͨ͠γϣοΫͰ৸ࠐΜͩ(ઌि༵ۚ೔ʹ৽͍͠ͷಧ͍ ͨ)

Slide 3

Slide 3 text

Outline • ࿩͢͜ͱ • Flutter(Dart VM)ͷฒྻॲཧͷجຊ • ഉଞ੍ޚΛ͏·͘΍Δ • ࿩͞ͳ͍͜ͱ • Flutter Webͷߟྀ

Slide 4

Slide 4 text

Concurrency of Flutter(Dart VM) • Dart͸Single ThreadɾEvent Loop(iOS, androidಉ͡) • iOS, androidΤϯδχΞ͕૝ఆ͢Δthread͸Isolateͱ͍͏୯ҐͰѻΘΕΔ • ϝϞϦͷڞ༗͸ߦ͑ͣɺϝοηʔδΛ༻͍ͯσʔλΛ΍ΓऔΓ͢Δ • https://dart.dev/guides/language/concurrency#how-isolates-work ʹ͸👇ͷه ࡌ • you don’t have to worry about mutexes or locks • ϝϞϦ͕ڞ༗͞Εͳ͍ͷͰallocͱgarbage collectʹmutex΍lock͕ඞཁͳ͍

Slide 5

Slide 5 text

͑ͬɺഉଞ੍ޚ͍Βͳ͍ͷʁ😳 (ࠓ೔ͷൃදͷ࢒ΓͲ͏͠Α͏ɾɾɾɾ)

Slide 6

Slide 6 text

IsolateΛ࢖͏ࡍͷTipsʹ͍ͭͯൃද͞ ͍ͤͯͩ͘͞🙇

Slide 7

Slide 7 text

Dartͷฒྻॲཧ͓͞Β͍ͯ͠Έͨ w w w w 2022.02.22 Mobileษڧձ Wantedly × νʔϜϥϘ Bunjiro Miyoshi

Slide 8

Slide 8 text

Basics of Isolate • جຊతʹ͸JavaͷϚϧνεϨουͷײ֮Ͱ࢖༻͢Ε͹Α͍͕͍͔ͭ͘஫ҙͨ͠΄͏͕Α ͍ • IsolateΛੜ੒͢Δࡍͷίετ͕ωΠςΟϒΑΓएׯߴ͍ • ϝϞϦ͕Isolate͝ͱʹ෼཭͞Ε͍ͯΔͷͰม਺ʹΞΫηε͢ΔܗͰॻ͍ͯ΋Main Isolateʹ͸൓ө͞Εͳ͍ • Isolate಺Ͱൃੜͨ͠error͸RemoteError or Exceptionʹϥοϓ͞ΕͨܗͰฦ٫͞ΕΔ • Isolate APIΛ௚઀࢖͏ΑΓFlutterͷcomputeΛ࢖༻͢Δͱॻ͖΍͍͢

Slide 9

Slide 9 text

Cost of Isolate • mono͞Μͷmedium͕Θ͔Γ΍͍͢ͷͰׂѪ • https://medium.com/ fl utter-jp/isolate-a3f6eab488b5 • ωοτϫʔΫϨεϙϯε଴ͪ౳ͷCPUෛՙ͕௿͍΋ͷʹ͍ͭͯ͸Main IsolateͰ΍ͬͨ ΄͏͕Α͍ • CPUෛՙ͕ߴ͍΋ͷ(ܭࢉΛߦ͏ϧʔϓॲཧɺେ͖͍ϑΝΠϧͷγϦΞϥΠζ)͸Isolate Λ࢖ͬͯ͋͛Δͱྑͦ͞͏ • େ͖͍ϑΝΠϧͷγϦΞϥΠζͰ΋2018೥࣌఺ͰIsolateͷεΠονϯάίετͷ΄͏ ͕ߴ͍ͭͨ͘

Slide 10

Slide 10 text

Access to variables in Isolate • ϝϞϦ͕Isolate͝ͱʹ෼཭͞Ε͍ͯΔͱ͍͏͜ͱ͸Isolate಺Ͱม਺Λ ߋ৽ͯ͠΋Main Isolate্Ͱ͸൓ө͞Εͳ͍ • 👆Λߟ͑ΔͱIsolate͸εϨουͱೝࣝ͢ΔΑΓϓϩηεͱೝࣝͯ͋͠ ͛Δͱ͍͍ײ͡ • ഉଞ੍ޚ͍Βͳ͍ means Main IsolateͰॱ࣍Α͠ͳʹ΍ͬͯͶ😉ͱ͍ ͏͜ͱ w w w w w w w w

Slide 11

Slide 11 text

Example of accessing to variables in Isolate ϝϞϦ্ͰτʔΫϯ؅ཧΛ ߦ͏Ϋϥε

Slide 12

Slide 12 text

Example of accessing to variables in Isolate όοΫάϥ΢ϯυεϨουͰݺ͹ΕΔ ॲཧΛ࣋ͭΫϥε

Slide 13

Slide 13 text

Example of accessing to variables in Isolate όοΫάϥ΢ϯυεϨουͰݺ͹ΕΔॲཧ όοΫάϥ΢ϯυεϨου্Ͱ 1. τʔΫϯͷಡΈग़͠ 2. ॲཧͷݺͼग़͠ 3. τʔΫϯͷ্ॻ͖ Λߦ͏

Slide 14

Slide 14 text

Example of accessing to variables in Isolate • લϖʔδͷ࣮૷Ͱ͸ผεϨουͰτʔΫϯʹΞΫηεͯ͠͠·͍ͬͯ Δ • DartͰ͸ผIsolateͰݺͼग़͞ΕΔͱߋ৽ͨ͠τʔΫϯͷ஋MainIsolate Ͱ͸औಘͰ͖ͳ͍😩 • 👉ં֯τʔΫϯߋ৽ͨ͠ͷʹ࠶౓ϝιουΛୟ͍ͨͱ͖ʹ஋͕ߋ৽͞ Ε͍ͯͳ͍ɾɾɾͳΜͯ͜ͱʹɾɾɾɾ

Slide 15

Slide 15 text

Example of accessing to variables in Isolate Main Isolate্Ͱॱ࣍ॲཧ͞ΕΔΑ͏ʹॲཧ Λهड़͢Δ

Slide 16

Slide 16 text

Example of accessing to variables in Isolate τʔΫϯಡΈग़͠ॲཧΛMain Isolate Ͱ࣮ࢪ͢ΔΑ͏ʹมߋ τʔΫϯࣗମ͸Ҿ਺ͰผIsolateͰݺ͹ ΕΔϝιουʹ౉͢ τʔΫϯॻ͖ग़͠ॲཧΛMain Isolate Ͱ࣮ࢪ͢ΔΑ͏ʹมߋ

Slide 17

Slide 17 text

Error in Isolate(original Isolate) • onErrorʹ౉ͨ͠SendPortʹ͸[String(Exception໊)ɺ String(StackTrace)]͕ྲྀΕͯ͘Δ • Isolate.error.listen()Ͱ͸👆ͷ৘ใΛϥοϓͨ͠RemoteError͕ྲྀΕͯ ͘Δ

Slide 18

Slide 18 text

Error in Isolate(original Isolate) Stringͷ഑ྻΛRemoteErrorʹม׵͠ ͍ͯΔ😩

Slide 19

Slide 19 text

Error in Isolate(compute) • Exceptionʹϥοϓ͞ΕΔ Exceptionʹϥοϓͯ͠Streamͷ errorʹྲྀ͍ͯ͠Δ😩

Slide 20

Slide 20 text

Error in Isolate(ara ara shi handling) • ϥοϓ͞Ε·ͬͯͯ͘πϥ͍ɾɾɾɾ👼 • Exception.messageͷจࣈྻ൑ఆͰΤϥʔϋϯυϦϯά͢Δ͜ͱ΋ෆ Մೳ͡Όͳ͍͕πϥ͍ɾɾɾɾ👼 • ϝϞϦόοϑΝΛߟྀͯ͠StringͷΈͰ΍ΓऔΓ͍ͯ͠Δͷ͔΋͠Ε ͳ͍͕ߥʑ͘͠ExceptionΛड͚औΔํ๏Λ໛ࡧͯ͠ΈΔ

Slide 21

Slide 21 text

Error in Isolate(ara ara shi handling) Isolate.spawnͰݺͼग़͢ϝιουͷҾ ਺ͷportΛ഑ྻʹͯ͠ExceptionΛྲྀ͢༻ ͷportΛड͚औΔ Isolate.spawnͷonErrorʹ͸౉ͣ͞ʹϝ ιουͷҾ਺ͱͯ͠ExceptionΛड͚औΔ Α͏ͷPortΛ౉͢

Slide 22

Slide 22 text

Error in Isolate(ara ara shi handling) • computeͷํ͸computeؔ਺Λࢀߟʹͯ͠લͷϖʔδͷ࣮૷Λ࢖͏֦ ுؔ਺Λ࡞ͬͯ͋͛Δ

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

Reference • Concurrency in Dart • https://dart.dev/guides/language/concurrency#sending-multiple- messages-between-isolates • FlutterͰIsolateΛ༻͍ͨฒྻॲཧΛ͢Δ΂͖γʔϯͱͦͷ΍Γํ • https://medium.com/ fl utter-jp/isolate-a3f6eab488b5