<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body><section><h1>仕様書</h1><refs xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><ul xmlns="http://www.w3.org/1999/xhtml"><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="31" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[31]</anchor-end> <cite xml:lang="en-US-x-hixie">HTML Standard</cite> (<time>2016-12-05 14:51:53 +09:00</time>) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://html.spec.whatwg.org/#channel-messaging">https://html.spec.whatwg.org/#channel-messaging</anchor-external><ul><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="26" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[26]</anchor-end> <cite xml:lang="en-US-x-hixie">HTML Standard</cite> (<time>2016-12-05 14:51:53 +09:00</time>) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://html.spec.whatwg.org/#message-channels">https://html.spec.whatwg.org/#message-channels</anchor-external></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="32" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[32]</anchor-end> <strong><cite xml:lang="en-US-x-hixie">HTML Standard</cite> (<time>2016-12-05 14:51:53 +09:00</time>) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://html.spec.whatwg.org/#message-ports">https://html.spec.whatwg.org/#message-ports</anchor-external></strong><ul><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="65" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[65]</anchor-end> <cite xml:lang="en-US-x-hixie">HTML Standard</cite> (<time>2012-03-28 21:58:58 +09:00</time> 版) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://www.whatwg.org/specs/web-apps/current-work/#port-message-queue">https://www.whatwg.org/specs/web-apps/current-work/#port-message-queue</anchor-external></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="66" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[66]</anchor-end> <cite xml:lang="en-US-x-hixie">HTML Standard</cite> (<time>2013-02-09 02:07:40 +09:00</time> 版) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://www.whatwg.org/specs/web-apps/current-work/#unshipped-port-message-queue">https://www.whatwg.org/specs/web-apps/current-work/#unshipped-port-message-queue</anchor-external></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="92" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[92]</anchor-end> <cite xml:lang="en-US-x-hixie">HTML Standard</cite> (<time>2016-12-05 14:51:53 +09:00</time>) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://html.spec.whatwg.org/#dom-messageport-postmessage">https://html.spec.whatwg.org/#dom-messageport-postmessage</anchor-external></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="108" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[108]</anchor-end> <cite xml:lang="en-US-x-hixie">HTML Standard</cite> (<time>2016-12-05 14:51:53 +09:00</time>) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://html.spec.whatwg.org/#ports-and-garbage-collection">https://html.spec.whatwg.org/#ports-and-garbage-collection</anchor-external></li></ul></li></ul></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="149" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[149]</anchor-end> <cite xml:lang="en-US-x-hixie">HTML Standard</cite> (<time>2016-12-06 07:17:59 +09:00</time>) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://html.spec.whatwg.org/#the-worker's-ports">https://html.spec.whatwg.org/#the-worker's-ports</anchor-external></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="161" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[161]</anchor-end> <cite xml:lang="en-US-x-hixie">HTML Standard</cite> (<time>2016-12-13 09:04:33 +09:00</time>) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://html.spec.whatwg.org/#dom-messageevent-ports">https://html.spec.whatwg.org/#dom-messageevent-ports</anchor-external></li></ul></refs></section><section><h1>作成</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="36" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[36]</anchor-end> <code class="DOMi" xml:lang="en">MessagePort</code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">インターフェイス</anchor>は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">コンストラクター</anchor>を持ちません。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="37" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[37]</anchor-end> 作成するには、 <code class="DOMi" xml:lang="en">MessageChannel</code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">オブジェクト</anchor>などを作成する必要があります。</p><hr></hr><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="39" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[39]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">環境設定群オブジェクト</anchor><var>所有者</var>に関する<dfn><rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">新しい<code xmlns="http://www.w3.org/1999/xhtml" class="DOMi" xml:lang="en">MessagePort</code>オブジェクトの作成<rt xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">create a new <code class="DOMi" xml:lang="en">MessagePort</code> object</rt></rubyb></dfn>は、
次のようにしなければ<MUST xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">なりません</MUST>。</p><figure class="steps"><ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="41" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[41]</anchor-end> <var>ポート</var>を、新しい <code class="DOMi" xml:lang="en">MessagePort</code> に設定します <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="32" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;32</anchor-internal></src>。<figure class="list members"><figcaption><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="42" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[42]</anchor-end> <code class="DOMi" xml:lang="en">MessagePort</code></figcaption><dl><dt><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">所有者<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">MessagePort</title></f></dt><dd><var>所有者</var></dd></dl></figure></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="128" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[128]</anchor-end> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">イベントループ</anchor>の<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">タスクキュー群</f>のいずれかの<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">タスクキュー</anchor>において、
<var>ポート</var>の<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ポートメッセージキュー</f>が<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">タスクキュー部分リスト</anchor>の1つとなります。)</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="127" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[127]</anchor-end> <var>ポート</var>を返します <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="32" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;32</anchor-internal></src>。</li></ol></figure><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="40" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[40]</anchor-end> この処理は、次の場面から呼び出されます。<figure class="list middle"><ul><li><code class="DOMi" xml:lang="en">MessageChannel</code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">コンストラクター</anchor></li><li><code class="DOMi" xml:lang="en">Worker<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">new Worker</title></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">コンストラクター</anchor></li><li><code class="DOMi" xml:lang="en">SharedWorker</code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">コンストラクター</anchor></li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ワーカーを走らせる</anchor>処理</li></ul></figure></p></section><section><h1>文脈</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="33" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[33]</anchor-end> <code class="DOMi" xml:lang="en">MessagePort</code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">インターフェイス</anchor>は、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文書環境</anchor>と<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ワーカー環境</anchor>と <code>AudioWorklet</code> に<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">晒され</anchor>ています <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="32" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;32</anchor-internal></src>。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="96" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[96]</anchor-end> <code class="DOMi" xml:lang="en">MessageChannel</code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">オブジェクト</anchor>を作成すると、
<code>port1</code> と <code>port2</code> の2つの <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">IDL属性</anchor>から
<code class="DOMi" xml:lang="en">MessagePort</code> にアクセスできます。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="98" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[98]</anchor-end> <code class="DOMm" xml:lang="en">postMessage</code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">メソッド</anchor>で送信する <code class="DOMi" xml:lang="en">MessagePort</code>
を指定できます。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="97" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[97]</anchor-end> <code class="DOMm" xml:lang="en">postMessage</code> の受信や<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ワーカー</anchor>の作成で
<code class="DOMi" xml:lang="en">MessageEvent</code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">イベント</anchor>が<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">発火</anchor>された時は、
<code class="DOMa" xml:lang="en">ports</code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">IDL属性</anchor>で <code class="DOMi" xml:lang="en">MessagePort</code>
の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">配列</anchor>にアクセスできます。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="100" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[100]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ワーカー</anchor>は、<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">暗示的ポート</f>として <code class="DOMi" xml:lang="en">MessagePort</code>
を持ちます。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="101" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[101]</anchor-end> <code class="DOMi" xml:lang="en">SharedWorker</code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">オブジェクト</anchor>は、
<code class="DOMa" xml:lang="en">port</code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">IDL属性</anchor>で <code class="DOMi" xml:lang="en">MessagePort</code>
を持ちます。</p><hr></hr><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="99" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[99]</anchor-end> <code class="DOMi" xml:lang="en">WorkerGlobalScope</code> は、
<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><dfn xmlns="http://www.w3.org/1999/xhtml"><rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><anchor>ワーカーのポート群</anchor><rt xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">the worker's ports</rt></rubyb></dfn></f>として 
<code class="DOMi" xml:lang="en">MessagePort</code> のリストを保持しています <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="149" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;149</anchor-internal></src>。</p><ed xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">ワーカー内で作成されたポートが自動的に追加されます。暗示的なポートも含まれます。</ed><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="170" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[170]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">protected worker</anchor> かどうかの判定で参照されます。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="171" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[171]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ワーカーを走らせる</anchor>処理の最後の片付けの段階で <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">disentangle</anchor> の実行のため参照されます。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="150" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[150]</anchor-end> 同様に <code class="DOMi" xml:lang="en">Window</code> も<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ポート群</f></dfn>を持つと考えられます
(<anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="107" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;107</anchor-internal>)。</p></section><section><h1>状態</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="38" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[38]</anchor-end> <code class="DOMi" xml:lang="en">EventTarget</code> としての状態に加えて、
次の状態を持ちます。<figure class="list members"><dl><dt><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><anchor>entangle</anchor> されたポート</f> <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="32" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;32</anchor-internal></src></dt><dd>
他の <code class="DOMi" xml:lang="en">MessagePort</code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">オブジェクト</anchor>。
<anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="107" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;107</anchor-internal> も参照。</dd><dt><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ポートメッセージキュー</f></dt><dd>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">タスク源</anchor>。
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">タスクキュー部分リスト</anchor>と捉えることもできます。 
初期状態は空です。
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">有効</anchor>か<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">無効</anchor>かのいずれかの<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">状態</f>を持ち、その初期状態は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">無効</anchor>です。</dd><dt><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">既に出荷済み</f>フラグ</dt><dd>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ブール型</anchor>。
初期状態は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">偽</anchor>。</dd><dt><dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><rubyb>所有者<rt xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">owner</rt></rubyb><title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">MessagePort</title></f></dfn></dt><dd>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">環境設定群オブジェクト</anchor>。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="32" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;32</anchor-internal></src></dd></dl></figure></p></section><section><h1>メンバー</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="34" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[34]</anchor-end> <code class="DOMi" xml:lang="en">EventTarget</code> を<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">継承</anchor>しています <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="32" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;32</anchor-internal></src>。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="35" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[35]</anchor-end> 加えて、次の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">メンバー<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">インターフェイスメンバー</title></anchor>があります。<figure class="short list"><ul><li><code class="DOMm" xml:lang="en">close<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">MessagePort</title></code></li><li><code class="DOMm" xml:lang="en">postMessage</code></li><li><code class="DOMm" xml:lang="en">start<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">MessagePort</title></code></li><li><code class="DOMa" xml:lang="en">onmessage</code></li><li><code class="DOMa" xml:lang="en">onmessageerror</code></li></ul></figure></p></section><section><h1>ポートメッセージキュー</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="135" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[135]</anchor-end> <code class="DOMi" xml:lang="en">MessagePort</code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">オブジェクト</anchor>は、
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><rubyb><anchor>ポートメッセージキュー</anchor><rt xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">port message queue</rt></rubyb></f></dfn>を持ちます。
初期状態は空です。 <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="65" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;65</anchor-internal></src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="136" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[136]</anchor-end> <code class="DOMi" xml:lang="en">MessagePort</code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">オブジェクト</anchor>の<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ポートメッセージキュー</f>は、
<rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><anchor>無効</anchor><rt xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">disabled</rt></rubyb>または<rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><anchor>有効</anchor><rt xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">enabled</rt></rubyb>のいずれかの<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">状態</f>にあります。
初期状態は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">無効</anchor>です。一旦これを<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">有効</anchor>にすると、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">無効</anchor>には戻せません。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="65" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;65</anchor-internal></src></p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="125" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[125]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ポートメッセージキュー</anchor>は、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">タスクキュー部分リスト</anchor>と理解できます。
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">タスクキュー</anchor>を参照。</comment-p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="137" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[137]</anchor-end> <code class="DOMi" xml:lang="en">MessagePort</code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">オブジェクト</anchor>は、
<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><rubyb>既に出荷済み<rt xmlns="http://www.w3.org/1999/xhtml">has been shipped</rt></rubyb><title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">has been shipped</title></f></dfn>フラグを持ちます。
初期状態は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">偽</anchor>です。  
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="32" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;32</anchor-internal></src></p><ed xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">
<anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="142" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[142]</anchor-end> 未出荷済み</ed><hr></hr><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="64" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[64]</anchor-end> 2つの状態が、 <code class="DOMm" xml:lang="en">postMessage</code> の結果生じる
<code class="DOMe" xml:lang="en">message<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">onmessage</title></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">イベント</anchor>の実行タイミングに影響します。
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">仕様書</anchor>の規定は複雑でわかりにくいですが:<figure class="list"><ul><li><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">既に出荷済み</f>フラグが<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">偽</anchor><ul><li><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ポートメッセージキュー</f>の<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">状態<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">ポートメッセージキュー</title></f>が<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">有効</anchor><ul><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ポートメッセージキュー</anchor>は実行されない</li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">未出荷済みポートメッセージキュー</anchor>に<strong>含まれる</strong></li></ul></li><li><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ポートメッセージキュー</f>の<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">状態<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">ポートメッセージキュー</title></f>が<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">無効</anchor><ul><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ポートメッセージキュー</anchor>は実行されない</li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">未出荷済みポートメッセージキュー</anchor>に含まれない</li></ul></li></ul></li><li><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">既に出荷済み</f>フラグが<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">真</anchor><ul><li><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ポートメッセージキュー</f>の<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">状態<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">ポートメッセージキュー</title></f>が<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">有効</anchor><ul><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ポートメッセージキュー</anchor>は<strong>実行される</strong></li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">未出荷済みポートメッセージキュー</anchor>に含まれない</li></ul></li><li><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ポートメッセージキュー</f>の<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">状態<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">ポートメッセージキュー</title></f>が<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">無効</anchor><ul><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ポートメッセージキュー</anchor>は実行されない</li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">未出荷済みポートメッセージキュー</anchor>に含まれない</li></ul></li></ul></li></ul></figure>... 整理してみると単純な話で、キューの状態が有効なら実行され、
出荷済みなら<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ポートメッセージキュー</anchor>扱い、
未出荷なら<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">未出荷済みポートメッセージキュー</anchor>扱いになる、ということです。</p><hr></hr><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="143" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[143]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ポートメッセージキュー</anchor>と<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">未出荷済みポートメッセージキュー</anchor>は、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">タスク</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">キュー</anchor>であるにも関わらず、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">タスク源</anchor>である <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="32" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;32</anchor-internal></src>
と規定されています。それでいて、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">イベントループ</anchor>によって
(実行されるべき<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">タスク</anchor>のリストとして) 使われる <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="32" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;32</anchor-internal></src> ともされていて、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">イベントループ</anchor>の持つ<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">タスクキュー</anchor>の一種であるかのようにも捉えられます。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="144" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[144]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">仕様書</anchor>の履歴を辿ってみると、元は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ポートメッセージキュー</anchor>はその名の通り
<code class="DOMe" xml:lang="en">message</code> <em><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">イベント</anchor></em>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">キュー</anchor>でした。
この<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">キュー</anchor>に追加された<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">イベント</anchor>は、(準備が整い次第)
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">イベント</anchor>を<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">発火</anchor>する<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">タスク</anchor>が<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">イベントループ</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">タスクキューに追加<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">タスクをキューに追加</title></anchor>され、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ポートメッセージキュー</anchor>からは削除されることになっていました。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="145" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[145]</anchor-end> これがその後の改訂 <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="133" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;133</anchor-internal></src> で、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ポートメッセージキュー</anchor>自体が<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">タスク</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">キュー</anchor>になりました。
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">コミットメッセージ</anchor>で <code class="DOMi" xml:lang="en">MessagePort</code> 
が他の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">イベントループ</anchor>に渡った時に<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">イベント</anchor>が失われないための変更だと説明されており、
<code class="DOMi" xml:lang="en">MessagePort</code> の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Transfer</anchor> で<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">イベント</anchor>を新<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">イベントループ</anchor>下に移動させることが狙いだったようです。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="146" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[146]</anchor-end> この変更で、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ポートメッセージキュー</anchor>は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">タスク源</anchor>であるということになりました。
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">仕様書</anchor>は「<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">タスク</anchor>は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">タスク源</anchor>から来る」としか言っておらず、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">タスク源</anchor>とは何なのか (ラベルなのかリストなのか) はよくわかりませんが、
(実装でどう扱うかは別として、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">仕様書</anchor>の裏の考え方としては)
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">タスク源</anchor>とはそれ自体が<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">タスク</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">リスト</anchor> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">タスクキュー部分リスト</anchor>) で、
そのような<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">リスト</anchor>をいくつか束ねたものが<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">タスクキュー</anchor>だ、
といえるのかもしれません。</p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">タスクキュー</anchor>参照。</comment-p><hr></hr><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="63" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[63]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">クライアントメッセージキュー</anchor>と似ています。</p></section><section><h1>処理</h1><section><h1>entangle</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="43" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[43]</anchor-end> 2つの <code class="DOMi" xml:lang="en">MessagePort</code> を関連付けた状態とすることを
<dfn>entangle</dfn> といいます。
<var>ポート1</var>と<var>ポート2</var>の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">entangle</anchor> は、次のようにしなければ<MUST xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">なりません</MUST>。</p><figure class="steps"><ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="44" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[44]</anchor-end> <var>ポート1</var>の <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><anchor>entangle</anchor> されたポート</f>が <code>null</code> でなければ、<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="45" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[45]</anchor-end> <var>ポート1</var>の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">disentangle</anchor> を実行します。 <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="32" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;32</anchor-internal></src></li></ol></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="46" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[46]</anchor-end> <var>ポート2</var>の <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><anchor>entangle</anchor> されたポート</f>が <code>null</code> でなければ、<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="47" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[47]</anchor-end> <var>ポート2</var>の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">disentangle</anchor> を実行します。 <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="32" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;32</anchor-internal></src></li></ol></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="48" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[48]</anchor-end> <var>ポート1</var>の <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><anchor>entangle</anchor> されたポート</f>を、<var>ポート2</var>に設定します。 <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="32" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;32</anchor-internal></src></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="49" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[49]</anchor-end> <var>ポート2</var>の <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><anchor>entangle</anchor> されたポート</f>を、<var>ポート1</var>に設定します。 <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="32" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;32</anchor-internal></src></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="151" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[151]</anchor-end> <var>ポート1</var>の<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">所有者<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">MessagePort</title></f>と<var>ポート2</var>の<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">所有者<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">MessagePort</title></f>が異なるなら、
(<anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="107" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;107</anchor-internal>)<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="152" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[152]</anchor-end> <var>ポート1</var>の<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">所有者<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">MessagePort</title></f>の<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">大域オブジェクト</f>の<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ポート群</f>に、
<var>ポート1</var>を追加します。</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="153" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[153]</anchor-end> <var>ポート2</var>の<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">所有者<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">MessagePort</title></f>の<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">大域オブジェクト</f>の<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ポート群</f>に、
<var>ポート2</var>を追加します。</li></ol></li></ol></figure><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="51" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[51]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">entangle</anchor> は、次の場面で呼び出されます。<figure class="middle list"><ul><li><code class="DOMi" xml:lang="en">MessagePort</code> の <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" class="ss">Transfer</f></li><li><code class="DOMi" xml:lang="en">MessageChannel</code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">コンストラクター</anchor></li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ワーカーを走らせる</anchor></li><li><code class="DOMi" xml:lang="en">SharedWorker</code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">コンストラクター</anchor></li></ul></figure></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="50" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[50]</anchor-end> この処理が済んだ状態を、<var>ポート1</var>と<var>ポート2</var>が 
<dfn><rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">entangle されている<rt xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">entangled</rt></rubyb></dfn>といいます <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="32" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;32</anchor-internal></src>。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="102" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[102]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">entangle</anchor> 状態を解除することを、 <dfn>disentangle</dfn> <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="32" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;32</anchor-internal></src> といいます。
<code class="DOMi" xml:lang="en">MessagePort</code> <var>ポート</var>の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">disentangle</anchor> は、
次のようにしなければなりません。</p><figure class="steps"><ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="103" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[103]</anchor-end> <var>ポート</var>の <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><anchor>entangle</anchor> されたポート</f>の <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><anchor>entangle</anchor> されたポート</f>を、
<code>null</code> に設定します。</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="155" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[155]</anchor-end> <var>ポート</var>の <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><anchor>entangle</anchor> されたポート</f>の<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">所有者<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">MessagePort</title></f>の<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">大域オブジェクト</f>の<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ポート群</f>から、
<var>ポート</var>の <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><anchor>entangle</anchor> されたポート</f>を (あれば) 削除します (<anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="107" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;107</anchor-internal>)。</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="104" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[104]</anchor-end> <var>ポート</var>の <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><anchor>entangle</anchor> されたポート</f>を、 <code>null</code> に設定します。</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="154" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[154]</anchor-end> <var>ポート</var>の<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">所有者<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">MessagePort</title></f>の<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">大域オブジェクト</f>の<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ポート群</f>から、
<var>ポート</var>を (あれば) 削除します (<anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="107" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;107</anchor-internal>)。</li></ol></figure><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="105" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[105]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">disentangle</anchor> は、次の場面で呼び出されます。<figure class="list middle"><ul><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">entangle</anchor></li><li><code class="DOMm" xml:lang="en">close<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">MessagePort</title></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">メソッド</anchor></li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ワーカーを走らせる</anchor>処理の最後の破棄の段階</li></ul></figure></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="106" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[106]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">entangle</anchor> の中から <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">disentangle</anchor> が呼び出される、つまり <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">entangle</anchor>
関係が書き換えられて他の <code class="DOMi" xml:lang="en">MessagePort</code> と関連付けられた状態になるのは、
<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" class="ss">Transfer</f> からの呼び出しの場合のみです。すなわち <code class="DOMm" xml:lang="en">postMessage</code>
により <code class="DOMi" xml:lang="en">MessagePort</code> が送られて、他方の
<code class="DOMi" xml:lang="en">MessagePort</code> の接続先が新しい方に差し替えられる場合です。
これ以外で <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">disentangle</anchor> された <code class="DOMi" xml:lang="en">MessagePort</code> は、二度と
<code class="DOMi" xml:lang="en">entangle</code> されることはありません。</p></section><section><h1>transfer</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="52" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[52]</anchor-end> <code class="DOMi" xml:lang="en">MessagePort</code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">オブジェクト</anchor>は、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">transferable object</anchor>
です。 <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="32" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;32</anchor-internal></src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="53" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[53]</anchor-end> <code class="DOMi" xml:lang="en">MessagePort</code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">オブジェクト</anchor>の
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">transfer steps</anchor> は、<var>値</var>と<var>データ保持子</var>について、
次のようにしなければ<MUST xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">なりません</MUST> <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="32" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;32</anchor-internal></src>。</p><figure class="steps"><ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="54" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[54]</anchor-end> <var>値</var>を<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">出荷</anchor>します。</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="165" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[165]</anchor-end> <var>データ保持子</var>の <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" class="ss">PortMessageQueue</f> を、
<var>値</var>の<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ポートメッセージキュー</f>に設定します。</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="58" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[58]</anchor-end> <var>遠隔ポート</var>を、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文脈オブジェクト</anchor>の <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><anchor>entangle</anchor> されたポート</f>に設定します。</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="59" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[59]</anchor-end> <var>遠隔ポート</var>が <code>null</code> 以外なら、<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="60" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[60]</anchor-end> <var>遠隔ポート</var>を<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">出荷</anchor>します。</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="166" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[166]</anchor-end> <var>データ保持子</var>の <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" class="ss">RemotePort</f> を、<var>遠隔ポート</var>に設定します。</li></ol></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="167" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[167]</anchor-end> それ以外の場合、<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="168" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[168]</anchor-end> <var>データ保持子</var>の <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" class="ss">RemotePort</f> を、 <code>null</code> に設定します。</li></ol></li></ol></figure><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="169" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[169]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">transfer-receiving steps</anchor> は、<var>データ保持子</var>と<var>値</var>について、
次のようにします <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="32" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;32</anchor-internal></src>。</p><figure class="steps"><ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="84" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[84]</anchor-end> <var>値</var>を<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">出荷</anchor>します。</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="55" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[55]</anchor-end> <var>値</var>の<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">所有子<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">MessagePort</title></f>を、
<var>値</var>の<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">関連設定群オブジェクト</f>に設定します。</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="57" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[57]</anchor-end> <var>データ保持子</var>の <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" class="ss">PortMessageQueue</f> が空でなければ、繰り返し、<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="123" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[123]</anchor-end> <var>タスク</var>を、 <var>データ保持子</var>の <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" class="ss">PortMessageQueue</f> を
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">dequeue</anchor> した結果に設定します。</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="124" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[124]</anchor-end> <var>タスク</var>を<var>値</var>に transfer (<anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="126" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;126</anchor-internal>) します。</li></ol></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="56" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[56]</anchor-end> <var>データ保持子</var>の <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" class="ss">RemotePort</f> が <code>null</code> 以外なら、<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="61" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[61]</anchor-end> <var>データ保持子</var>の <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" class="ss">RemotePort</f> と<var>値</var>を <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">entangle</anchor> します。</li></ol></li></ol></figure><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="126" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[126]</anchor-end> <var>旧タスク</var>の<var>新ポート</var>への transfer は、
次のようにしなければ<MUST xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">なりません</MUST>。<figure class="steps"><ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="138" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[138]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">タスクをキューに追加</anchor>します。<figure class="list members"><dl><dt><var>イベントループ</var></dt><dd><var>新ポート</var>の<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">所有者<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">MessagePort</title></f>の<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">有責イベントループ</f></dd><dt><var>処理</var></dt><dd><figure class="list members"><figcaption><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">引数</anchor>付きの<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">アルゴリズム</anchor></figcaption><dl><dt><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">変数</f></dt><dd><figure class="list members"><dl><dt><var>最終対象ポート</var></dt><dd><var>新ポート</var> <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="92" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;92</anchor-internal></src></dd></dl></figure></dd><dt><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">処理</f></dt><dd><var>旧タスク</var>の<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">処理</f>の<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">処理</f></dd></dl></figure></dd><dt><var>タスク源</var></dt><dd><var>新ポート</var>の<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ポートメッセージキュー</f> <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="32" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;32</anchor-internal></src></dd><dt><var>文脈</var></dt><dd><var>新ポート</var>の<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">所有者<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">MessagePort</title></f> <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="32" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;32</anchor-internal></src></dd></dl></figure></li></ol></figure></p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="140" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[140]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">仕様書</anchor>では<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">タスクをキューに追加</anchor>する操作を使わずに記述されています。</comment-p></section><section><h1>ポートの状態の変更</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="67" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[67]</anchor-end> <code class="DOMi" xml:lang="en">MessagePort</code> <var>ポート</var>の<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ポートメッセージキュー</f>の有効化</dfn>は、
次のようにしなければ<MUST xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">なりません</MUST> <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="32" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;32</anchor-internal></src>。<figure class="steps"><ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="70" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[70]</anchor-end> <var>ポート</var>の<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ポートメッセージキュー</f>の<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">状態</f>を、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">有効</anchor>に設定します。</li></ol></figure></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="68" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[68]</anchor-end> これによって、それまで<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">イベントループ</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">タスクキュー</anchor>の処理で無視されていた本<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ポートメッセージキュー</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">タスク</anchor>が、処理対象にと変化します。</p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">タスクキュー</anchor>参照。</comment-p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="91" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[91]</anchor-end> 次の場面で呼び出されます。<figure class="list middle"><ul><li><code class="DOMm" xml:lang="en">start<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">MessagePort</title></code></li><li><code class="DOMa" xml:lang="en">onmessage</code></li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ワーカーを走らせる</anchor></li></ul></figure></p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="130" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[130]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">クライアントメッセージキュー</anchor>の
<code xmlns="http://www.w3.org/1999/xhtml" class="DOMm" xml:lang="en">startMessages</code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">メソッド</anchor>に相当します。</comment-p><hr></hr><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="85" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[85]</anchor-end> <code class="DOMi" xml:lang="en">MessagePort</code> <var>ポート</var>の<dfn>出荷</dfn>は、
次のようにしなければ<MUST xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">なりません</MUST> <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="32" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;32</anchor-internal></src>。<figure class="steps"><ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="86" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[86]</anchor-end> <var>ポート</var>の<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">既に出荷済み</f>フラグを、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">真</anchor>に設定します。</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="69" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[69]</anchor-end> <var>ポート</var>について<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ポート出荷に伴うタスク移動</anchor>を行います。</li></ol></figure></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="87" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[87]</anchor-end> <cite>HTML Standard</cite> では、これは <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" class="ss">Transfer</f> (<anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="53" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;53</anchor-internal>) から実行される処理となっています。
意味的には、それ以外に<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ワーカーを走らせる</anchor>処理、 <code class="JS" xml:lang="en">new Worker</code>、
<code class="JS" xml:lang="en">new SharedWorker</code> からも実行されるべきではないかとも思われますが、
そうは規定されていません。歴史的経緯による誤りなのか、意図通りなのかははっきりしません。
現実問題どれだけその差が観測できるかは微妙なところかもしれません。</p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">それぞれの項も参照。</comment-p></section><section><h1>ポートメッセージキューの操作</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="71" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[71]</anchor-end> <var>処理</var>を <code class="DOMi" xml:lang="en">MessagePort</code> 
<var>ポート</var>の<dfn>ポートメッセージキューに追加</dfn>するには、
次のようにしなければ<MUST xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">なりません</MUST>。</p><figure class="steps"><ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="138" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[138]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">タスクをキューに追加</anchor>します。<figure class="list members"><dl><dt><var>イベントループ</var></dt><dd><var>ポート</var>の<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">所有者<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">MessagePort</title></f>の<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">有責イベントループ</f></dd><dt><var>処理</var></dt><dd><figure class="list members"><figcaption><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">引数</anchor>付きの<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">アルゴリズム</anchor></figcaption><dl><dt><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">変数</f></dt><dd><figure class="list members"><dl><dt><var>対象Realm</var></dt><dd><var>ポート</var>の<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">関連Realm</f> <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="92" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;92</anchor-internal></src></dd></dl></figure></dd><dt><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">処理</f></dt><dd><var>処理</var></dd></dl></figure></dd><dt><var>タスク源</var></dt><dd>
<var>ポート</var>の<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ポートメッセージキュー</f> <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="92" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;92</anchor-internal></src></dd><dt><var>文脈</var></dt><dd><var>ポート</var>の<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">所有者<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">MessagePort</title></f> <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="92" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;92</anchor-internal></src></dd></dl></figure></li></ol></figure><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="147" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[147]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">仕様書</anchor>では<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">タスクをキューに追加</anchor>する操作を使わずに記述されています。</comment-p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="129" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[129]</anchor-end> これは <code class="DOMm" xml:lang="en">postMessage</code> から呼び出されます。</p></section><section><h1>ごみ収集</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="107" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[107]</anchor-end> 
<code class="DOMi" xml:lang="en">MessagePort</code> <var>ポート</var>が <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">entangle</anchor> されているなら、
次の<em>いずれか</em>としなければ<MUST xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">なりません</MUST> <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="108" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;108</anchor-internal></src>。<figure class="list"><ul><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="118" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[118]</anchor-end> <var>ポート</var>の<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><anchor>entangle</anchor> されているポート</f>から<var>ポート</var>へ、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">強い参照</anchor>が存在する。</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="119" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[119]</anchor-end> <var>ポート</var>の<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">所有者<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">MessagePort</title></f>の<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">大域オブジェクト</f>から<var>ポート</var>へ、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">強い参照</anchor>が存在する。</li></ul></figure></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="120" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[120]</anchor-end> 実装上、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">entangle</anchor> されているポート同士が異なる<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プロセス</anchor>で動作しているなど、
直接<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">強い参照</anchor>を保持しているとすると実現困難な場合があるため、
2つの方法が認められているものと思われます。2つの方法は完全に等価なわけではありませんが、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">著者</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">スクリプト</anchor>から直接観測可能な挙動としては同一です。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="139" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[139]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ワーカー</anchor>に関しては、 <code class="DOMi" xml:lang="en">WorkerGlobalScope</code>
の<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ワーカーのポート群</f>として当該<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ワーカー</anchor>外に <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">entangle</anchor> されたすべての
<code class="DOMi" xml:lang="en">MessagePort</code> のリストを<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">大域オブジェクト</anchor>が保持することになっています。
これは事実上 <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="119" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;119</anchor-internal> を求めるものです (他の等価な実装方法も理論上はあり得ますが...)。
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文書環境</anchor>に関しても、同様に <code class="DOMi" xml:lang="en">MessagePort</code> のリストを保持するのが現実的でしょう。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="157" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[157]</anchor-end> 実装上は、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">disentangle</anchor> されないまま両端とも<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">スクリプト</anchor>から参照されなくなった時に、
<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ポート群</f>から除去されてこれらが<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ごみ収集</anchor>されるよう、注意が必要です。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="148" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[148]</anchor-end> 同じ環境内のポート同士は、 <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="118" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;118</anchor-internal> の方法を採っても、 <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="119" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;119</anchor-internal> の方法に準ずることにしても良さそうです。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="121" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[121]</anchor-end> <code class="DOMi" xml:lang="en">MessagePort</code> が<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ごみ収集</anchor>されないということは、
そこに登録された<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">イベントリスナー</anchor>が<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ごみ収集</anchor>されないということです。
つまりこの要件は、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">イベントリスナー</anchor>を登録した後に <code class="DOMi" xml:lang="en">MessagePort</code>
への参照が破棄されたとしても、相手方のポートが生きている限りは<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">イベントリスナー</anchor>が呼び出される可能性を維持するためのものです。</p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="122" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[122]</anchor-end> もちろん、両側の <code xmlns="http://www.w3.org/1999/xhtml" class="DOMi" xml:lang="en">MessagePort</code> が共に参照されない状態になった場合は、
もう<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">イベントリスナー</anchor>が呼び出される可能性はありませんから、両方共に破棄できます
<src><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="108" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;108</anchor-internal></src>。</comment-p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="109" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[109]</anchor-end> 未実行の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">タスク</anchor>と <code class="DOMi" xml:lang="en">MessagePort</code> の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ごみ収集</anchor>の関係として、
次のように規定されています。<figure class="list"><ul><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="113" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[113]</anchor-end> 当該<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">オブジェクト</anchor>で<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">イベント</anchor>を<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ディスパッチ</anchor>する<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">タスク</anchor>が<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">タスクキュー</anchor>に入っているなら、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ごみ収集</anchor>しては<MUST xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ならない</MUST> <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="108" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;108</anchor-internal></src>。</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="114" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[114]</anchor-end> 当該<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">オブジェクト</anchor>の<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><anchor>ポートメッセージキュー</anchor>の状態</f>が<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">有効</anchor>で、
<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ポートメッセージキュー</f>が空ではないなら、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ごみ収集</anchor>しては<MUST xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ならない</MUST> <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="108" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;108</anchor-internal></src>。</li></ul></figure></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="115" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[115]</anchor-end> このうち <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="113" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;113</anchor-internal> は通常の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">タスク</anchor>であれば当然に<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">タスク</anchor>から<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">イベント対象</anchor>への<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">強い参照</anchor>が維持されているはずと考えられるところ、
<code class="DOMe" xml:lang="en">message<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">onmessage</title></code> については実行時点で含まれる<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ポートメッセージキュー</anchor>の
<code class="DOMi" xml:lang="en">MessagePort</code> を<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">イベント対象</anchor>とする (<anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="71" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;71</anchor-internal>)
との変則的な規定があるための条件なのでしょうか。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="116" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[116]</anchor-end> <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="114" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;114</anchor-internal> は、逆に言えば<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ポートメッセージキュー</anchor>が無効の場合は実行されずに捨てられる
(かもしれない) し、空になったら捨てられる (かもしれない) ということです。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="117" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[117]</anchor-end> <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="113" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;113</anchor-internal> は <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="114" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;114</anchor-internal> に含まれるようにも読めますが、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">イベントループ</anchor>が<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">タスク</anchor>を実行しようとして<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ポートメッセージキュー</anchor>から取り出した瞬間に空になって
<code class="DOMi" xml:lang="en">MessagePort</code> が破棄されないために <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="113" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;113</anchor-internal> が必要なのでしょうか。
と思いましたが<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">タスク</anchor>は実行が終わるまで<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">タスクキュー</anchor>に残ったままですよね...</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="131" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[131]</anchor-end> <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="113" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;113</anchor-internal> は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">タスクキュー</anchor>に<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">タスク</anchor>が入っていれば、という規定になっていて、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ポートメッセージキュー</anchor>とは言っていません。<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ポートメッセージキュー</anchor>は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">タスク源</anchor>であるとはされていますが、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">タスクキュー</anchor>とはされていません (いかにも<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">タスクキュー</anchor>っぽい名前ですが)。
従って<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ポートメッセージキュー</anchor>が無効なら、 <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="113" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;113</anchor-internal> の条件には合致しないものと思われます。
(無効のまま <code class="DOMi" xml:lang="en">MessagePort</code> が破棄されたなら、有効化する手段がなくなるので、
捨てても捨てなくても観測できません。)</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="156" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[156]</anchor-end> 現実には <code class="DOMi" xml:lang="en">MessagePort</code> が無効のまま破棄された時、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">タスクキュー</anchor>内に<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ポートメッセージキュー</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">タスク</anchor>
(が<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">イベント対象</anchor>として保持している <code class="DOMi" xml:lang="en">MessagePort</code> 自身への参照)
も<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ごみ収集</anchor>されるよう、注意する必要があります。</p></section></section><section><h1><code class="DOMi" xml:lang="en">MessageChannel</code> インターフェイス <code class="DOMa" xml:lang="en">port1</code> 属性、 <code class="DOMa" xml:lang="en">port2</code> 属性</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="27" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[27]</anchor-end> <code class="DOMi" xml:lang="en">MessageChannel</code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">インターフェイス</anchor>の
<dfn><code class="DOMa" xml:lang="en">port1</code></dfn> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">IDL属性</anchor>と
<dfn><code class="DOMa" xml:lang="en">port2</code></dfn> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">IDL属性</anchor> <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="26" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;26</anchor-internal></src>
は、それぞれ<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文脈オブジェクト</anchor>の<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ポート1</f>と<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ポート2</f>を返します。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="28" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[28]</anchor-end> <code class="DOMi" xml:lang="en">MessageChannel</code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">オブジェクト</anchor>の<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ポート1</f></dfn>と<dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ポート2</f></dfn>は、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">コンストラクター</anchor>によって新たに作成された <code class="DOMi" xml:lang="en">MessagePort</code>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">オブジェクト</anchor>がそれぞれに設定されます。これらの値は変化することはありません。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="29" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[29]</anchor-end> 2つのポートは、作成された時点では (異なる<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">オブジェクト</anchor>であることを除けば)
まったく同じ初期状態です。どちらをどう使うかは、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">著者</anchor>が決めることができます。</p><example xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><p xmlns="http://www.w3.org/1999/xhtml"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="30" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[30]</anchor-end> 例えば <code>port1</code> の側を <code>postMessage</code> で通信の相手先に渡したら、
以後のこちら側の送受信には <code>port2</code> を使うことになります。
逆に <code>port2</code> を渡したら、 <code>port1</code> を使うことになります。</p></example></section><section><h1><code class="DOMi" xml:lang="en">MessagePort</code> インターフェイス <code class="DOMm" xml:lang="en">start<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">MessagePort</title></code> メソッド</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="88" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[88]</anchor-end> <code class="DOMi" xml:lang="en">MessagePort</code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">インターフェイス</anchor>の
<dfn><code class="DOMm" xml:lang="en">start<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">MessagePort</title></code></dfn>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">メソッド</anchor>は、次のようにしなければ<MUST xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">なりません</MUST> <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="32" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;32</anchor-internal></src>。</p><figure class="steps"><ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="89" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[89]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文脈オブジェクト</anchor>の<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><anchor>ポートメッセージキュー</anchor>の状態</f>が<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">無効</anchor>なら、<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="90" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[90]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文脈オブジェクト</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ポートメッセージキューの有効化</anchor>を実行します。</li></ol></li></ol></figure></section><section><h1><code class="DOMi" xml:lang="en">MessagePort</code> インターフェイス <code class="DOMm" xml:lang="en">close<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">MessagePort</title></code> メソッド</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="93" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[93]</anchor-end> <code class="DOMi" xml:lang="en">MessagePort</code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">インターフェイス</anchor>の
<dfn><code class="DOMm" xml:lang="en">close<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">MessagePort</title></code></dfn>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">メソッド</anchor>は、次のようにしなければ<MUST xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">なりません</MUST> <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="32" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;32</anchor-internal></src>。</p><figure class="steps"><ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="179" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[179]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文脈オブジェクト</anchor>の <f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" class="ss">Detached</f> を、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">真</anchor>に設定します。</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="94" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[94]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文脈オブジェクト</anchor>の<f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><anchor>entangle</anchor> されたポート</f>が <code>null</code> 以外なら、<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="95" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[95]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文脈オブジェクト</anchor>の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">disentangle</anchor> を実行します。</li></ol></li></ol></figure><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="112" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[112]</anchor-end> <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MessagePort</anchor></code> が不要になったら、明示的に閉じて <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">disentangle</anchor>
することが<rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">強く勧められています<rt xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">strongly encouraged</rt></rubyb>。
明示的に閉じずないと必ずしも即座に<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ごみ収集</anchor>されるとは限らないため (<anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="107" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;107</anchor-internal>)、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">メモリー</anchor>を無駄にすることとなります。 <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="108" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;108</anchor-internal></src></p></section><section><h1><code class="DOMi" xml:lang="en">MessageEvent</code> インターフェイス <code class="DOMa" xml:lang="en">ports</code> 属性</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="162" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[162]</anchor-end> <code class="DOMi" xml:lang="en">MessageEvent</code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">インターフェイス</anchor>と
<code class="DOMi" xml:lang="en">MessageEventInit</code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">辞書</anchor>の
<dfn><code class="DOMa" xml:lang="en">ports</code></dfn>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">IDL属性</anchor>/<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">辞書メンバー</anchor> <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="161" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;161</anchor-internal></src> は、
受信した <code class="DOMi" xml:lang="en">MessagePort</code> の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">配列</anchor>を表します。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="163" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[163]</anchor-end> 値は <code class="DOMi" xml:lang="en">MessagePort</code> の <code>sequence<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">sequence&lt;&gt;</title></code> です
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="12" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;12</anchor-internal></src>。<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">辞書</anchor>での既定値は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">空</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">配列</anchor>です <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="12" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;12</anchor-internal></src>。</p></section><section><h1>歴史</h1><refs xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><ul xmlns="http://www.w3.org/1999/xhtml"><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="72" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[72]</anchor-end> <cite xml:lang="en"><strong>[</strong><strong>]</strong> (0) Simplify message ports: use queueing instead of transient 'act…</cite> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Hixie</anchor>著, <time>2008-08-06 16:24:38 +09:00</time>) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/whatwg/html/commit/ebefa1c712950ea904e2e4877caa13db8b1d9104">https://github.com/whatwg/html/commit/ebefa1c712950ea904e2e4877caa13db8b1d9104</anchor-external></li></ul></refs><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="73" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[73]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ポートメッセージキュー</anchor>はここで導入されました。
open と closed の2つの状態を持っていました。
この時同時に追加された <code>start</code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">メソッド</anchor>を呼び出すか、
<code>onmessage</code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">IDL属性</anchor>に値を設定するかのいずれかにより、
closed から open へと遷移することとされていました。</p><refs xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><ul xmlns="http://www.w3.org/1999/xhtml"><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="110" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[110]</anchor-end> <cite xml:lang="en">Web Applications 1.0 r2024 Simplify garbage collection for ports even further. Define dicarding of Document objects better for ports. Prevent inactive documents from receiving messages.</cite> (<time>2008-08-06 16:57:00 +09:00</time> 版) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://html5.org/tools/web-apps-tracker?from=2023&amp;to=2024">http://html5.org/tools/web-apps-tracker?from=2023&amp;to=2024</anchor-external></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="132" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[132]</anchor-end> r2043 <cite xml:lang="en"><strong>[</strong><strong>]</strong> (0) Add a startConversation() method that wraps new MessageChannel…</cite> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Hixie</anchor>著, <time>2008-08-11 16:34:01 +09:00</time>) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/whatwg/html/commit/8f86a0c7e1ce7d2f99102378720a47dd3766083d">https://github.com/whatwg/html/commit/8f86a0c7e1ce7d2f99102378720a47dd3766083d</anchor-external></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="74" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[74]</anchor-end> <cite xml:lang="en">Web Applications 1.0 r2085 Further work on the event loop front. (WebSockets, postMessage, MessagePorts, setTimeout)</cite>
(<time>2008-08-19 18:30:00 +09:00</time> 版)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://html5.org/r/2085">https://html5.org/r/2085</anchor-external></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="111" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[111]</anchor-end> <cite xml:lang="en">Web Applications 1.0 r2357    Define MessagePort such that they won't be garbage collected while a message is outstanding. (credit: ap)</cite> (<time>2008-10-21 04:18:00 +09:00</time> 版) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://html5.org/tools/web-apps-tracker?from=2356&amp;to=2357">http://html5.org/tools/web-apps-tracker?from=2356&amp;to=2357</anchor-external></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="75" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[75]</anchor-end> <cite xml:lang="en"><strong>[</strong>gwr<strong>]</strong> (2) MessagePorts shouldn't be GCed even when their queue is clo…</cite> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Hixie</anchor>著, <time>2008-10-21 19:24:55 +09:00</time>) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/whatwg/html/commit/7c0d06509cbfc808e06aac3b4ae8edafbf0a771c">https://github.com/whatwg/html/commit/7c0d06509cbfc808e06aac3b4ae8edafbf0a771c</anchor-external></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="76" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[76]</anchor-end> <cite xml:lang="en">Web Applications 1.0 r2531    Simplify the way messages in ports are handled when the destination's document is not available.</cite>
(<time>2008-12-16 10:01:00 +09:00</time> 版)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://html5.org/r/2531">https://html5.org/r/2531</anchor-external></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="133" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[133]</anchor-end> r2532 <cite xml:lang="en"><strong>[</strong>gw<strong>]</strong> (2) Drop MessagePort.onclose. Make MessagePort's message queue a…</cite> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Hixie</anchor>著, <time>2008-12-16 10:33:52 +09:00</time>) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/whatwg/html/commit/7ec8efc310084ea89b71358dd070f535a1e43904">https://github.com/whatwg/html/commit/7ec8efc310084ea89b71358dd070f535a1e43904</anchor-external></li></ul></refs><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="134" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[134]</anchor-end> これまで<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">投稿済みメッセージタスク源</anchor>が使われていましたが、
<anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="133" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;133</anchor-internal> により、使われなくなりました。</p><refs xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><ul xmlns="http://www.w3.org/1999/xhtml"><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="77" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[77]</anchor-end> <cite xml:lang="en">Web Applications 1.0 r2912 Implicitly open the port message queue of dedicated workers. (Before, they would never actually receive messages, oops...)</cite>
(<time>2009-03-26 08:08:00 +09:00</time> 版)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://html5.org/r/2912">https://html5.org/r/2912</anchor-external></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="78" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[78]</anchor-end> <cite xml:lang="en">Web Applications 1.0 r6384 Give more explanation about how workers work.</cite>
(<time>2011-08-09 05:10:00 +09:00</time> 版)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://html5.org/r/6384">https://html5.org/r/6384</anchor-external></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="79" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[79]</anchor-end> <cite xml:lang="en">Web Applications 1.0 r7669     Make MessagePort objects synchronised until they are posted through another port.</cite> (<time>2013-01-30 05:59:00 +09:00</time> 版) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://html5.org/tools/web-apps-tracker?from=7668&amp;to=7669">http://html5.org/tools/web-apps-tracker?from=7668&amp;to=7669</anchor-external></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="80" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[80]</anchor-end> <cite xml:lang="en">Web Applications 1.0 r8153  Disabled port message queues shouldn't have their messages dispatched when they're still unshipped, nor should they stall the entire message queueing mechanism.</cite>
(<time>2013-08-27 02:59:00 +09:00</time> 版)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://html5.org/r/8153">https://html5.org/r/8153</anchor-external></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="81" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[81]</anchor-end> <cite xml:lang="en">Web Applications 1.0 r8154 Reorganise the stuff about port message queues to be clearer.</cite>
(<time>2013-08-27 03:02:00 +09:00</time> 版)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://html5.org/r/8154">https://html5.org/r/8154</anchor-external></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="82" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[82]</anchor-end> <cite xml:lang="en"><strong>[</strong>giow<strong>]</strong> (0) Make sure subsequent owners of an ill-fated port's friend …</cite> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Hixie</anchor>著, <time>2013-12-12 04:51:50 +09:00</time>) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/whatwg/html/commit/3d29c3388dd70a93f4d1704f6f3ba5a32a7dd20e">https://github.com/whatwg/html/commit/3d29c3388dd70a93f4d1704f6f3ba5a32a7dd20e</anchor-external></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="83" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[83]</anchor-end> <cite xml:lang="en">Web Applications 1.0 r8864 Fix the mess I made of port message queues. I'm pretty sure originally they weren't task sources and I corrupted them at some point to be that without changing what I was putting in them. Anyway at this point it's easier just to say that they're real task sources and thus have tasks, even if those tasks have to now be a little more complicated than ideal.</cite>
(<time>2014-11-27 09:29:00 +09:00</time> 版)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://html5.org/r/8864">https://html5.org/r/8864</anchor-external></li></ul></refs><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[1]</anchor-end> <cite>IRC logs: freenode / #whatwg / 20130604</cite>
( (<time>2013-06-06 22:25:38 +09:00</time> 版))
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://krijnhoetmer.nl/irc-logs/whatwg/20130604">http://krijnhoetmer.nl/irc-logs/whatwg/20130604</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[2]</anchor-end> <cite><strong></strong>[<strong></strong>whatwg<strong></strong>]<strong></strong> onclose events for MessagePort</cite>
( (<time>2013-10-29 23:45:30 +09:00</time> 版))
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2013-October/041298.html">http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2013-October/041298.html</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[3]</anchor-end> <cite xml:lang="en">Web Applications 1.0 r8306     People apparently don't like it when the spec requires things that are impossible to implement, go figure. (In this case, synchronously detecting that one of the MessagePorts being Transferred in the MessagePort message is actually the target of the message. You can't necessarily know this synchronously, since if the port has been shunted around between workers, you might only discover who the final target actually is after the message has itself bounced between threads for a while.)</cite>
( (<time>2013-11-22 08:48:00 +09:00</time> 版))
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://html5.org/tools/web-apps-tracker?from=8305&amp;to=8306">http://html5.org/tools/web-apps-tracker?from=8305&amp;to=8306</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="4" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[4]</anchor-end> <cite><strong></strong>[<strong></strong>whatwg<strong></strong>]<strong></strong> onclose events for MessagePort</cite>
( (<time>2013-12-07 10:22:36 +09:00</time> 版))
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2013-December/041739.html">http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2013-December/041739.html</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="5" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[5]</anchor-end> <cite xml:lang="en">Web Applications 1.0 r8336     Add a way to catch the other side of a port having a catastrophic death.</cite>
( (<time>2013-12-07 10:22:00 +09:00</time> 版))
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://html5.org/tools/web-apps-tracker?from=8335&amp;to=8336">http://html5.org/tools/web-apps-tracker?from=8335&amp;to=8336</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="6" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[6]</anchor-end> <cite xml:lang="en">Web Applications 1.0 r8341     Updates for r8297, fixing &lt;option&gt; to treat 'dirtiness' correctly, and r8336, fixing 'error' events sent to MessagePort objects to not race messages sent from those ports (or, worse, the event that the port is delivered on...).</cite>
( (<time>2013-12-12 02:41:00 +09:00</time> 版))
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://html5.org/tools/web-apps-tracker?from=8340&amp;to=8341">http://html5.org/tools/web-apps-tracker?from=8340&amp;to=8341</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="7" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[7]</anchor-end> <cite>IRC logs: freenode / #whatwg / 20131218</cite>
( (<time>2013-12-20 09:03:33 +09:00</time> 版))
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://krijnhoetmer.nl/irc-logs/whatwg/20131218">http://krijnhoetmer.nl/irc-logs/whatwg/20131218</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="8" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[8]</anchor-end> <cite xml:lang="en">Web Applications 1.0 r8342     Make sure subsequent owners of an ill-fated port's friend can know about that fate</cite>
( (<time>2013-12-12 04:51:00 +09:00</time> 版))
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://html5.org/tools/web-apps-tracker?from=8341&amp;to=8342">http://html5.org/tools/web-apps-tracker?from=8341&amp;to=8342</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="9" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[9]</anchor-end> <cite><strong></strong>[<strong></strong>whatwg<strong></strong>]<strong></strong> onclose events for MessagePort</cite>
( (<time>2014-01-31 18:43:03 +09:00</time> 版))
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2014-January/041953.html">http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2014-January/041953.html</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="10" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[10]</anchor-end> <cite xml:lang="en">Web Applications 1.0 r2020 Make MessagePort objects not be owned by Windows necessarily, and remove ownerWindow.</cite>
( (<time>2008-08-06 09:25:00 +09:00</time> 版))
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://html5.org/r/2020">https://html5.org/r/2020</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="11" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[11]</anchor-end> <cite xml:lang="en">Web Applications 1.0 r2116 Change 'unload' to 'close' for MessagePorts.</cite>
( (<time>2008-08-26 19:36:00 +09:00</time> 版))
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://html5.org/r/2116">https://html5.org/r/2116</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="12" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[12]</anchor-end> <cite xml:lang="en">Web Applications 1.0 r2531    Simplify the way messages in ports are handled when the destination's document is not available.</cite>
( (<time>2008-12-16 10:01:00 +09:00</time> 版))
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://html5.org/r/2531">https://html5.org/r/2531</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="13" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[13]</anchor-end> <cite xml:lang="en">Web Applications 1.0 r2032 Remove redundant event listeners on MessagePort.</cite>
( (<time>2008-08-08 13:14:00 +09:00</time> 版))
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://html5.org/r/2032">https://html5.org/r/2032</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="14" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[14]</anchor-end> <cite xml:lang="en">Web Applications 1.0 r2031 MessagePort should implement EventTarget.</cite>
( (<time>2008-08-07 07:56:00 +09:00</time> 版))
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://html5.org/r/2031">https://html5.org/r/2031</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="15" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[15]</anchor-end> <cite xml:lang="en">Web Applications 1.0 r3346   Allow cloning and posting of closed ports. (credit: dw)</cite>
( (<time>2009-07-01 12:55:00 +09:00</time> 版))
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://html5.org/r/3346">https://html5.org/r/3346</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="16" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[16]</anchor-end> <cite xml:lang="en">Web Applications 1.0 r2885 postMessage() methods that take MessagePort objects now take MessagePortArray objects.</cite>
( (<time>2009-03-21 06:09:00 +09:00</time> 版))
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://html5.org/r/2885">https://html5.org/r/2885</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="17" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[17]</anchor-end> <cite xml:lang="en">Web Applications 1.0 r2024 Simplify garbage collection for ports even further. Define dicarding of Document objects better for ports. Prevent inactive documents from receiving messages.</cite>
( (<time>2008-08-06 16:57:00 +09:00</time> 版))
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://html5.org/r/2024">https://html5.org/r/2024</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="18" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[18]</anchor-end> <cite xml:lang="en">Web Applications 1.0 r3227 Fix the garbage collection rules for ports to actually make sense, and add a note for authors urging them not to rely on the gc for ports.</cite>
( (<time>2009-06-12 12:22:00 +09:00</time> 版))
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://html5.org/r/3227">https://html5.org/r/3227</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="19" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[19]</anchor-end> <cite xml:lang="en">Web Applications 1.0 r3147 Clarify MessagePort GC rules.</cite>
( (<time>2009-05-29 09:38:00 +09:00</time> 版))
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://html5.org/r/3147">https://html5.org/r/3147</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="20" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[20]</anchor-end> <cite xml:lang="en">Web Applications 1.0 r2358    MessagePorts shouldn't be GCed even when their queue is closed if they have events targetted at them. (credit: ap)</cite>
( (<time>2008-10-21 19:24:00 +09:00</time> 版))
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://html5.org/r/2358">https://html5.org/r/2358</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="21" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[21]</anchor-end> <cite xml:lang="en">Web Applications 1.0 r2023 Simplify message ports: use queueing instead of transient 'active' functionality. Also, make localStorage use the same mechanism for obtaining origin as openDatabase().</cite>
( (<time>2008-08-06 16:24:00 +09:00</time> 版))
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://html5.org/r/2023">https://html5.org/r/2023</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="22" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[22]</anchor-end> <cite xml:lang="en">Web Applications 1.0 r2357    Define MessagePort such that they won't be garbage collected while a message is outstanding. (credit: ap)</cite>
( (<time>2008-10-21 04:18:00 +09:00</time> 版))
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://html5.org/r/2357">https://html5.org/r/2357</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="23" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[23]</anchor-end> <cite xml:lang="en">Add &lt;script type=&quot;module&quot;&gt; and module resolution/fetching/evaluation · whatwg/html@cd1a9fb</cite>
(<time>2016-01-29 22:56:17 +09:00</time> 版)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/whatwg/html/commit/cd1a9fb1e83f7d0bc30be8b34ecdaf444a0b19a4">https://github.com/whatwg/html/commit/cd1a9fb1e83f7d0bc30be8b34ecdaf444a0b19a4</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="24" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[24]</anchor-end> <cite xml:lang="en">Write structured clone algorithm in terms of ECMAScript · whatwg/html@bfb960c</cite>
(<time>2016-03-02 16:39:51 +09:00</time> 版)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/whatwg/html/commit/bfb960c938580c95e77365e614218b952f96375b">https://github.com/whatwg/html/commit/bfb960c938580c95e77365e614218b952f96375b</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="25" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[25]</anchor-end> <cite xml:lang="en">Use FrozenArray for Navigator#languages and MessageEvent#ports · whatwg/html@e4df68a</cite>
(<time>2016-03-25 13:56:53 +09:00</time> 版)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/whatwg/html/commit/e4df68a41b86753c7fcdd0d8ea4615f63ffc87e9">https://github.com/whatwg/html/commit/e4df68a41b86753c7fcdd0d8ea4615f63ffc87e9</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="158" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[158]</anchor-end> <cite xml:lang="en">28813 – There's no way to tell when a MessagePort is closed.</cite>
(<time>2016-12-14 13:18:03 +09:00</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://www.w3.org/Bugs/Public/show_bug.cgi?id=28813">https://www.w3.org/Bugs/Public/show_bug.cgi?id=28813</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="159" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[159]</anchor-end> <cite xml:lang="en">Use FrozenArray for Navigator#languages and MessageEvent#ports · whatwg/html@e4df68a</cite>
(<time>2016-03-25 13:51:40 +09:00</time> 版)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/whatwg/html/commit/e4df68a41b86753c7fcdd0d8ea4615f63ffc87e9">https://github.com/whatwg/html/commit/e4df68a41b86753c7fcdd0d8ea4615f63ffc87e9</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="160" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[160]</anchor-end> <cite xml:lang="en">Make MessageEvent's ports attribute non-nullable</cite>
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">cdumez</anchor>著, <time>2016-10-11 07:09:55 +09:00</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/whatwg/html/commit/df2c0c448612d5b8ab85ad3c6ce0255ee11c0b01">https://github.com/whatwg/html/commit/df2c0c448612d5b8ab85ad3c6ce0255ee11c0b01</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="164" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[164]</anchor-end> <cite xml:lang="en">Breaking: refactor structured clone into serialize/deserialize</cite>
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">domenic</anchor>著, <time>2017-03-21 06:09:33 +09:00</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/whatwg/html/commit/97d644c97335956610a31e8ad98d1a388c063e84">https://github.com/whatwg/html/commit/97d644c97335956610a31e8ad98d1a388c063e84</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="62" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[62]</anchor-end> <cite xml:lang="en">Breaking: refactor structured clone into serialize/deserialize</cite>
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">domenic</anchor>著, <time>2017-03-21 06:09:33 +09:00</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/whatwg/html/commit/97d644c97335956610a31e8ad98d1a388c063e84">https://github.com/whatwg/html/commit/97d644c97335956610a31e8ad98d1a388c063e84</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="141" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[141]</anchor-end> <cite xml:lang="en">Editorial: restructure ownership of workers to parent-owners</cite>
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">annevk</anchor>著, <time>2017-04-14 14:47:44 +09:00</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/whatwg/html/commit/59a4750f475acd789ee436b4906972ba2081d8b3">https://github.com/whatwg/html/commit/59a4750f475acd789ee436b4906972ba2081d8b3</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="172" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[172]</anchor-end> <cite xml:lang="en">Editorial: restructure ownership of workers to parent-owners</cite>
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">annevk</anchor>著, <time>2017-04-14 14:47:44 +09:00</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/whatwg/html/commit/59a4750f475acd789ee436b4906972ba2081d8b3">https://github.com/whatwg/html/commit/59a4750f475acd789ee436b4906972ba2081d8b3</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="173" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[173]</anchor-end> <cite xml:lang="en">Meta: remove &quot;ILLFATED&quot; MessagePort design</cite>
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">annevk</anchor>著, <time>2017-04-25 22:41:34 +09:00</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/whatwg/html/commit/1208d255eddebe7efc3bba59bc297709e3b30660">https://github.com/whatwg/html/commit/1208d255eddebe7efc3bba59bc297709e3b30660</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="174" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[174]</anchor-end> <cite xml:lang="en">Introduce MessagePort on AudioWorkletNode/Processor by hoch · Pull Request #1233 · WebAudio/web-audio-api</cite>
(<time>2017-10-01 16:25:43 +09:00</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/WebAudio/web-audio-api/pull/1233">https://github.com/WebAudio/web-audio-api/pull/1233</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="175" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[175]</anchor-end> <cite xml:lang="en">Expose MessagePort to AudioWorklet</cite>
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">hoch</anchor>著, <time>2017-10-03 17:07:58 +09:00</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/whatwg/html/commit/458347c0d677dbd6e2414d6f435c77fbb9c9eab1">https://github.com/whatwg/html/commit/458347c0d677dbd6e2414d6f435c77fbb9c9eab1</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="176" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[176]</anchor-end> <cite xml:lang="en">Expose MessagePort to AudioWorklet · Issue #3081 · whatwg/html</cite>
(<time>2017-10-04 17:06:07 +09:00</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/whatwg/html/issues/3081">https://github.com/whatwg/html/issues/3081</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="177" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[177]</anchor-end> <cite xml:lang="en">Fix 3081: Expose MessagePort in AudioWorklet by hoch · Pull Request #3082 · whatwg/html</cite>
(<time>2017-10-04 17:06:39 +09:00</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/whatwg/html/pull/3082">https://github.com/whatwg/html/pull/3082</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="178" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[178]</anchor-end> <cite xml:lang="en">Make MessageChannel's close() set <strong>[</strong><strong>[</strong>Detached<strong>]</strong><strong>]</strong></cite>
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">annevk</anchor>著, <time>2018-04-28 01:57:39 +09:00</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/whatwg/html/commit/ee5ff06ce0f13ecd73ab4461983f6faec7e88a7a">https://github.com/whatwg/html/commit/ee5ff06ce0f13ecd73ab4461983f6faec7e88a7a</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="180" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[180]</anchor-end> <cite xml:lang="en">Make MessagePort's close() set <strong>[</strong><strong>[</strong>Detached<strong>]</strong><strong>]</strong> by annevk · Pull Request #3584 · whatwg/html</cite>
(<time>2018-05-02 13:31:18 +09:00</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/whatwg/html/pull/3584">https://github.com/whatwg/html/pull/3584</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="181" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[181]</anchor-end> <cite xml:lang="en">Make MessagePort's close() detach by annevk · Pull Request #10123 · w3c/web-platform-tests</cite>
(<time>2018-05-02 13:31:35 +09:00</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/w3c/web-platform-tests/pull/10123">https://github.com/w3c/web-platform-tests/pull/10123</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="182" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[182]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Mobile Safari</anchor> の
<code>MessagePort</code>、
<code>&lt;input type=file&gt;</code>
で <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">iOS</anchor> の画像選択に一旦遷移して戻ってくると、
何を送っても相手に届かない状態になる??
<time>2018-09-20T08:51:01.200Z</time></p></section></body></html>