Go로 생성된 WASM 바이너리가 매우 큰 문제점이 있음. TinyGo는 이를 극복하지만 컴파일 속도가 느리고 라이브러리 선택에 주의가 필요함. 둘 다 극복하려면 많은 인내심이 필요함
Cloudflare workers에서 Go WASM을 시도하려면 바이너리 크기 때문에 구독이 필요함
마지막 시도에서는 hello-world는 실행 가능했지만, 더 복잡한 것은 크기 제한을 초과했음
안타까운 상황임
놀라운 점임. 기억해야 할 사항:
Go의 웹어셈블리 작업은 Go 팀이 아닌 자원봉사자들에 의해 설계되고 구현되었음. 따라서 일정은 자원봉사자의 가용성에 따라 달라짐
Go 1.24 이전에도 Go 함수를 JS로 내보내는 것이 가능하지 않았는지 기억이 잘 나지 않음. 이전에 JS에서 내보낸 Go 함수를 문제없이 호출할 수 있었던 것으로 기억함
새로운 WASI 기능이 이전에 비해 어떻게 개선되었는지 설명해주면 도움이 될 것임 (FFI를 통해 더 많은 유형을 지원하는 것 외에)
두 번째 질문: 포인터를 정수로 캐스팅하여 문자열 및 복잡한 유형을 WASM 모듈의 인스턴스 메모리에서 추출할 수 있었음. Go에서 내 유형의 이진 표현이 안정적임이 보장된다면, goos=wasip1을 사용할 때 생성된 WASM 모듈에 포인터를 전달하는 이 방법이 여전히 유효한지 궁금함
메인 패키지에서 대문자로 시작하는 모든 함수를 내보내는 것이 더 "Go"스러웠을 것 같음. 내보내기는 언어에서 일반적으로 작동하므로 소문자로 시작하는 것을 명시적으로 이름 지정할 때만 컴파일러 지시문을 사용하는 것이 좋음
이는 기존 cgo 내보내기 방식과 동일함. 이전의 예시를 따르는 것임. 사용성은 여전히 언어 외부에 있음
WASM 컴포넌트 모델과의 작업에 대한 언급이 없음
Go와 WASM의 가비지 컬렉션은 어떻게 작동하는지 궁금함
강력한 타입과 뛰어난 WASM 지원을 갖춘 저수준 언어가 있었으면 좋겠음
호스트 프로그램에서 실행 중인 WASM 모듈을 어떻게 디버그하는지 궁금함
더 많은 WASM 기능에 대한 열망이 젊은 생태계를 돌이킬 수 없게 해칠까 걱정됨. Go가 WASM에 추가한 대부분의 기능은 컴포넌트 모델 제안이 이미 병합되었다면 네이티브로 수행할 수 있었음
표준은 천천히 발전하고 있으며 채택이 증가함에 따라 WASI와 같은 비표준 기능을 영원히 지원해야 할 위험이 있음
Hacker News 의견
Go로 생성된 WASM 바이너리가 매우 큰 문제점이 있음. TinyGo는 이를 극복하지만 컴파일 속도가 느리고 라이브러리 선택에 주의가 필요함. 둘 다 극복하려면 많은 인내심이 필요함
놀라운 점임. 기억해야 할 사항:
Go 1.24 이전에도 Go 함수를 JS로 내보내는 것이 가능하지 않았는지 기억이 잘 나지 않음. 이전에 JS에서 내보낸 Go 함수를 문제없이 호출할 수 있었던 것으로 기억함
메인 패키지에서 대문자로 시작하는 모든 함수를 내보내는 것이 더 "Go"스러웠을 것 같음. 내보내기는 언어에서 일반적으로 작동하므로 소문자로 시작하는 것을 명시적으로 이름 지정할 때만 컴파일러 지시문을 사용하는 것이 좋음
WASM 컴포넌트 모델과의 작업에 대한 언급이 없음
Go와 WASM의 가비지 컬렉션은 어떻게 작동하는지 궁금함
강력한 타입과 뛰어난 WASM 지원을 갖춘 저수준 언어가 있었으면 좋겠음
호스트 프로그램에서 실행 중인 WASM 모듈을 어떻게 디버그하는지 궁금함
더 많은 WASM 기능에 대한 열망이 젊은 생태계를 돌이킬 수 없게 해칠까 걱정됨. Go가 WASM에 추가한 대부분의 기능은 컴포넌트 모델 제안이 이미 병합되었다면 네이티브로 수행할 수 있었음