[1] [[Web]] 関連の[[仕様書]]では、[[プログラム]]の動作に関する要件の多くや[[文書]]の適合性に関する要件の一部は[DFN[[RUBYB[[[アルゴリズム]]]@en[algorithm]]]]として記述されています。

* 仕様書

[REFS[
- [5] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2014-09-19 23:39:59 +09:00]] 版) <https://html.spec.whatwg.org/#conformance-requirements>
]REFS]

* 呼称

[2] 一連の処理をまとめたものの呼称として、「[RUBYB[アルゴリズム]@en[algorithm]]」
の他に「[DFN[steps]]」も用いられています。両者間に明確な使い分けはないようです。

;; [35] 「アルゴリズム」も「steps」も、構成する各段階は「step」といいます。

* 記述

[3] [[仕様書]]上の[[アルゴリズム]]の記述方法は、
共通の規定はなく、各[[仕様書]]によって若干の違いがあります。

[4] 現在ほとんどの[[仕様書]]では、[[自然言語]] ([[英語]]) 
により規定を述べています。

* 適合性

[8] [[アルゴリズム]]として記述された[[要件]]は、必ずしもそのまま実装しなくても構いません。
外部から観測可能な結果が同じである限り、任意の方法で実装して構いません。 [SRC[>>5]]

;; [9] このことは明記されていない[[仕様書]]もありますが、
どの[[仕様書]]でもそうであると理解されています。
[[アルゴリズム]]の形での要件の記述は、それが最も正確な記述方法であるから採用されているだけで、
実装方法を制約する意図はありません。特に、わかりやすさのために性能を度外視していることがあります
[SRC[>>5]]。

[6] [[RFC 2119]] [[助動詞]]によって[[要件]]を明記するスタイルの[[仕様書]]
([[HTML Standard]] など) では、[[アルゴリズム]]内の動作は[[命令形]]で記述し、
[[アルゴリズム]]全体を説明する文の[[助動詞]]が[[命令形]]の各[[文]]に適用されることとしています
[SRC[>>5]]。

[EG[
[7] 例えば、
>
To eat an orange, the user [['''MUST''']]:
[FIG(steps)[
= Peel the orange.
= Separate each slice of the orange.
= Eat the orange slices.
]FIG]

... は、
>
To eat an orange:
[FIG(steps)[
= The user [['''MUST''']] peel the orange.
= The user [['''MUST''']] separate each slice of the orange.
= The user [['''MUST''']] eat the orange slices.
]FIG]

... と同じ[[要件]]を表しています [SRC[>>5]]。
]EG]

* フロー制御

[10] [[アルゴリズム]]の各段階は「step」と呼ばれます。 step
の粒度は仕様書の筆者や個々のアルゴリズムによって様々で一概には言えませんが、
[[プログラミング言語]]で一行で書ける単位 (一般的に「1ステップ」とされる粒度)
となっていることが多いようです。

[13] step は必要があれば連番によって参照されますが、ジャンプなどで参照される時は名前が付されていることがあります。

[EG[
>
= '''Rewind''': If there are no entries before [VAR[entry]] in the list of active formatting elements, then jump to the step labeled '''create'''.
]EG]

[11] step は入れ子になっていたり、条件分岐となっていたりすることもあります。
step の中の step は「substep」と呼ばれます。

[12] 一連の step は、記述の順に実行されます。すなわち、
[[連接]]は先のものから順に実行することを表しています。
ただし、分岐などにより飛ばされることもあります。

[14] ジャンプは「jump to」や「go to」、「return to」などの表現で飛び先の step
が指定されます。飛び先は「次のステップ」のような相対的な表現のこともあります。

[EG[
>
= If [VAR[node]] is [VAR[formatting element]], then go to the next step in the overall algorithm.
]EG]

[15] 条件分岐は「if」や「unless」などの文章で表現されたり、
変数などの値によって動作が指定されたり ([[switch]]) します。

[16] 反復は「for each」、「while」、「repeat」のような文章で表現されることがあります。

;; [17] [[Ian Hickson]] の仕様書では反復は「if」と「go to」などで表現されることが多いです。

[18] アルゴリズムの停止は、「abort these steps」などの表現により示されます。
ただしアルゴリズムの末端では自明に停止するため明記されないのが普通です。

[19] アルゴリズムは値を返す場合があり、「return」を使った文章で返す値が指定されます。
またアルゴリズムは[[例外]]を投げる場合があり、「throw」を使った文章で記述されます。
[[Ian Hickson]] の仕様書ではこれらの場合でも「abort these steps」
を明記するのが普通ですが (場合によっては更に処理が続くこともあります。)、
仕様書によっては暗示的にアルゴリズムが停止することにしている場合もあるので、
注意が必要です。

[22] アルゴリズムの返すものは常に同じ種類とは限りません。処理の内容によって違う種類 (型)
のものを返すことがあります。また値ではなく「失敗」のような概念を返すことがあります。

[32] [[継続]]については[[イベントループのスピン]]を参照。

* アルゴリズムの呼び出し

[20] アルゴリズムは他のアルゴリズムを呼び出すことがあります
(直接または間接に自身を呼び出すこともあります)。
その場合、元のアルゴリズムは一旦停止し、呼び出したアルゴリズムが返した結果を (あれば) 
受け取ってから処理を継続します。呼び出したアルゴリズムが[[例外]]を投げた場合は、
明示的に[[捕獲]]していない限り元のアルゴリズムもそのまま停止すると解釈されています (このことは各[[仕様書]]には必ずしも明記されていませんので、注意が必要です)。

[27] 「[[即座に実行]]」と明記されることがありますが、普通は明記されなくても原則として[[アルゴリズム]]は規定された事象が発生した時点で[[即座]]に実行されます。

