?uem/p1-90`이 절,
read-modify-write 수정 함수는
read-modify-write 수정 함수의 알고리즘 단계가 순수한 수학적 함수를 구성하는지 검증하는 데 도움이 되도록 다음 편집 관례를 권장합니다:
고정 길이 ArrayBuffer는 생성된 후 바이트 길이를 변경할 수 없는 ArrayBuffer입니다.
크기 조절 가능한 ArrayBuffer는
생성되는 ArrayBuffer 객체의 종류는
realloc로 구현할 수 있습니다.ArrayBuffer 인스턴스를 분리하면 기반 저장소로 사용되는
호스트 정의 추상 연산 HostResizeArrayBuffer. 인수 buffer (ArrayBuffer) 및 newByteLength (음이 아닌 정수). 반환값: (
HostResizeArrayBuffer의 구현은 다음 요구 사항을 준수해야 합니다:
HostResizeArrayBuffer의 기본 구현은
ArrayBuffer
extends 절 값으로 사용할 수 있습니다. 지정된 ArrayBuffer 동작을 상속하려는 하위 클래스 ArrayBuffer.prototype의 내장 메서드를 지원하는 데 필요한 내부 상태를 갖도록 하위 클래스 인스턴스를 생성하고 초기화하기 위해 ArrayBuffer super 호출을 포함해야 합니다.이 함수는 호출되면 다음 단계를 수행합니다:
ArrayBuffer
이 함수는 호출되면 다음 단계를 수행합니다:
ArrayBuffer.prototype의 초기 값은
이 프로퍼티는 { [[Writable]]:
ArrayBuffer[%Symbol.species%]는 set 접근자 함수가
이 함수의
ArrayBuffer 프로토타입 객체는:
ArrayBuffer.prototype.byteLength는 set 접근자 함수가
ArrayBuffer.prototype.constructor의 초기 값은
ArrayBuffer.prototype.detached는 set 접근자 함수가
ArrayBuffer.prototype.maxByteLength는 set 접근자 함수가
ArrayBuffer.prototype.resizable은 set 접근자 함수가
이 메서드는 호출되면 다음 단계를 수행합니다:
이 메서드는 호출되면 다음 단계를 수행합니다:
이 메서드는 호출되면 다음 단계를 수행합니다:
이 메서드는 호출되면 다음 단계를 수행합니다:
이 프로퍼티는 { [[Writable]]:
ArrayBuffer 인스턴스는
[[ArrayBufferData]]가
[[ArrayBufferDetachKey]]가
다음은
가능한 경우 프로그램을 배포 환경에서 테스트할 것을 권장합니다. 사용 가능한 물리 메모리의 양은 하드웨어 장치마다 크게 다릅니다. 마찬가지로 가상 메모리 하위 시스템도 하드웨어 장치와 운영 체제에 따라 크게 다릅니다. 64비트 데스크톱 웹 브라우저에서 메모리 부족 오류 없이 실행되는 애플리케이션이 32비트 모바일 웹 브라우저에서는 메모리 부족이 발생할 수 있습니다.
특정 최대 크기로
다음은
웹 브라우저처럼
MMU가 없는 임베디드 장치에서 실행되는 경우처럼
고정 길이 SharedArrayBuffer는 생성된 후 바이트 길이를 변경할 수 없는 SharedArrayBuffer입니다.
확장 가능한 SharedArrayBuffer는
생성되는 SharedArrayBuffer 객체의 종류는
호스트 정의 추상 연산 HostGrowSharedArrayBuffer. 인수 buffer (SharedArrayBuffer) 및 newByteLength (음이 아닌 정수). 반환값: (
HostGrowSharedArrayBuffer의 구현은 다음 요구 사항을 준수해야 합니다:
위의 두 번째 요구 사항은 buffer의 현재 바이트 길이를 언제 또는 어떻게 읽는지 의도적으로 모호하게 규정합니다. 바이트 길이는 기반 하드웨어의 원자적 read-modify-write 연산을 통해 업데이트해야 하므로 load-link/store-conditional 또는 load-exclusive/store-exclusive 명령 쌍을 사용하는 아키텍처에서는 쌍을 이루는 명령을 명령 스트림에서 가까이 유지하고자 할 수 있습니다. 따라서
이는 0 ≤ newByteLength ≤ buffer.[[ArrayBufferMaxByteLength]]가 보장되는
HostGrowSharedArrayBuffer의 기본 구현은
SharedArrayBuffer
extends 절 값으로 사용할 수 있습니다. 지정된 SharedArrayBuffer 동작을 상속하려는 하위 클래스 SharedArrayBuffer.prototype의 내장 메서드를 지원하는 데 필요한 내부 상태를 갖도록 하위 클래스 인스턴스를 생성하고 초기화하기 위해 SharedArrayBuffer super 호출을 포함해야 합니다.ArrayBuffer와 달리 SharedArrayBuffer는 분리될 수 없으며 내부 [[ArrayBufferData]] 슬롯은 절대
이 함수는 호출되면 다음 단계를 수행합니다:
SharedArrayBuffer
SharedArrayBuffer.prototype의 초기 값은
이 프로퍼티는 { [[Writable]]:
SharedArrayBuffer[%Symbol.species%]는 set 접근자 함수가
이 함수의
SharedArrayBuffer 프로토타입 객체는:
SharedArrayBuffer.prototype.byteLength는 set 접근자 함수가
SharedArrayBuffer.prototype.constructor의 초기 값은
이 메서드는 호출되면 다음 단계를 수행합니다:
길이를 업데이트하는 compare-exchange의 허위 실패는 금지됩니다. 새 길이에 대한 범위 검사를 통과하고 구현체의 메모리가 부족하지 않으면
SharedArrayBuffer.prototype.grow의 병렬 호출은 전순서화됩니다. 예를 들어 서로 sab.grow(10)과 sab.grow(20)을 생각해 보십시오. 두 호출 중 하나가 반드시 sab.grow(20)이 먼저 발생한 경우에도 sab.grow(10) 호출은 절대 sab를 축소하지 않으며, 대신 RangeError를 던집니다.
SharedArrayBuffer.prototype.growable은 set 접근자 함수가
SharedArrayBuffer.prototype.maxByteLength는 set 접근자 함수가
이 메서드는 호출되면 다음 단계를 수행합니다:
이 프로퍼티는 { [[Writable]]:
SharedArrayBuffer 인스턴스는
SharedArrayBuffer 인스턴스는 ArrayBuffer 인스턴스와 달리 절대 분리되지 않습니다.
다음은
가능한 경우 프로그램을 배포 환경에서 테스트할 것을 권장합니다. 사용 가능한 물리 메모리의 양은 하드웨어 장치마다 크게 다릅니다. 마찬가지로 가상 메모리 하위 시스템도 하드웨어 장치와 운영 체제에 따라 크게 다릅니다. 64비트 데스크톱 웹 브라우저에서 메모리 부족 오류 없이 실행되는 애플리케이션이 32비트 모바일 웹 브라우저에서는 메모리 부족이 발생할 수 있습니다.
특정 최대 크기로
u8[idx]와 같은 length 및 byteLength getter를 통한 명시적 길이 로드는 동기화됩니다.
다음은
확장 연산은
확장된 메모리는 병렬로
MMU가 없는 임베디드 장치에서 실행되는 경우처럼 가상 메모리가 없는
DataView With Buffer Witness Record는 DataView와 뷰가 참조하는 버퍼의 캐시된 바이트 길이를 함께 캡슐화하는 데 사용되는
DataView With Buffer Witness Records에는
| 필드 이름 | 값 | 의미 |
|---|---|---|
| [[Object]] | a DataView | 버퍼의 바이트 길이를 로드하는 DataView 객체입니다. |
| [[CachedBufferByteLength]] |
a non-negative integer or |
|
DataView
extends 절 값으로 사용할 수 있습니다. 지정된 DataView 동작을 상속하려는 하위 클래스 DataView.prototype의 내장 메서드를 지원하는 데 필요한 내부 상태를 갖도록 하위 클래스 인스턴스를 생성하고 초기화하기 위해 DataView super 호출을 포함해야 합니다.이 함수는 호출되면 다음 단계를 수행합니다:
DataView
DataView.prototype의 초기 값은
이 프로퍼티는 { [[Writable]]:
DataView 프로토타입 객체는:
DataView.prototype.buffer는 set 접근자 함수가
DataView.prototype.byteLength는 set 접근자 함수가
DataView.prototype.byteOffset은 set 접근자 함수가
DataView.prototype.constructor의 초기 값은
이 메서드는 호출되면 다음 단계를 수행합니다:
이 메서드는 호출되면 다음 단계를 수행합니다:
이 메서드는 호출되면 다음 단계를 수행합니다:
이 메서드는 호출되면 다음 단계를 수행합니다:
이 메서드는 호출되면 다음 단계를 수행합니다:
이 메서드는 호출되면 다음 단계를 수행합니다:
이 메서드는 호출되면 다음 단계를 수행합니다:
이 메서드는 호출되면 다음 단계를 수행합니다:
이 메서드는 호출되면 다음 단계를 수행합니다:
이 메서드는 호출되면 다음 단계를 수행합니다:
이 메서드는 호출되면 다음 단계를 수행합니다:
이 메서드는 호출되면 다음 단계를 수행합니다:
이 메서드는 호출되면 다음 단계를 수행합니다:
이 메서드는 호출되면 다음 단계를 수행합니다:
이 메서드는 호출되면 다음 단계를 수행합니다:
이 메서드는 호출되면 다음 단계를 수행합니다:
이 메서드는 호출되면 다음 단계를 수행합니다:
이 메서드는 호출되면 다음 단계를 수행합니다:
이 메서드는 호출되면 다음 단계를 수행합니다:
이 메서드는 호출되면 다음 단계를 수행합니다:
이 메서드는 호출되면 다음 단계를 수행합니다:
이 메서드는 호출되면 다음 단계를 수행합니다:
이 프로퍼티는 { [[Writable]]:
DataView 인스턴스는
[[DataView]] 내부 슬롯의 값은 이 명세 안에서 사용되지 않습니다. 해당 내부 슬롯이 존재한다는 사실 자체가 명세에서 DataView
Atomics 객체는:
new 연산자와 함께 Atomics 객체는 공유 메모리 배열 셀에 대해 분할 불가능하게(원자적으로) 동작하는 함수와
Waiter Record는 Atomics.wait 또는 Atomics.waitAsync의 특정 호출을 나타내는 데 사용되는
Waiter Record에는
| 필드 이름 | 값 | 의미 |
|---|---|---|
| [[AgentSignifier]] | an agent signifier |
Atomics.wait 또는 Atomics.waitAsync를 호출한 |
| [[PromiseCapability]] |
a |
Atomics.waitAsync 호출을 나타내는 경우 결과 promise이며, 그렇지 않으면 |
| [[TimeoutTime]] |
a non-negative |
타임아웃이 트리거될 수 있는 가장 이른 시간이며 |
| [[Result]] |
|
호출의 반환 값입니다. |
WaiterList Record는 Atomics.wait, Atomics.waitAsync, Atomics.notify를 통한
WaiterList Record에는
| 필드 이름 | 값 | 의미 |
|---|---|---|
| [[Waiters]] |
a |
이 WaiterList와 연결된 위치에서 대기 중인 Atomics.wait 또는 Atomics.waitAsync 호출입니다.
|
| [[MostRecentLeaveEvent]] |
a |
|
동일한 agent signifier를 갖는 여러
각 WaiterList Record에는 평가 중 해당 WaiterList Record에 대한 배타적 접근을 제어하는 임계 구역이 있습니다. 한 번에 하나의
EnterCriticalSection은
Atomics.notify 호출을 통해).additionalTimeout은 전력 소비를 줄이거나 타이밍 공격을 완화하기 위해 타이머 해상도를 낮추는 등 필요한 경우 구현체가 타임아웃을 늘릴 수 있게 합니다. 이 값은 DoWait 호출마다 달라질 수 있습니다.
&, ^ 또는 |)), xBytes (
&이면,AND 연산을 적용한 결과로 둡니다.^이면,XOR(배타적 OR) 연산을 적용한 결과로 둡니다.|입니다.OR(포괄적 OR) 연산을 적용한 결과로 둡니다.이 함수는 호출되면 다음 단계를 수행합니다:
이 함수는 호출되면 다음 단계를 수행합니다:
&, xBytes, yBytes)를 반환합니다.이 함수는 호출되면 다음 단계를 수행합니다:
이 함수는 호출되면 다음 단계를 수행합니다:
이 함수는 호출되면 다음 단계를 수행합니다:
이 함수는 최적화 프리미티브입니다. 직관적으로 크기 n바이트인 데이터에 대한 원자적 프리미티브(compareExchange, load, store, add, sub, and, or, xor, exchange)의 원자적 단계가 데이터를 구성하는 n바이트 밖에서 Atomics.isLockFree(n)은
Atomics.isLockFree(4)는 알려진 모든 관련 하드웨어에서 지원할 수 있으므로 항상
이 함수가 반환하는 값과 관계없이 모든 원자적 연산은 원자성이 보장됩니다. 예를 들어 연산 중간에 관찰 가능한 동작이 발생하는 일(예: “tearing”)은 절대 없습니다.
이 함수는 호출되면 다음 단계를 수행합니다:
이 함수는 대기 큐에서 잠들어 있는 일부
호출되면 다음 단계를 수행합니다:
이 함수는 호출되면 다음 단계를 수행합니다:
|, xBytes, yBytes)를 반환합니다.이 함수는 프로그램이 값을 기다리며 스핀 루프 중이라는 힌트를 CPU에 제공합니다.
호출되면 다음 단계를 수행합니다:
이 메서드는 mutex 내부의 spinlock 빠른 경로와 같은 스핀 대기 루프를 구현하는 프로그램이 값을 기다리며 스핀 중이라는 힌트를 CPU에 제공하도록 설계되었습니다. 타이밍 외에는 관찰 가능한 동작이 없습니다.
기반 아키텍처의 모범 사례가 스핀 루프에서 pause 또는 yield 명령을 권장하는 경우 구현체가 그러한 명령을 구현할 것으로 예상됩니다. 예를 들어 Intel Optimization Manual에서는 pause 명령을 권장합니다.
구현체는 일시 중단되는 최대 시간에 대해 수십~수백 나노초 정도의 내부 상한을 두는 것이 권장됩니다.
함수 호출의 오버헤드 때문에 최적화 컴파일러에서 이 메서드에 대한 인라인 호출이 인라인되지 않은 호출과 다른 시간 동안 기다리는 것은 합리적입니다.
이 함수는 호출되면 다음 단계를 수행합니다:
이 함수는 호출되면 다음 단계를 수행합니다:
이 함수는
호출되면 다음 단계를 수행합니다:
이 함수는 호출
호출되면 다음 단계를 수행합니다:
이 함수는 호출되면 다음 단계를 수행합니다:
^, xBytes, yBytes)를 반환합니다.이 프로퍼티는 { [[Writable]]:
JSON 객체는:
parse와 stringify를 포함합니다.new 연산자와 함께 JSON 데이터 교환 형식은 ECMA-404에 정의되어 있습니다. 이 명세에서 사용하는 JSON 교환 형식은 ECMA-404에 설명된 것과 정확히 같습니다. JSON.parse 및 JSON.stringify의 적합한 구현체는 형식에서 삭제하거나 확장하지 않고 ECMA-404에 설명된 정확한 교환 형식을 지원해야 합니다.
이 함수는 호출되면 다음 단계를 수행합니다:
이 함수는 JSON 텍스트(JSON 형식의 String)를 파싱하고 ECMAScript language value를 생성합니다. JSON 형식은 ECMAScript 리터럴, Array Initializer, Object Initializer의 구문과 유사한 구문으로 리터럴, 배열, 객체를 나타냅니다. 파싱 후 JSON 객체는 ECMAScript 객체로 실체화됩니다. JSON 배열은 ECMAScript Array 인스턴스로 실체화됩니다. JSON 문자열, 숫자, 불리언, null은 ECMAScript String, Number, Boolean,
선택적 reviver 매개변수는 결과를 필터링하고 변환할 수 있는 함수입니다. 파싱으로 생성된 각 값에 대해 reviver는 세 인수(연결된
이 함수의
적합한 JSON.parse 구현체가 JSON 문법을 확장하는 것은 허용되지 않습니다. 구현체가 수정되거나 확장된 JSON 교환 형식을 지원하려면 다른 parse 함수를 정의하여 수행해야 합니다.
유효한 JSON 텍스트는 ECMAScript
그러나
객체 안에 중복된 이름의 String이 있는 경우 어휘적으로 앞선 동일 키의 값은 덮어써야 합니다.
JSON Parse Record는 JSON 텍스트에서 파싱된 값의 초기 상태를 설명하는 데 사용되는
JSON Parse Records에는
| 필드 이름 | 값 | 의미 |
|---|---|---|
| [[ParseNode]] | a Parse Node | 컨텍스트 Parse Node입니다. |
| [[Key]] | a property name | [[Value]]와 연결된 |
| [[Value]] | an ECMAScript language value | [[ParseNode]] 평가로 생성된 값입니다. |
| [[Elements]] | a |
[[Value]]가 Array이면 [[Value]]의 요소에 대응하는 |
| [[Entries]] | a |
[[Value]]가 Array가 아닌 Object이면 [[Value]]의 항목에 대응하는 |
{"a":"lost","a":"kept"}) 결과 ECMAScript 객체의 대응하는 프로퍼티 값은 해당 이름을 갖는 마지막 쌍으로 지정됩니다.이 알고리즘은 [[Delete]] 또는
호출되면 다음 단계를 수행합니다:
JSON.parse 내장 number 토큰은 음수 값을 나타낼 수 있습니다. ECMAScript에서 부정은 - 뒤에 파생된 이 함수는 문자열, 숫자, 불리언 또는 null 값의 원시 JSON 텍스트를 나타내는 객체를 반환합니다.
이 함수는 ECMAScript language value를 나타내는 UTF-16 인코딩 JSON 형식의 String 또는
호출되면 다음 단계를 수행합니다:
이 함수의
JSON 구조는 임의의 깊이로 중첩될 수 있지만 순환해서는 안 됩니다. value가 순환 구조이거나 순환 구조를 포함하면 이 함수는
a = [];
a[0] = a;
my_text = JSON.stringify(a); // 이는 TypeError를 던져야 합니다.
기호적 프리미티브 값은 다음과 같이 렌더링됩니다:
String 값은 QUOTATION MARK (") 코드 단위로 감쌉니다. 코드 단위 " 및 \는 \ 접두사를 사용하여 이스케이프합니다. 제어 문자 코드 단위는 이스케이프 시퀀스 \uHHHH 또는 더 짧은 형식인 \b (BACKSPACE), \f (FORM FEED), \n (LINE FEED), \r (CARRIAGE RETURN), \t (CHARACTER TABULATION)로 대체합니다.
JSON 표현이 없는 값(예:
객체는 U+007B (LEFT CURLY BRACKET) 뒤에 0개 이상의 프로퍼티를 U+002C (COMMA)로 구분하여 배치하고 U+007D (RIGHT CURLY BRACKET)로 닫아 렌더링합니다. 프로퍼티는
JSON Serialization Record는 JSON 형식으로 직렬화할 수 있도록 하는 데 사용되는
JSON Serialization Records에는
| 필드 이름 | 값 | 의미 |
|---|---|---|
| [[ReplacerFunction]] | a function object or |
객체 프로퍼티에 대한 대체 값을 제공할 수 있는 함수입니다(JSON.stringify의 replacer 매개변수에서 가져옵니다). |
| [[PropertyList]] | either a |
배열이 아닌 객체를 직렬화할 때 포함할 |
| [[Gap]] | a String | 들여쓰기 단위입니다(JSON.stringify의 space 매개변수에서 가져옵니다). |
| [[Stack]] | a |
직렬화 중인 중첩 객체의 집합입니다. 순환 구조를 감지하는 데 사용합니다. |
| [[Indent]] | a String | 현재 들여쓰기입니다. |
| 코드 포인트 | 유니코드 문자 이름 | 이스케이프 시퀀스 |
|---|---|---|
| U+0008 | BACKSPACE |
\b
|
| U+0009 | CHARACTER TABULATION |
\t
|
| U+000A | LINE FEED (LF) |
\n
|
| U+000C | FORM FEED (FF) |
\f
|
| U+000D | CARRIAGE RETURN (CR) |
\r
|
| U+0022 | QUOTATION MARK |
\"
|
| U+005C | REVERSE SOLIDUS |
\\
|
이 프로퍼티는 { [[Writable]]: