Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
EN
YN
Uploaded by
Yuuki Noseda
444 views
なんとなく理解するActor 〜Actorと仲良くしよう〜 @DMM.swift #1
SwiftにおけるActorを感覚で捉えるために語源などにも当たって解説した資料です
Technology
◦
Read more
0
Save
Share
Embed
Embed presentation
Download
Download to read offline
1
/ 52
2
/ 52
3
/ 52
4
/ 52
5
/ 52
6
/ 52
7
/ 52
8
/ 52
9
/ 52
10
/ 52
11
/ 52
12
/ 52
13
/ 52
14
/ 52
15
/ 52
16
/ 52
17
/ 52
18
/ 52
19
/ 52
20
/ 52
21
/ 52
22
/ 52
23
/ 52
24
/ 52
25
/ 52
26
/ 52
27
/ 52
28
/ 52
29
/ 52
30
/ 52
31
/ 52
32
/ 52
33
/ 52
34
/ 52
35
/ 52
36
/ 52
37
/ 52
38
/ 52
39
/ 52
40
/ 52
41
/ 52
42
/ 52
43
/ 52
44
/ 52
45
/ 52
46
/ 52
47
/ 52
48
/ 52
49
/ 52
50
/ 52
51
/ 52
52
/ 52
More Related Content
PPTX
リアルタイムなゲームの開発でコンテナを使ってみたら簡単便利で激安だったのでオススメしたい
by
YutoNishine
PDF
【Unity道場】新しいPrefabワークフロー入門
by
Unity Technologies Japan K.K.
PDF
ある工場の Redmine 2022 〜ある工場の Redmine 5.0 バージョンアップ〜 ( Redmine of one plant 2022 ...
by
Kohei Nakamura
PDF
いまさら聞けないarmを使ったNEONの基礎と活用事例
by
Fixstars Corporation
PDF
UniRx完全に理解した
by
torisoup
PDF
多機能ボイチャを簡単に導入する方法
by
Unity Technologies Japan K.K.
PDF
新入社員のための大規模ゲーム開発入門 サーバサイド編
by
infinite_loop
PDF
MagicOnion入門
by
torisoup
リアルタイムなゲームの開発でコンテナを使ってみたら簡単便利で激安だったのでオススメしたい
by
YutoNishine
【Unity道場】新しいPrefabワークフロー入門
by
Unity Technologies Japan K.K.
ある工場の Redmine 2022 〜ある工場の Redmine 5.0 バージョンアップ〜 ( Redmine of one plant 2022 ...
by
Kohei Nakamura
いまさら聞けないarmを使ったNEONの基礎と活用事例
by
Fixstars Corporation
UniRx完全に理解した
by
torisoup
多機能ボイチャを簡単に導入する方法
by
Unity Technologies Japan K.K.
新入社員のための大規模ゲーム開発入門 サーバサイド編
by
infinite_loop
MagicOnion入門
by
torisoup
What's hot
PDF
Redmineをちょっと便利に! プログラミング無しで使ってみるREST API
by
Go Maeda
PDF
Mavenの真実とウソ
by
Yoshitaka Kawashima
PDF
ソフトウェア開発における『知の高速道路』
by
Yoshitaka Kawashima
PDF
RedmineのFAQとアンチパターン集
by
akipii Oga
PDF
動画プレイヤーアプリの開発を通じて学んだ機能を実現するための要点解説
by
Fumiya Sakai
PPTX
ある工場の Redmine 2021 ( Redmine of one plant 2021 )
by
Kohei Nakamura
PDF
通信対戦ゲームを作った話
by
mipsparc
PPTX
NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...
by
NTT DATA Technology & Innovation
PPTX
大規模ゲーム開発における build 高速化と安定化
by
DeNA
PDF
君はyarn.lockをコミットしているか?
by
Teppei Sato
PPTX
複数人でのUnity開発ノウハウ
by
Yasuyuki Niwa
PDF
【Unity】 Behavior TreeでAIを作る
by
torisoup
PDF
Gitの便利ワザ
by
ktateish
ODP
Android デバッグ小ネタ
by
l_b__
PPTX
最近のやられアプリを試してみた
by
zaki4649
PDF
【Unite 2018 Tokyo】Unityにおける疎結合設計 ~UIへの適用事例から学ぶ、テクニックとメリット~
by
UnityTechnologiesJapan002
PDF
世界でいちばんわかりやすいドメイン駆動設計
by
増田 亨
PDF
【Unity道場スペシャル 2017札幌】最適化をする前に覚えておきたい技術 -札幌編-
by
Unity Technologies Japan K.K.
PPTX
async/await のしくみ
by
信之 岩永
PDF
Riderはいいぞ!
by
UnityTechnologiesJapan002
Redmineをちょっと便利に! プログラミング無しで使ってみるREST API
by
Go Maeda
Mavenの真実とウソ
by
Yoshitaka Kawashima
ソフトウェア開発における『知の高速道路』
by
Yoshitaka Kawashima
RedmineのFAQとアンチパターン集
by
akipii Oga
動画プレイヤーアプリの開発を通じて学んだ機能を実現するための要点解説
by
Fumiya Sakai
ある工場の Redmine 2021 ( Redmine of one plant 2021 )
by
Kohei Nakamura
通信対戦ゲームを作った話
by
mipsparc
NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...
by
NTT DATA Technology & Innovation
大規模ゲーム開発における build 高速化と安定化
by
DeNA
君はyarn.lockをコミットしているか?
by
Teppei Sato
複数人でのUnity開発ノウハウ
by
Yasuyuki Niwa
【Unity】 Behavior TreeでAIを作る
by
torisoup
Gitの便利ワザ
by
ktateish
Android デバッグ小ネタ
by
l_b__
最近のやられアプリを試してみた
by
zaki4649
【Unite 2018 Tokyo】Unityにおける疎結合設計 ~UIへの適用事例から学ぶ、テクニックとメリット~
by
UnityTechnologiesJapan002
世界でいちばんわかりやすいドメイン駆動設計
by
増田 亨
【Unity道場スペシャル 2017札幌】最適化をする前に覚えておきたい技術 -札幌編-
by
Unity Technologies Japan K.K.
async/await のしくみ
by
信之 岩永
Riderはいいぞ!
by
UnityTechnologiesJapan002
なんとなく理解するActor 〜Actorと仲良くしよう〜 @DMM.swift #1
1.
© DMM © DMM なんとなく理解するActor Actorと仲良くしよう 野瀬田
裕樹(@ynoseda) 2024/1/29
2.
© DMM 野瀬田 裕樹(@ynoseda) 2023年9月
合同会社DMM.com 中途入社 開発統括本部 アプリ開発室 自己紹介 2
3.
© DMM 3 みなさん、Actor理解してますか?
4.
© DMM 4 私は全然理解できてません(とりあえずMainActorあるある)
5.
© DMM 5 ということで
6.
© DMM 6 今日は私と一緒になんとなくでも理解できるようになりましょう
7.
© DMM Actorとは SwiftにおけるActorについてはSwift.orgに記載がある https://docs.swift.org/swift-book/documentation/the-swift-programmi ng-language/concurrency/#Actors 7
8.
© DMM Actorとは You can
use tasks to break up your program into isolated, concurrent pieces. Tasks are isolated from each other, which is what makes it safe for them to run at the same time, but sometimes you need to share some information between tasks. Actors let you safely share information between concurrent code. Like classes, actors are reference types, so the comparison of value types and reference types in Classes Are Reference Types applies to actors as well as classes. Unlike classes, actors allow only one task to access their mutable state at a time, which makes it safe for code in multiple tasks to interact with the same instance of an actor. 8
9.
© DMM 9 読む気にならないですね
10.
© DMM 10 Google翻訳しましょう
11.
© DMM 1. タスクについての記載 ●
タスクを使うとプログラムを独立していて同時に実行できるパーツに分 割できる ● タスクは分離されていて安全に同時実行できるが、場合によってはタス ク間で情報を共有する必要がある Actorとは 11
12.
© DMM 2. Actorについての記載 ●
アクターを使用すると、安全にタスク間で情報を共有できる ● アクターはクラスと同様に参照型である ● アクターはクラスとは異なり、一度に 1 つのタスクのみが可変状態にア クセスできる Actorとは 12
13.
© DMM 13 字面ではわかるがわからん
14.
© DMM 14 そういう時はActorという単語の意味を調べましょう
15.
© DMM https://www.merriam-webster.com/dictionary/actor 1 :
one that acts : DOER 2 a : one who acts in a play, movie, television show, etc. b : one who behaves as if acting a part 3 : one that takes part in any affair : PARTICIPANT Actorという単語の意味 15
16.
© DMM https://www.merriam-webster.com/dictionary/actor 1 :
one that acts : DOER 2 a : one who acts in a play, movie, television show, etc. b : one who behaves as if acting a part 3 : one that takes part in any affair : PARTICIPANT 要するになんらかの行動をするもの、役に従って振る舞うものを表す Actorという単語の意味 16
17.
© DMM 17 じゃあなぜタスク間で安全に情報を共有できる参照型がActorなのか?
18.
© DMM A universal
modular ACTOR formalism for artificial intelligence https://www.ijcai.org/Proceedings/73/Papers/027B.pdf というpaperが初出らしい プログラミングにおけるActorの初出は? 18
19.
© DMM このpaperの概要の次に記載されている一文がActorの重要な概念 > Programs
should not only work, but they should appear to work as well. プログラミングにおけるActorの初出は? 19
20.
© DMM このpaperの中にActorについての概要が記載されている > この作業の過程で、私たちは
ACTOR という 1 つの基本概念を中心に形 式主義を統一することに成功しました。 直観的には、ACTOR は、スクリプト に従ってキューの役割を果たすアクティブなエージェントです。モデルにお ける制御とデータ フローの不可分性を強調するために、ACTOR の比喩を 使用します。 プログラミングにおけるActorの初出は? 20
21.
© DMM ● スクリプトに従ってキューの役割を果たすアクティブなエージェントのこ と ●
どのタイミング・条件でどういった振る舞いをするべきか、つまり制御と データフローはセットで考えるべきで、それらがセットになったものを Actorという比喩で表現している 元々のActorとは 21
22.
© DMM このpaperの中にActorについての性質も記載されている > 私たちの形式主義は、すべての動作モードが
1 種類の動作、つまり ACTORにメッセージを送信するという観点からどのように定義できるかを示 しています。 ACTORは、再帰関数、データ構造、またはプロセスとして動作 するかどうかに関係なく、常にまったく同じ方法で均一に呼び出されます。 (中略)すべてのACTORには、メッセージが送信されるACTORの前提条件 とコンテキストが満たされていることを確認する INTENTION があります。 INTENTIONとは、ACTORが外の世界と結ぶ契約です。ACTORが契約をど のように履行するかは、ACTOR自身の仕事です。 Actorの性質 22
23.
© DMM Actorの性質 23 全てがActor 統一された呼出
Intension
24.
© DMM ● 全てがActorで表現できる ○
Monotheism is the answer ○ データ構造、関数、セマフォなど多岐にわたる概念を包括している ● 統一された呼び出し方法 ○ Actorは内部でどのように振る舞っていたとしても、同じ方法で一貫して呼び出し される ● Intention(意図) ○ 外の世界とActorの間には契約があり、その契約に従ってActorは振る舞う 元々のActorとは 24
25.
© DMM https://github.com/apple/swift-evolution/blob/main/proposals/0306-act ors.md SE-0306で背景や詳細が確認できる SwiftにおけるActor 25
26.
© DMM ● 従来のclassにおける課題感 ○
データ競合回避が難しい ○ データ競合のような並行処理における不具合を静的に検出できない SwiftにおけるActor導入の背景 26
27.
© DMM 27 いい感じにデータ競合を回避する方法は何かないか?
28.
© DMM 28 例えばデータのフローと制御をセットで扱って、 データ競合がおきないように いい感じの条件、タイミングで状態を扱ってくれるような
29.
© DMM 29 あっ、これ A universal
modular ACTOR formalism for artificial intelligence でやったところだ!
30.
© DMM ● プログラムは単に機能するだけではだめ ●
ちゃんと外から見たときに利用側の期待通りに振る舞ってくれるということ が大切 ● Actorはこちらの期待した役をきちんと演じてくれる役者さん ● データ競合がおきないように状態を扱って欲しいなぁの期待に応えてくれ るのがActor Actorに対するイメージ 30
31.
© DMM SwiftにおけるActor 31
32.
© DMM SwiftにおけるActor 32
33.
© DMM SwiftにおけるActor 33
34.
© DMM SwiftにおけるActor 34
35.
© DMM ● Actorはその性質から、警告が出ないようにちゃんと実装すれば基本的 にはデータ競合を防ぐことができるはず ●
コンパイラを頼りにActorの使い方を勉強しよう ● Build SettingsのSWIFT_STRICT_CONCURRENCYをcompleteにする と、モジュール全体にわたってSendableの制約とactor isolationのチェッ クを強制してくれる SwiftにおけるActor 35
36.
© DMM ● 送信可能って日本語訳わかりにくいよね ●
コピーすることで、ある非同期処理のドメインから別のドメインに渡せるも の ● 単純な値型で構成されているstructとか、そういうコピーした後に書き込 みしても前のデータに影響しないものが該当する ● Sendableなデータはactor同士のやり取りで使える Sendableって何? 36
37.
© DMM 発生する警告の例 37
38.
© DMM 発生する警告の例(actor-isolationチェック) 38
39.
© DMM 発生する警告の例(actor-isolationチェック) 39
40.
© DMM 発生する警告の例(actor-isolationチェック) 40
41.
© DMM 発生する警告の例(Sendable制約) 41
42.
© DMM 発生する警告の例(Sendable制約) 42
43.
© DMM 発生する警告の例(キャプチャでも起きるよ) 43
44.
© DMM 発生する警告の例(キャプチャでも起きるよ) 44
45.
© DMM ● Actorと一口にいっても、単なるactorもあればMainActorのように特殊な Actorもある ●
DistributedActor ● GlobalActor ● MainActor ● AnyActor 色んなActor 45
46.
© DMM ● 一番良く使うMainActorくらいは定義を見ておこう MainActor 46
47.
© DMM MainActor 47
48.
© DMM actorはインスタンスが違うと違うactorだよ 48
49.
© DMM GlobalActor 49
50.
© DMM ● Actorは結構古くからある概念で、元の論文を読むとイメージが掴めるか も ●
Actorというだけで静的にデータ競合を回避できるなんて凄いよね ● コンパイラのサポートを使って上手にデータ競合を回避しよう まとめ 50
51.
© DMM ご静聴ありがとうございました
52.
© DMM Audience Q&A
Session ⓘ Click Present with Slido or install our Chrome extension to show live Q&A while presenting.
Download