# Swift에서 WebAssembly 지원을 위한 비전 제안

> Clean Markdown view of GeekNews topic #20190. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=20190](https://news.hada.io/topic?id=20190)
- GeekNews Markdown: [https://news.hada.io/topic/20190.md](https://news.hada.io/topic/20190.md)
- Type: GN+
- Author: [xguru](https://news.hada.io/@xguru)
- Published: 2025-04-07T10:38:17+09:00
- Updated: 2025-04-07T10:38:17+09:00
- Original source: [forums.swift.org](https://forums.swift.org/t/pitch-a-vision-for-webassembly-support-in-swift/79060)
- Points: 4
- Comments: 1

## Topic Body

- Swift 커뮤니티는 **WebAssembly(Wasm)** 지원을 꾸준히 개발해 왔으며, 이를 바탕으로 장기적인 비전을 제안함  
- WebAssembly는 **이식성, 보안성, 성능**을 중시하는 **가상 머신 명령어 집합**으로, 다양한 플랫폼에서 실행 가능함  
- Swift에서 Wasm을 지원하면 **브라우저를 포함한 새로운 환경**에서 Swift를 사용할 수 있으며, **클라이언트/서버 애플리케이션** 모두에서 활용 가능성 확대됨  
  
### 보안 및 시스템 인터페이스 특성  
  
- Wasm은 **직접적인 시스템 접근 없이 명시적으로 가져온 함수만 실행**할 수 있어 보안에 유리함  
- **WASI(WebAssembly System Interface)** 는 Wasm이 호스트 OS와 상호작용할 수 있도록 표준 API를 제공  
- Swift는 `wasm32-unknown-wasi` 타겟에서 WASI libc를 기반으로 동작하며, C 인터롭을 통해 이미 사용 가능함  
- W3C는 **Component Model**을 통해 Wasm의 타입 시스템과 모듈 연동을 통합 관리하고 있음  
  - `wit-tool`을 통해 Swift 선언에서 `.wit` 생성 가능, 반대 방향도 지원  
  
### 주요 활용 사례  
  
- **Swift 매크로**를 Wasm으로 컴파일해 어디서나 실행 가능한 바이너리로 배포 가능  
- SwiftPM 플러그인, 매니페스트, 매크로 등의 실행을 **가상화하여 보안성 강화**  
- Wasm은 JIT 또는 AOT 컴파일로 최적화된 바이너리를 생성할 수 있어 **성능 손실 최소화**  
- Wasm으로 가상화된 Swift 컴포넌트는 **별도 프로세스 없이 실행 가능**, IPC 오버헤드 제거  
  
### 제안된 목표  
  
1. **Swift 표준 라이브러리의 WASI 지원 API 범위 확대**  
   - 테스트 자동화를 위한 CI 환경 구축 필요  
2. **크로스 컴파일 도구 개선**  
   - Swift SDK의 버전 관리와 설치 간소화  
3. **Component Model 통합**  
   - 최신 WASI 사양이 Swift에서도 사용 가능하도록 지원  
4. **다른 Wasm 컴포넌트와의 인터롭 향상**  
   - Swift에서 Wasm 컴포넌트를 사용하는 경험을 C/C++와 동등하게 만드는 것이 목표  
5. **Wasm에서의 Swift 디버깅 환경 개선**  
  
### 디버깅 관련 사항  
  
- **Wasm의 디버깅은 제한적**, 자체적으로 introspection 기능이 없음  
- 두 가지 주요 접근 방식이 존재  
  1. LLDB와 GDB 프로토콜을 지원하는 Wasm 런타임  
  2. Wasm 엔진에 내장된 디버거  
- **브라우저 환경과 비브라우저 환경은 서로 다른 디버깅 접근 필요**  
- Chrome DevTools 등의 도구에서 DWARF 정보를 활용 가능하지만, Swift 메타데이터와 JIT 표현식 평가 기능은 추가 통합 필요  
  
### 멀티스레딩 및 동시성  
  
- Wasm은 현재 **순차적 일관성을 지원하는 원자 연산**만 존재  
- 스레드 생성은 **호스트 환경에 의존**  
- 두 가지 스레딩 제안 존재:  
  - `wasi-threads` (기존 방식, 일부 도구 및 런타임에서 지원됨)  
  - `shared-everything-threads` (새로운 제안, 향후 표준이 될 가능성 있음)  
- Swift는 `wasm32-unknown-wasi` (단일 스레드), `wasm32-unknown-wasip1-threads` (멀티스레드) 지원  
- 현재는 **libdispatch가 wasi-threads를 지원하지 않기 때문에 단일 스레드 기반의 Swift Concurrency 실행기**를 사용 중  
  
### 64비트 주소 공간  
  
- Wasm은 기본적으로 **32비트 주소 공간**을 사용  
- **64비트 메모리 제안(memory64)** 은 구현 단계에 있음  
- Swift에서 이를 지원하려면 **WebAssembly 도구 체인의 협조** 또는 **Swift 메타데이터 구조 변경** 필요  
  
### 공유 라이브러리  
  
- 두 가지 방식 존재  
  1. **Emscripten 스타일 동적 링크**: 비표준적이며 런타임 기능 의존  
  2. **Component Model 기반 정적 링크**: 런타임 특수 기능 없이도 사용 가능하나, 런타임 로딩은 불가  
- Swift에서 공유 라이브러리를 사용하려면 **PIC(Position-Independent Code)** 모드로 컴파일하고, **정해진 링크 규약**을 따라야 함

## Comments



### Comment 36835

- Author: kandk
- Created: 2025-04-07T11:25:10+09:00
- Points: 1

스위프트 좋은데, 버려진 스위프트 다시 살아 날 수 있을까요..