[21] 呼び出されたアルゴリズムは呼び出したアルゴリズムの変数にアクセスしないのが普通ですが、
中には呼び出したアルゴリズムの変数にアクセスするものもあります。その場合はその旨が明記されています。

** フック

[23] アルゴリズムの中では「フック」を呼び出すものがあります。これは[[仕様書]]の記述上の技法で、
他の仕様書または同じ仕様書の他の場所で定義されたアルゴリズム群の実行のタイミングを明確にしつつも、
それらを別々の箇所で規定するものです。

[EG[
[24] 例えば [[DOM Standard]] は[[要素]]の[[挿入]]のアルゴリズムの途中で [[insertion steps]]
を呼び出します。 [[HTML Standard]] はいくつかの [[HTML要素]]に関して [[insertion steps]]
を定義しています。これらにより、例えば [CODE(HTMLe)@en[[[script]]]] [[要素]]が
[CODE(DOMm)@en[[[appendChild]]]] されると[[スクリプト]]が実行される、
という動作が規定されています。
]EG]

[25] フックの実行方法は他の[[アルゴリズム]]と変わりません。
ただしフックは該当する[[アルゴリズム]]が複数存在することがあり、
その場合はいずれをも実行します。該当する[[アルゴリズム]]が存在しない時は何も実行しません。

;; [26] 複数存在しても、それらの実行順序が問題となることはないように規定されているはずです。

** 並列性

[28] [[アルゴリズム]]の一部または全部が[[並列]]に実行されることがあります。
その場合は[[並列]]に実行される部分を無視した続きを継続して処理するものと、
[[並列]]に実行される部分を処理するもので、複数の処理が同時に進行することになります。

;; 詳しくは[[並列実行]]を参照。

[29] また[[並列]]に実行した処理の後のいくつかの step が[[同期区間]]として記されていることがあります。
[[同期区間]]は[[安定状態]]を待って[[イベントループ]]内で実行されるものです。

;; 詳しくは[[安定状態]]を参照。

[41] [[並列に]]実行されている他の[[アルゴリズム]]を[RUBYB[停止]@en[abort]]させることがあります。

[EG[
[42] [[fetch]] 関係の[[アルゴリズム]]や[[バイブレーションを実施]]する[[アルゴリズム]]は、
自身が別途実行中なら、それを停止させることがあります。

[43] [[バイブレーションを実施]]する[[アルゴリズム]]は他の[[アルゴリズム]]により停止されることがあります。
]EG]

[30] [[I/O]] に関わる処理のほとんどは[[並列]]に実行されることになっています。

[44] [[並列]]でないことを[[即座]]に実行するといいます。通常[[アルゴリズム]]は別途指定がなければ各段階を[[即座]]に順に実行していきますが、
そのことを明確にするために敢えて[[即座]]に実行すると指示されることもあります。

[54] 他の処理や、何らかの条件が整うのを[[待って][wait]]、次の処理に進むよう指示されている場合もあります。

;; [[仕様書]]は[[仕様書]]としての正確性や理解の容易性を優先しているので、
そのままの形で実装できる場合もあれば、「待つ」を使わない形に読み替えて実装するのが現実的な場合もあります。

** 遅延実行

[31] [[アルゴリズム]]の一部または全部の実行は[[キュー]]に入れられて遅延されることがあります。
そのような[[キュー]]には次のものがあります。

[FIG(short list)[
- [[タスクキュー]]
- [[マイクロタスクキュー]]
- [[大域スクリプト片付けジョブリスト]]
- [[セッション履歴探索キュー]]
- [[pending application cache download process tasks]]
- [[animation frame task]]
]FIG]

;; [33] [[安定状態]]を待って[[同期区間]]を実行する手順は[[マイクロタスクキュー]]に入れられます。

* 歴史

[36] [[プロトコル]]の動作や[[マーク付け言語]]の処理の規定などを[[アルゴリズム]]の形で記述することは古くから部分的に行われてきましたが、どちらかといえば例外的なものとされることがほとんどでした。
[[アルゴリズム]]が提示される場合であっても、[[規定]]ではなく[[参考]]とされることも多々ありました。

[37] これは[[アルゴリズム]]の提示によって実装方法が必要以上に詳細に制限されてしまうのを避ける目的があったり、
[[アルゴリズム]]による[[手続き的]]な記述よりも[[宣言的]]な記述や[[構文記述言語]]等による[[形式的]]な記述がより理解しやすい、あるいは政治的に好ましいと考える人が多いことに由来しているようです。
関連する分野で歴史的に使われてきた記述方法を引き継ぐ (例えば同じ [[BNF]] の[[方言]]を用いる)
場合も多々ありました。

[38] しかし、少なくても [[Web]] においては、従来の仕様書が曖昧にしていたことが原因で[[相互運用性]]に著しい支障をもたらしたことがわかってきたこと、
理解にしやすさに難があったとしてもこれ以上に正確に記述する方法が他にないことなどから、
[[アルゴリズム]]による規定が一般的になってきました。

[40] [[Web]] 関連仕様の中では、 [[ECMAScript]] が[[プログラミング言語]]の仕様書ということもあり、早くから[[アルゴリズム]]による詳細な処理方法の規定を行っていました。

[39] 00年代の中期に [[Ian Hickson]] による [[Web Applications 1.0]] (現在の [[HTML Standard]])
が[[HTML構文解析器]]をはじめとする [[HTML]] の処理方法を[[アルゴリズム]]の形で正確に規定するようになり、
やがて [[Web IDL]]、 [[DOM]]、[[CSSOM]]、[[Fetch]]、[[CSP]] など他の仕様書でも同様の形で規定するようになりました。

