Skip to content

Instantly share code, notes, and snippets.

@dSalieri
Last active February 21, 2024 06:21
Show Gist options
  • Select an option

  • Save dSalieri/5d33e93f700e3609da4e58e44fdcb286 to your computer and use it in GitHub Desktop.

Select an option

Save dSalieri/5d33e93f700e3609da4e58e44fdcb286 to your computer and use it in GitHub Desktop.

Revisions

  1. dSalieri revised this gist Feb 21, 2024. 1 changed file with 23 additions and 20 deletions.
    43 changes: 23 additions & 20 deletions index.md
    Original file line number Diff line number Diff line change
    @@ -13,7 +13,10 @@ _**Последнее изменение документа**: 20.02.2024_

    ### [Execution Contexts][execution-contexts] (Исполнительные Контексты)

    Итак [_execution context_][execution-context] (исполнительный контекст) - это устройство спецификации, которое используется для отслеживания оценки кода времени выполнения с помощью реализации ECMAScript. В любой момент времени существует не более одного [execution context][execution-context] на [agent][agent], который фактически выполняет код. Это известно как [_running execution context_][running-execution-context] (выполняемый исполнительный контекст) принадлежащий [agent][agent]. Все ссылки к [running execution context][running-execution-context] в спецификации ECMAScript расшифровываются как [running execution context][running-execution-context] принадлежащие [surrounding agent][surrounding-agent].
    Итак [_execution context_][execution-context] (исполнительный контекст) - это устройство спецификации, которое используется для отслеживания оценки кода во время выполнения реализацией ECMAScript.
    > Реализация ECMAScript - это любой движок реализующий данную спецификацию, например V8.
    В любой момент времени существует не более одного [execution context][execution-context] на [agent][agent], который фактически выполняет код. Это известно как [_running execution context_][running-execution-context] (выполняемый исполнительный контекст) принадлежащий [agent][agent]. Все ссылки к [running execution context][running-execution-context] в спецификации ECMAScript расшифровываются как [running execution context][running-execution-context] принадлежащие [surrounding agent][surrounding-agent].
    > [Agent][agent] - это другая абстракция/устройство ECMAScript, которая содержит в себе: `набор ECMAScript execution contexts`, [execution context stack][execution-context-stack], [running execution context][running-execution-context], `Agent Record` и `executing thread`.
    >
    > Итак последний компонент `executing thread` и занимается исполнением [execution contexts][execution-contexts]. О том как `executing thread` запускается - внe компетенций данной спецификации, вы лишь должны знать, что есть устройство [agent][agent], владеющее другими абстракциями/механизмами, среди которых есть компоненты связанные с [execution contexts][execution-contexts] и `executing thread`, которые в свою очередь подвластны управляющему ими [agent][agent].
    @@ -65,22 +68,22 @@ _ECMAScript code execution contexts_ имеют дополнительные к

    [Execution context][execution-context] - это чисто механизм спецификации и не обязательно нужно соответствовать какому-либо конкретному артефакту реализации ECMAScript. Код ECMAScript не может напрямую получить доступ или наблюдение за [execution context][execution-context].

    [execution-contexts]: https://tc39.es/ecma262/#sec-execution-contexts "Execution Contexts"
    [execution-context]: https://tc39.es/ecma262/#sec-execution-contexts "execution context"
    [execution-context-stack]: https://tc39.es/ecma262/#execution-context-stack "execution context stack"
    [running-execution-context]: https://tc39.es/ecma262/#running-execution-context "running execution context"
    [realm]: https://tc39.es/ecma262/#realm "Realm"
    [realm-record]: https://tc39.es/ecma262/#realm-record "Realm Record"
    [initialize-host-defined-realm]: https://tc39.es/ecma262/#sec-initializehostdefinedrealm "InitializeHostDefinedRealm"
    [agent]: https://tc39.es/ecma262/#agent "agent"
    [surrounding-agent]: https://tc39.es/ecma262/#surrounding-agent "surrounding agent"
    [module-record]: https://tc39.es/ecma262/#sec-abstract-module-records "Module Record"
    [script-record]: https://tc39.es/ecma262/#script-record "Script Record"
    [function-object]: https://tc39.es/ecma262/#function-object "function object"
    [environment-record]: https://tc39.es/ecma262/#sec-environment-records "Environment Record"
    [private-environment-record]: https://tc39.es/ecma262/#privateenvironment-record "PrivateEnvironment Record"
    [private-names]: https://tc39.es/ecma262/#sec-private-names "Private Names"
    [prod-script]: https://tc39.es/ecma262/#prod-Script "production Script"
    [prod-module]: https://tc39.es/ecma262/#prod-Module "production Module"
    [prod-variablestatement]: https://tc39.es/ecma262/#prod-VariableStatement "production VariableStatement"
    [prod-classelement]: https://tc39.es/ecma262/#prod-ClassElement "production ClassElement"
    [execution-contexts]: https://tc39.es/ecma262/multipage/executable-code-and-execution-contexts.html#sec-execution-contexts "Execution Contexts"
    [execution-context]: https://tc39.es/ecma262/multipage/executable-code-and-execution-contexts.html#sec-execution-contexts "execution context"
    [execution-context-stack]: https://tc39.es/ecma262/multipage/executable-code-and-execution-contexts.html#execution-context-stack "execution context stack"
    [running-execution-context]: https://tc39.es/ecma262/multipage/executable-code-and-execution-contexts.html#running-execution-context "running execution context"
    [realm]: https://tc39.es/ecma262/multipage/executable-code-and-execution-contexts.html#realm "Realm"
    [realm-record]: https://tc39.es/ecma262/multipage/executable-code-and-execution-contexts.html#realm-record "Realm Record"
    [initialize-host-defined-realm]: https://tc39.es/ecma262/multipage/executable-code-and-execution-contexts.html#sec-initializehostdefinedrealm "InitializeHostDefinedRealm"
    [agent]: https://tc39.es/ecma262/multipage/executable-code-and-execution-contexts.html#agent "agent"
    [surrounding-agent]: https://tc39.es/ecma262/multipage/executable-code-and-execution-contexts.html#surrounding-agent "surrounding agent"
    [module-record]: https://tc39.es/ecma262/multipage/ecmascript-language-scripts-and-modules.html#sec-abstract-module-records "Module Record"
    [script-record]: https://tc39.es/ecma262/multipage/ecmascript-language-scripts-and-modules.html#script-record "Script Record"
    [function-object]: https://tc39.es/ecma262/multipage/ecmascript-data-types-and-values.html#function-object "function object"
    [environment-record]: https://tc39.es/ecma262/multipage/executable-code-and-execution-contexts.html#sec-environment-records "Environment Record"
    [private-environment-record]: https://tc39.es/ecma262/multipage/executable-code-and-execution-contexts.html#privateenvironment-record "PrivateEnvironment Record"
    [private-names]: https://tc39.es/ecma262/multipage/ecmascript-data-types-and-values.html#sec-private-names "Private Names"
    [prod-script]: https://tc39.es/ecma262/multipage/ecmascript-language-scripts-and-modules.html#prod-Script "production Script"
    [prod-module]: https://tc39.es/ecma262/multipage/ecmascript-language-scripts-and-modules.html#prod-Module "production Module"
    [prod-variablestatement]: https://tc39.es/ecma262/multipage/ecmascript-language-statements-and-declarations.html#prod-VariableStatement "production VariableStatement"
    [prod-classelement]: https://tc39.es/ecma262/multipage/ecmascript-language-functions-and-classes.html#prod-ClassElement "production ClassElement"
  2. dSalieri revised this gist Feb 21, 2024. 1 changed file with 1 addition and 0 deletions.
    1 change: 1 addition & 0 deletions index.md
    Original file line number Diff line number Diff line change
    @@ -41,6 +41,7 @@ _**Последнее изменение документа**: 20.02.2024_
    > Концептуально, [Realm][realm] представляет из себя набор ресурсов необходимых для выполнения кода ECMAScript. В качестве примера, [Realm][realm] содержит в себе глобальный объект, в котором присутствуют многие известные вам объекты, функции и методы.
    Значение компонента Function относящегося к [running execution context][running-execution-context] обычно называют _active function object_.
    > [Function object][function-object] - это объект, у которого есть внутреннее поле `[[Call]]`. По сути когда вы в программе оперируете функциями это и есть [function object][function-object].
    _ECMAScript code execution contexts_ имеют дополнительные компоненты состояний:
    > [Execution contexts][execution-contexts] имеют дополнительные поля если созданы кодом ECMAScript. Например исходный [execution context][execution-context] (исходный это тот, что создан операцией [InitializeHostDefinedRealm][initialize-host-defined-realm]) их не имеет, так как его создает окружающая среда программы, которая выполняет код ECMAScript.
  3. dSalieri revised this gist Feb 20, 2024. 1 changed file with 8 additions and 8 deletions.
    16 changes: 8 additions & 8 deletions index.md
    Original file line number Diff line number Diff line change
    @@ -11,17 +11,17 @@ _**Последнее изменение документа**: 20.02.2024_
    ---

    ### [Execution Contexts (Исполнительные контексты)][execution-contexts]
    ### [Execution Contexts][execution-contexts] (Исполнительные Контексты)

    Итак [_execution context_][execution-context] (исполнительный контекст) - это устройство спецификации, которое используется для отслеживания оценки кода времени выполнения с помощью реализации ECMAScript. В любой момент времени существует не более одного [execution context][execution-context] на [agent][agent], который фактически выполняет код. Это известно как [_running execution context_][running-execution-context] (работающий исполнительный контекст) принадлежащий [agent][agent]. Все ссылки к [running execution context][running-execution-context] в спецификации ECMAScript расшифровываются как [running execution context][running-execution-context] принадлежащие [surrounding agent][surrounding-agent].
    Итак [_execution context_][execution-context] (исполнительный контекст) - это устройство спецификации, которое используется для отслеживания оценки кода времени выполнения с помощью реализации ECMAScript. В любой момент времени существует не более одного [execution context][execution-context] на [agent][agent], который фактически выполняет код. Это известно как [_running execution context_][running-execution-context] (выполняемый исполнительный контекст) принадлежащий [agent][agent]. Все ссылки к [running execution context][running-execution-context] в спецификации ECMAScript расшифровываются как [running execution context][running-execution-context] принадлежащие [surrounding agent][surrounding-agent].
    > [Agent][agent] - это другая абстракция/устройство ECMAScript, которая содержит в себе: `набор ECMAScript execution contexts`, [execution context stack][execution-context-stack], [running execution context][running-execution-context], `Agent Record` и `executing thread`.
    >
    > Итак последний компонент `executing thread` и занимается исполнением [execution contexts][execution-contexts]. О том как `executing thread` запускается - внe компетенций данной спецификации, вы лишь должны знать, что есть устройство [agent][agent], владеющее другими абстракциями/механизмами, среди которых есть компоненты связанные с [execution contexts][execution-contexts] и `executing thread`, которые в свою очередь подвластны управляющему ими [agent][agent].
    >
    > Конечно это не все подробности об [agent][agent], но они нам и не нужны, данное углубление нужно было для того чтобы понять откуда идут [execution contexts][execution-contexts]; подробнее об [agent][agent] в спецификации ECMAScript.
    > Конечно это не все подробности об [agent][agent], но они нам и не нужны, данное пояснение нужно было для того чтобы понять откуда идут [execution contexts][execution-contexts]; подробнее об [agent][agent] в спецификации ECMAScript.
    [_Execution context stack_][execution-context-stack] (стек исполнительного контекста) - используется для отслеживания [execution contexts][execution-contexts]. Тот [execution context][execution-context], который находится на вершине стека именуется [running execution context][running-execution-context]. Новый [execution context][execution-context] создается всякий раз, когда управление передается от исполняемого кода, связанного с текущим [running execution context][running-execution-context], к исполняемому коду, который не связан с этим [execution context][execution-context].
    > Например: Переход от [execution context][execution-context] скрипта к [execution context][execution-context] функции или же когда идет рекурсивный вызов функции, тогда происходит от одного к другому множество переходов новосозданных [execution context][execution-context].
    > Например: Переход от [execution context][execution-context] скрипта к [execution context][execution-context] функции или же, когда идет рекурсивный вызов функции, тогда происходит множество переходов новосозданных [execution context][execution-context] созданных в результате рекурсии.
    Вновь созданный [execution context][execution-context] помещается в стек и становится [running execution context][running-execution-context].

    @@ -30,15 +30,15 @@ _**Последнее изменение документа**: 20.02.2024_
    |Компонент |Цель|
    |---------------------|----|
    |code evaluation state|Любое состояние необходимое для выполнения, приостановки и возобновления оценки кода связанного с этим [execution context][execution-context]|
    |Function |Если этот [execution context][execution-context] оценивает код [функционального объекта][function-object], тогда значение этого компонента является этот же [функциональный объект][function-object]. Если [execution context][execution-context] оценивает код [_Script_][prod-script] или [_Module_][prod-module], тогда значение компонента **null**|
    |Function |Если этот [execution context][execution-context] оценивает код [function object][function-object], тогда значение этого компонента является этот же [function object][function-object]. Если [execution context][execution-context] оценивает код [_Script_][prod-script] или [_Module_][prod-module], тогда значение компонента **null**|
    |[Realm][realm] |[Realm Record][realm-record] из которой связанный код получает доступ к ресурсам ECMAScript|
    |ScriptOrModule |[Module Record][module-record] или [Script Record][script-record] из которого исходит связанный код. Если нет исходного скрипта или модуля, как в случае с исходным [execution context][execution-context], созданным в [InitializeHostDefinedRealm][initialize-host-defined-realm], то значение равно **null**|

    Оценка кода с помощью [running execution context][running-execution-context] может быть приостановлена в различных точках определенных в рамках спецификации ECMAScript. Как только [running execution context][running-execution-context] приостановлен, другой [execution context][execution-context] может стать [running execution context][running-execution-context] и начать оценивание его кода. Позже в другой момент времени приостановленный [execution context][execution-context] может снова стать [running execution context][running-execution-context] и продолжить оценивание его кода в том месте где в прошлый раз произошла приостановка. Переход статуса [running execution context][running-execution-context] между [execution contexts][execution-contexts] обычно происходит в стек-подобной манере last-in/first-out (последний зашел/первый вышел). Однако, некоторые возможности ECMAScript требуют переходов [running execution context][running-execution-context], которые не соответствуют LIFO (перевод и расшифровка предложением ранее).
    Оценка кода с помощью [running execution context][running-execution-context] может быть приостановлена в различных точках определенных в рамках спецификации ECMAScript. Как только [running execution context][running-execution-context] приостановлен, другой [execution context][execution-context] может стать [running execution context][running-execution-context] и начать оценивание собственного кода. Позже в другой момент времени приостановленный [execution context][execution-context] может снова стать [running execution context][running-execution-context] и продолжить оценивание его кода в том месте где в прошлый раз произошла приостановка. Переход статуса [running execution context][running-execution-context] между [execution contexts][execution-contexts] обычно происходит в стек-подобной манере last-in/first-out (последний зашел/первый вышел). Однако, некоторые возможности ECMAScript требуют переходов [running execution context][running-execution-context], которые не соответствуют LIFO (перевод и расшифровка предложением ранее).
    > Когда LIFO не соблюдается это означает, что ранее в использовании [execution context][execution-context] вновь помещается в стек. Такое возможно в функциях-генераторах и асинхронных функциях.
    Значение компонента [Realm][realm] относящегося к [running execution context][running-execution-context] обычно называют _current Realm Record_.
    > Концептуально, [Realm][realm] представляет из себя набор ресурсов необходимых для выполнения кода ECMAScript. В качестве примера, [Realm][realm] содержит в себе глобальный объект, в котором присутствуют многие известные вам функции и методы.
    > Концептуально, [Realm][realm] представляет из себя набор ресурсов необходимых для выполнения кода ECMAScript. В качестве примера, [Realm][realm] содержит в себе глобальный объект, в котором присутствуют многие известные вам объекты, функции и методы.
    Значение компонента Function относящегося к [running execution context][running-execution-context] обычно называют _active function object_.

    @@ -52,7 +52,7 @@ _ECMAScript code execution contexts_ имеют дополнительные к
    |PrivateEnvironment |Идентифицирует [PrivateEnvironment Record][private-environment-record], которая хранит [Private Names][private-names] созданные [_ClassElements_][prod-classelement] в ближайшем содержащем классе. **null** если не существует никакого ближайшего класса|

    Компоненты _LexicalEnvironment_ и _VariableEnvironment_ принадлежащие к [execution context][execution-context] - всегда являются [Environment Records][environment-record].
    > [Environment Records][environment-record] - это тип спецификации, используемый для определения связи идентификаторов с конкретными переменными и функциями на основе лексической структуры вложенности кода ECMAScript.
    > [Environment Record][environment-record] - это тип спецификации, используемый для определения связи идентификаторов с конкретными переменными и функциями на основе лексической структуры вложенности кода ECMAScript.
    [Execution context][execution-context] представляющий оценку Generators (т.е функция такого типа) имеет следующие дополнительные компоненты:

  4. dSalieri created this gist Feb 20, 2024.
    85 changes: 85 additions & 0 deletions index.md
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,85 @@
    _**Автор**: [dSalieri](https://t.me/d_Salieri)_

    _**Версия ECMAScript, используемая в объяснении**: Draft ECMA-262 / February 19, 2024_

    _**Последнее изменение документа**: 20.02.2024_

    ---

    > [!important]
    > Раздел посвященный устройству спецификации [_**execution contexts**_][execution-contexts]. Так как спецификация сама отлично описывает данный механизм, то решено было просто перевести с внедрением некоторых пояснительных сносок.
    ---

    ### [Execution Contexts (Исполнительные контексты)][execution-contexts]

    Итак [_execution context_][execution-context] (исполнительный контекст) - это устройство спецификации, которое используется для отслеживания оценки кода времени выполнения с помощью реализации ECMAScript. В любой момент времени существует не более одного [execution context][execution-context] на [agent][agent], который фактически выполняет код. Это известно как [_running execution context_][running-execution-context] (работающий исполнительный контекст) принадлежащий [agent][agent]. Все ссылки к [running execution context][running-execution-context] в спецификации ECMAScript расшифровываются как [running execution context][running-execution-context] принадлежащие [surrounding agent][surrounding-agent].
    > [Agent][agent] - это другая абстракция/устройство ECMAScript, которая содержит в себе: `набор ECMAScript execution contexts`, [execution context stack][execution-context-stack], [running execution context][running-execution-context], `Agent Record` и `executing thread`.
    >
    > Итак последний компонент `executing thread` и занимается исполнением [execution contexts][execution-contexts]. О том как `executing thread` запускается - внe компетенций данной спецификации, вы лишь должны знать, что есть устройство [agent][agent], владеющее другими абстракциями/механизмами, среди которых есть компоненты связанные с [execution contexts][execution-contexts] и `executing thread`, которые в свою очередь подвластны управляющему ими [agent][agent].
    >
    > Конечно это не все подробности об [agent][agent], но они нам и не нужны, данное углубление нужно было для того чтобы понять откуда идут [execution contexts][execution-contexts]; подробнее об [agent][agent] в спецификации ECMAScript.
    [_Execution context stack_][execution-context-stack] (стек исполнительного контекста) - используется для отслеживания [execution contexts][execution-contexts]. Тот [execution context][execution-context], который находится на вершине стека именуется [running execution context][running-execution-context]. Новый [execution context][execution-context] создается всякий раз, когда управление передается от исполняемого кода, связанного с текущим [running execution context][running-execution-context], к исполняемому коду, который не связан с этим [execution context][execution-context].
    > Например: Переход от [execution context][execution-context] скрипта к [execution context][execution-context] функции или же когда идет рекурсивный вызов функции, тогда происходит от одного к другому множество переходов новосозданных [execution context][execution-context].
    Вновь созданный [execution context][execution-context] помещается в стек и становится [running execution context][running-execution-context].

    [Execution context][execution-context] содержит любое состояние конкретной реализации для отслеживания исполнительного прогресса связанного с ним кода. Каждый [execution context][execution-context] имеет как минимум компоненты состояний, перечисленные в таблице ниже:

    |Компонент |Цель|
    |---------------------|----|
    |code evaluation state|Любое состояние необходимое для выполнения, приостановки и возобновления оценки кода связанного с этим [execution context][execution-context]|
    |Function |Если этот [execution context][execution-context] оценивает код [функционального объекта][function-object], тогда значение этого компонента является этот же [функциональный объект][function-object]. Если [execution context][execution-context] оценивает код [_Script_][prod-script] или [_Module_][prod-module], тогда значение компонента **null**|
    |[Realm][realm] |[Realm Record][realm-record] из которой связанный код получает доступ к ресурсам ECMAScript|
    |ScriptOrModule |[Module Record][module-record] или [Script Record][script-record] из которого исходит связанный код. Если нет исходного скрипта или модуля, как в случае с исходным [execution context][execution-context], созданным в [InitializeHostDefinedRealm][initialize-host-defined-realm], то значение равно **null**|

    Оценка кода с помощью [running execution context][running-execution-context] может быть приостановлена в различных точках определенных в рамках спецификации ECMAScript. Как только [running execution context][running-execution-context] приостановлен, другой [execution context][execution-context] может стать [running execution context][running-execution-context] и начать оценивание его кода. Позже в другой момент времени приостановленный [execution context][execution-context] может снова стать [running execution context][running-execution-context] и продолжить оценивание его кода в том месте где в прошлый раз произошла приостановка. Переход статуса [running execution context][running-execution-context] между [execution contexts][execution-contexts] обычно происходит в стек-подобной манере last-in/first-out (последний зашел/первый вышел). Однако, некоторые возможности ECMAScript требуют переходов [running execution context][running-execution-context], которые не соответствуют LIFO (перевод и расшифровка предложением ранее).
    > Когда LIFO не соблюдается это означает, что ранее в использовании [execution context][execution-context] вновь помещается в стек. Такое возможно в функциях-генераторах и асинхронных функциях.
    Значение компонента [Realm][realm] относящегося к [running execution context][running-execution-context] обычно называют _current Realm Record_.
    > Концептуально, [Realm][realm] представляет из себя набор ресурсов необходимых для выполнения кода ECMAScript. В качестве примера, [Realm][realm] содержит в себе глобальный объект, в котором присутствуют многие известные вам функции и методы.
    Значение компонента Function относящегося к [running execution context][running-execution-context] обычно называют _active function object_.

    _ECMAScript code execution contexts_ имеют дополнительные компоненты состояний:
    > [Execution contexts][execution-contexts] имеют дополнительные поля если созданы кодом ECMAScript. Например исходный [execution context][execution-context] (исходный это тот, что создан операцией [InitializeHostDefinedRealm][initialize-host-defined-realm]) их не имеет, так как его создает окружающая среда программы, которая выполняет код ECMAScript.
    |Компонент |Цель|
    |-------------------|----|
    |LexicalEnvironment |Идентифицирует [Environment Record][environment-record], которая используется для разрешения ссылок на идентификаторы сделаных кодом в этом [execution context][execution-context]|
    |VariableEnvironment|Идентифицирует [Environment Record][environment-record], которая хранит привязки созданные [_VariableStatements_][prod-variablestatement] в этом [execution context][execution-context]|
    |PrivateEnvironment |Идентифицирует [PrivateEnvironment Record][private-environment-record], которая хранит [Private Names][private-names] созданные [_ClassElements_][prod-classelement] в ближайшем содержащем классе. **null** если не существует никакого ближайшего класса|

    Компоненты _LexicalEnvironment_ и _VariableEnvironment_ принадлежащие к [execution context][execution-context] - всегда являются [Environment Records][environment-record].
    > [Environment Records][environment-record] - это тип спецификации, используемый для определения связи идентификаторов с конкретными переменными и функциями на основе лексической структуры вложенности кода ECMAScript.
    [Execution context][execution-context] представляющий оценку Generators (т.е функция такого типа) имеет следующие дополнительные компоненты:

    |Компонент|Цель|
    |---------|----|
    |Generator|Generator, который оценивает этот [execution context][execution-context]|

    В большинстве ситуаций только [running execution context][running-execution-context] (это верх [execution context stack][execution-context-stack]) напрямую управляется алгоритмами в спецификации ECMAScript. Следовательно когда термины "LexicalEnvironment" и "VariableEnvironment" используются без уточнения, они ссылаются на компоненты [running execution context][running-execution-context].

    [Execution context][execution-context] - это чисто механизм спецификации и не обязательно нужно соответствовать какому-либо конкретному артефакту реализации ECMAScript. Код ECMAScript не может напрямую получить доступ или наблюдение за [execution context][execution-context].

    [execution-contexts]: https://tc39.es/ecma262/#sec-execution-contexts "Execution Contexts"
    [execution-context]: https://tc39.es/ecma262/#sec-execution-contexts "execution context"
    [execution-context-stack]: https://tc39.es/ecma262/#execution-context-stack "execution context stack"
    [running-execution-context]: https://tc39.es/ecma262/#running-execution-context "running execution context"
    [realm]: https://tc39.es/ecma262/#realm "Realm"
    [realm-record]: https://tc39.es/ecma262/#realm-record "Realm Record"
    [initialize-host-defined-realm]: https://tc39.es/ecma262/#sec-initializehostdefinedrealm "InitializeHostDefinedRealm"
    [agent]: https://tc39.es/ecma262/#agent "agent"
    [surrounding-agent]: https://tc39.es/ecma262/#surrounding-agent "surrounding agent"
    [module-record]: https://tc39.es/ecma262/#sec-abstract-module-records "Module Record"
    [script-record]: https://tc39.es/ecma262/#script-record "Script Record"
    [function-object]: https://tc39.es/ecma262/#function-object "function object"
    [environment-record]: https://tc39.es/ecma262/#sec-environment-records "Environment Record"
    [private-environment-record]: https://tc39.es/ecma262/#privateenvironment-record "PrivateEnvironment Record"
    [private-names]: https://tc39.es/ecma262/#sec-private-names "Private Names"
    [prod-script]: https://tc39.es/ecma262/#prod-Script "production Script"
    [prod-module]: https://tc39.es/ecma262/#prod-Module "production Module"
    [prod-variablestatement]: https://tc39.es/ecma262/#prod-VariableStatement "production VariableStatement"
    [prod-classelement]: https://tc39.es/ecma262/#prod-ClassElement "production ClassElement"