컴포넌트
개념적으로 컴포넌트는 공유 메모리 대신 오직 인터페이스를 통해서만 상호 작용하는 자기 기술적(self-describing) WebAssembly 바이너리입니다. 각 용어가 무엇을 의미하는지 하나씩 살펴보겠습니다.
- 자기 기술적: WebAssembly 코어 모듈과 마찬가지로, 컴포넌트는 임포트 및 익스포트되는 함수의 이름과 타입을 모두 선언하는 임포트 및 익스포트 선언을 포함합니다. 코어 모듈과 비교하여 컴포넌트는 이러한 타입을 기술하기 위해 더 풍부한 타입 시스템을 사용하므로, 모듈이 어떤 기능을 제공하고 어떤 기능에 의존하는지 더 쉽게 이해할 수 있습니다.
- 상호 작용: 컴포넌트가 다른 컴포넌트와 상호 작용한다는 것은 해당 컴포넌트가 다른 컴포넌트에 정의된 함수를 호출하거나, 다른 컴포넌트가 해당 컴포넌트에 정의된 함수를 호출한다는 의미입니다. 인터페이스는 어떤 종류의 함수 호출이 유효한지를 명시합니다.
- 공유 메모리: “왜 컴포넌트 모델인가?” 섹션에서 WebAssembly 코어 모듈이 공유 메모리를 통해서만 복합 데이터를 교환할 수 있음을 살펴보았습니다. 컴포넌트는 코어 모듈과 동일한 방식으로 메모리를 사용하지만, 컴포넌트에서는 메모리가 결코 익스포트되거나 임포트되지 않는다는 점이 다릅니다. 즉, 메모리는 공유되지 않습니다.
논리적으로 컴포넌트는 코어 모듈 및/또는 다른 컴포넌트를 포함할 수 있는 구조입니다. 컴포넌트는 포함된 이러한 모듈과 하위 컴포넌트의 인터페이스를 WebAssembly 인터페이스 타입(WIT)을 사용하여 인코딩합니다.
컴포넌트에 대한 보다 형식적인 정의는 컴포넌트 모델 명세를 참고하십시오.
디스크상에서 컴포넌트는 특수한 형식의 WebAssembly 바이너리로 표현됩니다. 내부적으로 이 파일은 임포트와 익스포트를 통해 함께 합성된, 하나 이상의 전통적인(“코어”) WebAssembly 모듈과 하위 컴포넌트의 표현을 포함할 수 있습니다. 한쪽의 임포트가 다른 쪽의 익스포트로 충족된다면 두 모듈 또는 컴포넌트를 합성할 수 있습니다. 합성은 임의로 반복할 수 있으며, 서로 맞물리는 여러 모듈과 컴포넌트로 단일 컴포넌트를 합성할 수 있습니다. 인터페이스를 통해 특정 합성이 타당한지 검사할 수 있습니다.
각 컴포넌트는 월드로 기술되며, 월드는 컴포넌트의 모든 임포트와 익스포트를 기술하기 위해 여러 인터페이스를 함께 모을 수 있습니다. 월드는 임포트 및 익스포트되는 함수의 타입만 기술하며, 월드를 구현하는 코드는 컴포넌트가 내부적으로 정의합니다.
합성
한쪽의 임포트가 다른 쪽의 익스포트로 충족된다면 두 모듈 또는 컴포넌트를 합성할 수 있습니다. 합성은 임의로 반복할 수 있으며, 서로 맞물리는 여러 모듈과 컴포넌트로 단일 컴포넌트를 합성할 수 있습니다. 인터페이스를 통해 특정 합성이 타당한지 검사할 수 있습니다.