[REFS[
- [34] [CITE@en[Add algorithms be implemented in any manner · f765c1a · whatwg/url]] ([TIME[2014-10-23 02:21:07 +09:00]] 版) <https://github.com/whatwg/url/commit/f765c1ad6bf6e339f5ccca0476ea6ef1c1ff51cf>
]REFS]

[FIG(quote)[
[FIGCAPTION[
[45] [CITE@en[Re: Writing spec algorithms in ES6?]]
([[Joshua Bell]] 著, [TIME[2015-06-12 06:25:20 +09:00]] 版)
<https://lists.w3.org/Archives/Public/public-webapps/2015AprJun/0865.html>
]FIGCAPTION]

> I just did a rework of the IDB "v2" editor's draft and probably 90% of the
> spec is basically an additional layer of "bindings" between
> WebIDL/ECMAScript and the the core concepts of the spec. That 90% was
> previously written as blocks of prose rather than imperative algorithms and
> behavior does differ among implementations. Fortunately, that mostly
> applies to edge cases (bad inputs, getters/setters). Maybe it's just IDB,
> but the remaining 10%of the spec is where all the fun
> implementation-specific optimizations happen and is 90% of the actual code,
> it's just short in the spec because it can be described in abstract terms.

]FIG]


[46] [CITE[IRC logs: freenode / #whatwg / 20150914]]
([TIME[2015-09-15 10:58:37 +09:00]] 版)
<http://krijnhoetmer.nl/irc-logs/whatwg/20150914>

[FIG(quote)[
[FIGCAPTION[
[47] [CITE@en[Deprecating old IDL]]
([[Marcos Caceres]] 著, [TIME[2015-09-20 00:55:21 +09:00]] 版)
<https://lists.w3.org/Archives/Public/public-script-coord/2015JulSep/0074.html>
]FIGCAPTION]

> specs should be imperative, not declarative. Imperative in that they should define the algorithms/behavior, and not be a collection of statements.

]FIG]


[48] [CITE@en[Use . instead of @ for internal slot access]]
( ([[domenic]]著, [TIME[2016-06-04 05:44:36 +09:00]]))
<https://github.com/whatwg/streams/commit/7791c58dbb8ebd470b6e5ecfeb0fa25107a0f638>

[49] [CITE@en[Editorial: refactor to depend on the Infra Standard]]
([[domenic]]著, [TIME[2016-11-17 07:29:00 +09:00]])
<https://github.com/whatwg/html/commit/4ac633e08c2c9430853fc8322943bc2438ed36a3>

[50] [CITE@en[Editorial: start using the Infra Standard]]
([[annevk]]著, [TIME[2016-11-18 20:21:54 +09:00]])
<https://github.com/whatwg/encoding/commit/a26f76889bf393999e9caad84a3647ab09c39e09>

[51] [CITE@en[Editorial: make use of the Infra Standard]]
([[annevk]]著, [TIME[2016-11-18 20:06:36 +09:00]])
<https://github.com/whatwg/dom/commit/bb2890beed2be14d2f7633ec89e2bbb88ec7fdcd>

[52] [CITE@en[Define 'continue' and 'break' statements]]
([[mikewest]]著, [TIME[2016-11-22 03:27:37 +09:00]])
<https://github.com/whatwg/infra/commit/8fbf990dcdb5f7ee80a85b569cba61a056fe1cc5>

[53] [CITE@en[Use INFRA.]]
([[mikewest]]著, [TIME[2016-11-30 20:25:40 +09:00]])
<https://github.com/w3c/webappsec-csp/commit/8a2b0ebd25ea8d0e793ab48a1c51a6d45834fab5>

[55] [CITE@en['''['''css-timing''']''' Add section on serialization]]
([[birtles]]著, [TIME[2017-01-19 11:33:26 +09:00]])
<https://github.com/w3c/csswg-drafts/commit/6165ee591e0d6eabf18fe7534cc77d81b93ac958>

[56] [CITE@en[Editorial: use the Infra Standard for URL's path]]
([[annevk]]著, [TIME[2017-02-10 02:32:12 +09:00]])
<https://github.com/whatwg/url/commit/2f99502dc12b781f5bf6a062257ba031c7129c1e>

[57] [CITE[Writing Procedural Specs]]
([TIME[2017-03-01 08:47:36 +09:00]])
<https://garykac.github.io/procspec/>

[58] [CITE@en[What was the motive in choosing algorithm description approach? · Issue #82 · whatwg/infra]]
([TIME[2017-03-22 19:27:09 +09:00]])
<https://github.com/whatwg/infra/issues/82>

[59] [CITE@en[Say a bit more about iteration]]
([[annevk]]著, [TIME[2017-03-23 11:31:47 +09:00]])
<https://github.com/whatwg/infra/commit/a21296bd10867f43a6d6b20747e1fb2a3dbb78ec>

[60] [CITE@en[Editorial: make Algorithms a top-level section]]
([[annevk]]著, [TIME[2017-03-23 20:04:05 +09:00]])
<https://github.com/whatwg/infra/commit/c17d8e3963ca78411208b9f0ff21d72553805a99>

[61] [CITE@en[Editorial: use Infra's return and continue concepts]]
([[annevk]]著, [TIME[2017-03-18 00:56:48 +09:00]])
<https://github.com/whatwg/dom/commit/16944b0faef3da894c825d7a154a7bf9a60ea8a4>

[62] [CITE@en[Define how "Assert:" works]]
([[annevk]]著, [TIME[2017-03-24 15:17:50 +09:00]])
<https://github.com/whatwg/infra/commit/6d7612602d60a5a3785a0841265d54550b71707f>

[63] [CITE@en[Add a note on performance]]
([[annevk]]著, [TIME[2017-03-24 18:50:16 +09:00]])
<https://github.com/whatwg/infra/commit/82d933cd1f33a7cb2db7a4801fc7bb4d6aded8a9>

[64] [CITE@en[Editorial: remove "rethrow any exception"]]
([[annevk]]著, [TIME[2017-03-24 20:27:29 +09:00]])
<https://github.com/whatwg/dom/commit/d298c5b7c690fb6a12bb487fd43549c5b46520bc>

[65] [CITE@en[Editorial: get rid of substeps]]
([[annevk]]著, [TIME[2017-03-24 20:54:32 +09:00]])
<https://github.com/whatwg/dom/commit/6253e53af2fbfaa6d25ad09fd54280d8083b2a97>

[66] [CITE@en[Add the ability to construct a callback function]]
([[domenic]]著, [TIME[2017-03-27 13:42:03 +09:00]])
<https://github.com/heycam/webidl/commit/36b3646ac02654626b575ac9891b6e9d75adbfe7>

[67] [CITE@en[Add "let" and "set for variables]]
([[annevk]]著, [TIME[2017-03-27 17:02:19 +09:00]])
<https://github.com/whatwg/infra/commit/f30d4d763df65b7b23781b371c851e258d42ed8f>

[68] [CITE@en[Editorial: reduce the amount of times we use "substep"]]
([[annevk]]著, [TIME[2017-03-27 23:29:59 +09:00]])
<https://github.com/whatwg/html/commit/ca5823dd551d47af0a95202e6c850fad74782b60>

[69] [CITE@en[Editorial: format bytes and code points per Infra]]
([[annevk]]著, [TIME[2017-03-28 21:14:42 +09:00]])
<https://github.com/whatwg/url/commit/91cb2aa532bc2b217e6237d23649aed0d2c566bb>

[70] [CITE@en[Editorial: replace usage of repeat with for each]]
([[annevk]]著, [TIME[2017-04-03 23:43:50 +09:00]])
<https://github.com/whatwg/url/commit/2f4b7f74533398c41f4316157f027a33a627caf9>

[71] [CITE@en[Rethrow more exceptions clearly by annevk · Pull Request #422 · whatwg/dom]]
([TIME[2017-04-13 14:03:59 +09:00]])
<https://github.com/whatwg/dom/pull/422>

[72] [CITE@en[Editorial: refactor two algorithms to not use labels]]
([[annevk]]著, [TIME[2017-03-30 14:57:30 +09:00]])
<https://github.com/whatwg/html/commit/aafb92e3d7c588ff968b03a5d726e9704829357a>

[73] [CITE@en[Editorial: modernize perform a microtask checkpoint]]
([[annevk]]著, [TIME[2017-04-30 17:17:12 +09:00]])
<https://github.com/whatwg/html/commit/eb31d93fdf569da9b8529a79c3060868a15fa328>

[74] [CITE@en[Editorial: remove substeps as a concept]]
([[annevk]]著, [TIME[2017-05-05 21:19:57 +09:00]])
<https://github.com/whatwg/encoding/commit/717d435179d6420b66a7e000d5737af1aa460504>

[75] [CITE@en[Editorial: check non-null before null]]
([[annevk]]著, [TIME[2017-05-05 21:01:38 +09:00]])
<https://github.com/whatwg/encoding/commit/4e53e160b9e0ade6e33a25d21580106a0db2c47f>

[76] [CITE@en[Editorial: update variable name in removing steps]]
([[foolip]]著, [TIME[2017-05-10 19:24:09 +09:00]])
<https://github.com/whatwg/fullscreen/commit/c8164afaa1a04b77c9b45f013144c603f3e201bd>

[77] [CITE@en[Editorial: use Infra's continue to clarify requestFullscreen()]]
([[foolip]]著, [TIME[2017-05-11 23:01:00 +09:00]])
<https://github.com/whatwg/fullscreen/commit/946d3ec0b8bb607c2ad4dfb67f17e444f9dc42de>

[78] [CITE@en[Editorial: cleanup close a browsing context and prompt to unload]]
([[annevk]]著, [TIME[2017-05-10 20:47:29 +09:00]])
<https://github.com/whatwg/html/commit/b714a7bc124bf0e8828b2adc2aa0b672d96a1dbd>

[79] [CITE@en[Assertions are non-normative]]
([[annevk]]著, [TIME[2017-05-24 18:31:49 +09:00]])
<https://github.com/whatwg/infra/commit/e88a63efc4663eedc6cb3081002c26935014c25d>

[80] [CITE@en["specification-level data structures and values ..." · Issue #2799 · whatwg/html]]
([TIME[2017-07-08 14:03:50 +09:00]])
<https://github.com/whatwg/html/issues/2799>

[81] [CITE@en[Clarify exception catching language]]
([[domenic]]著, [TIME[2017-07-18 04:25:03 +09:00]])
<https://github.com/whatwg/html/commit/5a2087f95d9be0a3bea2ac2c6a35c70c63782f9a>

[82] [CITE@en[Clarify the behavour if the custom element reaction throws any exception · Issue #2842 · whatwg/html]]
([TIME[2017-07-20 19:41:13 +09:00]])
<https://github.com/whatwg/html/issues/2842>

[83] [CITE@en[Clarify exception catching language by domenic · Pull Request #2843 · whatwg/html]]
([TIME[2017-07-20 19:41:46 +09:00]])
<https://github.com/whatwg/html/pull/2843>

[84] [CITE@en[Allow decimals with no leading 0 as the time in refresh <meta>]]
([[domenic]]著, [TIME[2017-07-22 06:10:04 +09:00]])
<https://github.com/whatwg/html/commit/b8a34e302cdf0289f5403a02905629bb358519a6>

[85] [CITE@en[Editorial: remove "rethrow" per Infra]]
([[annevk]]著, [TIME[2017-09-04 18:11:21 +09:00]])
<https://github.com/whatwg/fetch/commit/829e56dd47534b8e6725ce0c56c5bdea6e23d222>

[86] [CITE@en[Editorial: remove "rethrow" per Infra by annevk · Pull Request #595 · whatwg/fetch]]
([TIME[2017-09-07 11:53:10 +09:00]])
<https://github.com/whatwg/fetch/pull/595>

[87] [CITE@en[Clarify some of the ECMAScript conventions applied]]
([[domenic]]著, [TIME[2017-09-14 14:14:00 +09:00]])
<https://github.com/whatwg/streams/commit/89d32e228eb9428ae6f82793c875b1123febfc92>

[88] [CITE@en[Aborting fetch by jakearchibald · Pull Request #523 · whatwg/fetch]]
([TIME[2017-09-23 14:19:19 +09:00]])
<https://github.com/whatwg/fetch/pull/523>

[89] [CITE@en[Editorial: refactor classic and module scripts to be more alike]]
([[domenic]]著, [TIME[2017-09-07 05:40:50 +09:00]])
<https://github.com/whatwg/html/commit/dce999aac4d9deeefa3b338dd2aeb30c17669bc8>

[90] [CITE@en[RFC 7692 - Compression Extensions for WebSocket]]
([TIME[2017-09-19 00:18:15 +09:00]])
<https://tools.ietf.org/html/rfc7692#section-2>

[91] [CITE@en[Make shared worker creation deterministic]]
([[jakearchibald]]著, [TIME[2017-09-21 22:27:09 +09:00]])
<https://github.com/whatwg/html/commit/9fda90f44c7c9223de6e3755a043f67ea7c92bf5>

[92] [CITE@en[Editorial: reduce "abort these steps" usage]]
([[sam0410]]著, [TIME[2017-11-14 21:41:34 +09:00]])
<https://github.com/whatwg/html/commit/7ebc44ad58924f1872091c8f8b6fdba1533cfa37>

[93] [CITE@en[replace repetitions by sam0410 · Pull Request #3185 · whatwg/html]]
([TIME[2017-11-16 00:50:07 +09:00]])
<https://github.com/whatwg/html/pull/3185>

[94] [CITE@en[Remove "abort these steps" wording · Issue #2878 · whatwg/html]]
([TIME[2017-11-16 00:51:37 +09:00]])
<https://github.com/whatwg/html/issues/2878>

[95] [CITE@en[Add an example of declaring a variable using a ternary construct]]
([[annevk]]著, [TIME[2017-11-29 01:28:09 +09:00]])
<https://github.com/whatwg/infra/commit/ad786aed0d5d40af705041fabb35e9901ca7555c>

[96] [CITE@en[Ternary-like construct for creating variables · Issue #157 · whatwg/infra]]
([TIME[2017-11-30 23:45:02 +09:00]])
<https://github.com/whatwg/infra/issues/157>

[97] [CITE@en[Declare a variable using a ternary construct by annevk · Pull Request #175 · whatwg/infra]]
([TIME[2017-11-30 23:45:09 +09:00]])
<https://github.com/whatwg/infra/pull/175>

[98] [CITE@en[Define the term "Assert" for linkability]]
([[domenic]]著, [TIME[2017-11-29 01:53:29 +09:00]])
<https://github.com/whatwg/infra/commit/5790c85b39264360f37002b6a9ca13401eefa609>

[99] [CITE@en[Link asserts? · Issue #163 · whatwg/infra]]
([TIME[2017-11-30 23:46:50 +09:00]])
<https://github.com/whatwg/infra/issues/163>

[100] [CITE@en[Define the term "Assert" for linkability by domenic · Pull Request #176 · whatwg/infra]]
([TIME[2017-11-30 23:46:56 +09:00]])
<https://github.com/whatwg/infra/pull/176>

[101] [CITE@en[Restrict variables to be declared once per algorithm]]
([[annevk]]著, [TIME[2017-11-29 02:54:03 +09:00]])
<https://github.com/whatwg/infra/commit/2649c4f308c12fecb5489d636311b462b774d560>

[102] [CITE@en[Should we allow variable shadowing? · Issue #141 · whatwg/infra]]
([TIME[2017-11-30 23:47:26 +09:00]])
<https://github.com/whatwg/infra/issues/141>

[103] [CITE@en[Restrict variables to be declared once per algorithm by annevk · Pull Request #173 · whatwg/infra]]
([TIME[2017-11-30 23:47:36 +09:00]])
<https://github.com/whatwg/infra/pull/173>

[104] [CITE@en[Prohibit using "for each" with stacks and queues]]
([[domenic]]著, [TIME[2017-11-29 03:21:19 +09:00]])
<https://github.com/whatwg/infra/commit/7d898d01390c7f88ad55f6e91a039f69c3f6a055>

[105] [CITE@en[Correct branching in estimate()]]
([[annevk]]著, [TIME[2018-01-06 20:25:28 +09:00]])
<https://github.com/whatwg/storage/commit/22bc13d4b1d7dbca32155a2a53a24cd8eab59acb>

[106] [CITE@en[Editorial: remove the remaining subscript notation for argument lists (…]]
([[tobie]]著, [TIME[2018-01-07 23:15:16 +09:00]])
<https://github.com/heycam/webidl/commit/5f2b156ff8a2f6e8917b07a3e63d59a8fcacb5ce>

[107] [CITE@en[Editorial: remove the remaining subscript notation for argument lists by tobie · Pull Request #508 · heycam/webidl]]
([TIME[2018-01-09 11:10:02 +09:00]])
<https://github.com/heycam/webidl/pull/508>

[108] [CITE@en[Editorial: further cleanup "abort these steps"]]
([[shreyateeza]]著, [TIME[2018-01-09 20:22:36 +09:00]])
<https://github.com/whatwg/html/commit/99e2cdfc484c2ff14cbf5c38b859f4d6da17e64c>

[109] [CITE@en[Remove "abort these steps" wording · Issue #2878 · whatwg/html]]
([TIME[2018-01-10 23:00:20 +09:00]])
<https://github.com/whatwg/html/issues/2878>

[110] [CITE@en[Replace 'abort these steps' with 'return' by shreyateeza · Pull Request #3303 · whatwg/html]]
([TIME[2018-01-10 23:00:37 +09:00]])
<https://github.com/whatwg/html/pull/3303>

[111] [CITE@en[Editorial: less continue after returning]]
([[annevk]]著, [TIME[2018-01-23 23:24:34 +09:00]])
<https://github.com/whatwg/html/commit/0d097af1acbeabe56a1b0d0c2e2f521eca4defa8>

[112] [CITE@en["Return the new EventSource object, but continue..." · Issue #692 · whatwg/html]]
([TIME[2018-01-25 13:02:00 +09:00]])
<https://github.com/whatwg/html/issues/692>

[113] [CITE@en[Editorial: less continue after returning by annevk · Pull Request #3385 · whatwg/html]]
([TIME[2018-01-25 13:02:42 +09:00]])
<https://github.com/whatwg/html/pull/3385>

[114] [CITE@en[Editorial: no more "return, but continue" for <input type=file>]]
([[annevk]]著, [TIME[2018-01-24 00:21:18 +09:00]])
<https://github.com/whatwg/html/commit/b2fc1c1d49ad5701b4bdcf80dcee115c3167005e>

[115] [CITE@en[Editorial: no more "return, but continue" for <input type=file> by annevk · Pull Request #3388 · whatwg/html]]
([TIME[2018-01-25 13:03:52 +09:00]])
<https://github.com/whatwg/html/pull/3388>

[116] [CITE@en[Editorial: rewrite createImageBitmap()]]
([[annevk]]著, [TIME[2018-01-24 17:54:28 +09:00]])
<https://github.com/whatwg/html/commit/5b40420b83dad83e5e566de9581dc51e4e4ee6cd>

[117] [CITE@en[Editorial: rewrite createImageBitmap() by annevk · Pull Request #3389 · whatwg/html]]
([TIME[2018-01-25 13:05:31 +09:00]])
<https://github.com/whatwg/html/pull/3389>

[118] [CITE@en[Editorial: "return, but continue" cleanup for downloads and Worker]]
([[annevk]]著, [TIME[2018-01-24 22:04:54 +09:00]])
<https://github.com/whatwg/html/commit/0217e1d4cb1ace836f6ef72a402b643aa879fbed>

[119] [CITE@en[Editorial: "return, but continue" cleanup for downloads and Worker by annevk · Pull Request #3397 · whatwg/html]]
([TIME[2018-01-27 16:50:11 +09:00]])
<https://github.com/whatwg/html/pull/3397>

[120] [CITE@en['''['''cssom-1''']''' Editorial: Remove or replace "terminate ...".]]
([[upsuper]]著, [TIME[2018-02-12 17:14:44 +09:00]])
<https://github.com/w3c/csswg-drafts/commit/416b2d025594ac649953a990e32c14ad87b1d488>

[121] [CITE@en['''['''cssom-1''']''' Remove or replace "terminate ..." by upsuper · Pull Request #2299 · w3c/csswg-drafts]]
([TIME[2018-02-13 14:25:46 +09:00]])
<https://github.com/w3c/csswg-drafts/pull/2299>

[122] [CITE@en[Editorial: adopt more Infra terminology]]
([[annevk]]著, [TIME[2018-02-28 02:27:16 +09:00]])
<https://github.com/whatwg/notifications/commit/daf4b50d05209709578b43584a9597b16e3f2c3f>

[123] [CITE@en[Editorial: adopt more Infra terminology by annevk · Pull Request #123 · whatwg/notifications]]
([TIME[2018-02-28 22:39:33 +09:00]])
<https://github.com/whatwg/notifications/pull/123>

[124] [CITE@en[Definition of propagating exceptions, ? and ! · Issue #164 · whatwg/infra]]
([TIME[2018-04-17 23:32:29 +09:00]])
<https://github.com/whatwg/infra/issues/164>

[125] [CITE@en[add recusiveFlag argument to unload by gterzian · Pull Request #3632 · whatwg/html]]
([TIME[2018-04-21 18:14:13 +09:00]])
<https://github.com/whatwg/html/pull/3632>

[126] [CITE@en[Add "abort when"/"if aborted" construct for Fetch and elsewhere]]
([[annevk]]著, [TIME[2018-04-21 13:19:49 +09:00]])
<https://github.com/whatwg/infra/commit/23ce6ea50c541c8ac7edf53ccc908bc4a3f81fef>

[127] [CITE@en[Running a set of steps, breaking if a condition is met · Issue #143 · whatwg/infra]]
([TIME[2018-04-23 15:57:57 +09:00]])
<https://github.com/whatwg/infra/issues/143>

[128] [CITE@en[Add "Abort when" construct for Fetch and elsewhere by annevk · Pull Request #172 · whatwg/infra]]
([TIME[2018-04-23 15:59:40 +09:00]])
<https://github.com/whatwg/infra/pull/172>

[129] [CITE@en[Editorial: remove most substep usage]]
([[annevk]]著, [TIME[2018-04-24 02:00:28 +09:00]])
<https://github.com/whatwg/fetch/commit/509856c126d739aecf014ba039d98c3fa6dbbd8a>

[130] [CITE@en[Editorial: remove most substep usage by annevk · Pull Request #709 · whatwg/fetch]]
([TIME[2018-04-24 13:17:08 +09:00]])
<https://github.com/whatwg/fetch/pull/709>

[131] [CITE@en[Use Infra's abort when]]
([[annevk]]著, [TIME[2018-04-26 22:19:51 +09:00]])
<https://github.com/whatwg/fetch/commit/9f944e1bc90ffb38bd297ebceb9081c5e9c74efa>

[132] [CITE@en[Use Infra's abort when by annevk · Pull Request #702 · whatwg/fetch]]
([TIME[2018-05-01 12:07:30 +09:00]])
<https://github.com/whatwg/fetch/pull/702>

[133] [CITE@en[Editorial: modernize the style of various document-accepting algorithms]]
([[musgravejw]]著, [TIME[2018-05-03 01:20:53 +09:00]])
<https://github.com/whatwg/html/commit/8bd6fb3972aab1debd2c562b31617e7d3da2377b>

[134] [CITE@en[Various algorithms should take an explicit document argument · Issue #3638 · whatwg/html]]
([TIME[2018-05-03 11:20:05 +09:00]])
<https://github.com/whatwg/html/issues/3638>

[135] [CITE@en[Specify that "throw" aborts processing]]
([[alvestrand]]著, [TIME[2018-05-31 22:45:28 +09:00]])
<https://github.com/w3c/webrtc-pc/commit/1d4b4658e17c6ae622766c9c2775e0ba8f0279cb>

[136] [CITE@en[Editorial: Does throwing an error imply aborting the steps? · Issue #1856 · w3c/webrtc-pc]]
([TIME[2018-06-05 00:58:59 +09:00]])
<https://github.com/w3c/webrtc-pc/issues/1856>

[137] [CITE@en[Specify that "throw" aborts processing by alvestrand · Pull Request #1880 · w3c/webrtc-pc]]
([TIME[2018-06-05 00:59:35 +09:00]])
<https://github.com/w3c/webrtc-pc/pull/1880>

[138] [CITE@en[For-of rather than for-in]]
([[jakearchibald]]著, [TIME[2018-06-15 02:18:51 +09:00]])
<https://github.com/whatwg/infra/commit/33275d6a68d4bd719192b5adf7dfe1cd52fbecee>

[139] [CITE@en[For-of rather than for-in by jakearchibald · Pull Request #205 · whatwg/infra]]
([TIME[2018-06-17 12:33:37 +09:00]])
<https://github.com/whatwg/infra/pull/205>

[140] [CITE@en[Add some missing exclamation marks by ricea · Pull Request #935 · whatwg/streams]]
([TIME[2018-07-03 13:09:06 +09:00]])
<https://github.com/whatwg/streams/pull/935>

[141] [CITE@en[Don't create { value, done } objects with Object.prototype for intern…]]
([[ricea]]著, [TIME[2018-07-12 13:29:34 +09:00]])
<https://github.com/whatwg/streams/commit/a27a1fd0f8640d6054e0cbc8b6d7f5464dd096ab>

[142] [CITE@en[Editorial: consistify "one of the following" usage]]
([[annevk]]著, [TIME[2018-08-17 23:36:55 +09:00]])
<https://github.com/whatwg/fetch/commit/c3850070c472e7e1c0a5fe03f20977c08fd4e942>

[143] [CITE@en[Editorial: consistify "one of the following" usage by annevk · Pull Request #797 · whatwg/fetch]]
([TIME[2018-09-04 16:20:42 +09:00]])
<https://github.com/whatwg/fetch/pull/797>

[144] [CITE@en[Editorial: be more consistent about the context object]]
([[annevk]]著, [TIME[2018-08-22 18:44:09 +09:00]])
<https://github.com/whatwg/fetch/commit/5bd61e07aab959f1dc06cc46ddc1a6515f11f2da>

[145] [CITE@en[Editorial: be more consistent about the context object by annevk · Pull Request #803 · whatwg/fetch]]
([TIME[2018-09-04 16:30:22 +09:00]])
<https://github.com/whatwg/fetch/pull/803>

[146] [CITE@en[Editorial: consistify "one of the following" usage]]
([[annevk]]著, [TIME[2018-08-17 23:36:55 +09:00]])
<https://github.com/whatwg/fetch/commit/c3850070c472e7e1c0a5fe03f20977c08fd4e942>

[147] [CITE@en[Editorial: consistify "one of the following" usage by annevk · Pull Request #797 · whatwg/fetch]]
([TIME[2019-03-04 16:37:33 +09:00]])
<https://github.com/whatwg/fetch/pull/797>

[148] [CITE@en[Editorial: drop parenthesis around variables]]
([[Rondinelly]]著, [TIME[2018-11-07 21:43:26 +09:00]])
<https://github.com/whatwg/fetch/commit/b8732e1849682020ee7cc10e0079298a322864ea>

[149] [CITE@en[Editorial: drop parenthesis around variables · Issue #817 · whatwg/fetch]]
([TIME[2019-03-08 12:28:46 +09:00]])
<https://github.com/whatwg/fetch/issues/817>

[150] [CITE@en[Editorial: drop parenthesis around variables by Rondinelly · Pull Request #830 · whatwg/fetch]]
([TIME[2019-03-08 12:29:00 +09:00]])
<https://github.com/whatwg/fetch/pull/830>

[151] [CITE@en[Be consistent in how we advance position]]
([[annevk]]著, [TIME[2018-11-14 17:40:38 +09:00]])
<https://github.com/whatwg/infra/commit/ed78408081c6f8325882ac20da8e9d1553337cbd>

[152] [CITE@en[Be consistent in how we advance position by annevk · Pull Request #225 · whatwg/infra]]
([TIME[2019-03-10 18:56:51 +09:00]])
<https://github.com/whatwg/infra/pull/225>

[153] [CITE@en[Editorial: less than or equal to]]
([[annevk]]著, [TIME[2019-01-08 23:10:45 +09:00]])
<https://github.com/whatwg/encoding/commit/db0d45b4dfbecc1b2c4f2a5c003b9c31db239aae>

[154] [CITE@en[Editorial: less than or equal to by annevk · Pull Request #170 · whatwg/encoding]]
([TIME[2019-06-01 11:41:00 +09:00]])
<https://github.com/whatwg/encoding/pull/170>

[155] [CITE@en[Editorial: remove substep usage]]
([[annevk]]著, [TIME[2019-03-25 01:17:17 +09:00]])
<https://github.com/whatwg/xhr/commit/7e14cfb4408c0f5d3f724c7fc6122ecadb0f9ef0>

[156] [CITE@en[Remove substep usage by annevk · Pull Request #228 · whatwg/xhr]]
([TIME[2019-07-24 20:43:32 +09:00]])
<https://github.com/whatwg/xhr/pull/228>

[157] [CITE@en[Revise the way otherwise is supposed to be used]]
([[annevk]]著, [TIME[2019-05-21 16:19:02 +09:00]])
<https://github.com/whatwg/infra/commit/e65a4e0f33347ff9a380673159bf6cc69ccf019e>

[158] [CITE@en[Ternary revisited · Issue #247 · whatwg/infra]]
([TIME[2019-12-25 11:54:20 +09:00]])
<https://github.com/whatwg/infra/issues/247>

[159] [CITE@en[Revise the way otherwise is supposed to be used by annevk · Pull Request #250 · whatwg/infra]]
([TIME[2019-12-25 11:54:47 +09:00]])
<https://github.com/whatwg/infra/pull/250>

[160] [CITE@en[Editorial: use Infra list syntax in mutations]]
([[annevk]]著, [TIME[2019-05-21 16:41:47 +09:00]])
<https://github.com/whatwg/dom/commit/e6b69e3f9091e7564ec48b111e6db513210b6335>

[161] [CITE@en[Editorial: use Infra list syntax in mutations by annevk · Pull Request #762 · whatwg/dom]]
([TIME[2019-12-25 11:57:06 +09:00]])
<https://github.com/whatwg/dom/pull/762>

[162] [CITE@en[Editorial: Simplify 'steps to' wording]]
([[inexorabletash]]著, [TIME[2019-06-13 02:04:26 +09:00]])
<https://github.com/w3c/IndexedDB/commit/d08bc14486abb8934f58c7b1a42c25ae237d3151>

[163] [CITE@en[Editorial: Simplify 'steps to' by inexorabletash · Pull Request #277 · w3c/IndexedDB]]
([TIME[2020-01-12 14:41:56 +09:00]])
<https://github.com/w3c/IndexedDB/pull/277>

[164] [CITE@en[Editorial: Simplify wording around async request invocation]]
([[inexorabletash]]著, [TIME[2019-06-13 02:46:46 +09:00]])
<https://github.com/w3c/IndexedDB/commit/ce86e184eac3b2038a4266d92d2372ca64febe19>

[165] [CITE@en[Use Infra terms to simplify text.]]
([[inexorabletash]]著, [TIME[2019-06-13 06:48:33 +09:00]])
<https://github.com/w3c/IndexedDB/commit/1e1241f34ceabe2a39750f1f6910163bf4b53b24>

[166] [CITE@en[Use Infra terms to simplify text. by inexorabletash · Pull Request #275 · w3c/IndexedDB]]
([TIME[2020-01-12 14:43:03 +09:00]])
<https://github.com/w3c/IndexedDB/pull/275>

[167] [CITE@en[Editorial: Replace flag set/unset with true/false]]
([[inexorabletash]]著, [TIME[2019-06-14 02:48:58 +09:00]])
<https://github.com/w3c/IndexedDB/commit/35b5d936951c38d10a8cccf6b7f6b70afe2a525c>

[168] [CITE@en[Editorial: Replace flag set/unset with true/false. by inexorabletash · Pull Request #279 · w3c/IndexedDB]]
([TIME[2020-01-12 14:43:51 +09:00]])
<https://github.com/w3c/IndexedDB/pull/279>

[169] [CITE@en[Editorial: use more idiomatic "if ..., then ..." phrasing]]
([[foolip]]著, [TIME[2019-09-12 19:50:30 +09:00]])
<https://github.com/whatwg/fullscreen/commit/2a9e7a515a8f4629a16758aae6771bc34cd2bff7>

[170] [CITE@en[Editorial: use more idiomatic "if ..., then ..." phrasing by foolip · Pull Request #156 · whatwg/fullscreen]]
([TIME[2020-01-13 13:12:24 +09:00]])
<https://github.com/whatwg/fullscreen/pull/156>

[171] [CITE@en[Use IDL this]]
([[inexorabletash]]著, [TIME[2019-10-01 01:39:27 +09:00]])
<https://github.com/w3c/IndexedDB/commit/29d45f4a58b2fd40354f39e76c1e303e9c0bf0a7>

[172] [CITE@en[Use IDL this by inexorabletash · Pull Request #303 · w3c/IndexedDB]]
([TIME[2020-01-13 13:21:11 +09:00]])
<https://github.com/w3c/IndexedDB/pull/303>