project-mahiwa / mahiwa-frontend-go

mahiwaのGo言語向けフロントエンド
https://pkg.go.dev/github.com/project-mahiwa/mahiwa-frontend-go
MIT License
0 stars 0 forks source link

[🐛Bug]:randomの名前がWASIと競合する??? #26

Closed usuyuki closed 10 months ago

usuyuki commented 10 months ago

🐛 概要

tinygo build -target ./target.json -o main.wasm main.go
tinygo:wasm-ld: warning: function signature mismatch: random
>>> defined as () -> i64 in lto.tmp
>>> defined as () -> i32 in /opt/usuyuki/homebrew/Cellar/tinygo/0.30.0/lib/wasi-libc/sysroot/lib/wasm32-wasi/libc.a(random.o)

原因

tinygoで指定できるのがwasmかwasiで,どっち指定しても暗黙的にwasiが読まれているっぽい?

備考

この結果,wasm上でただしくimportが生成されず

  (func $signature_mismatch:random (type 8) (result i64)
    unreachable)

となる.

usuyuki commented 10 months ago

https://github.com/project-mahiwa/mahiwa-frontend-go/issues/25 と同じ問題

usuyuki commented 10 months ago

int32でやってみる.

usuyuki commented 10 months ago

module分けてるので競合するはずがないのに,競合扱いにされるのでコンパイルの過程のバグの可能性が高い.

usuyuki commented 10 months ago

型を一致させたらrandomのimportは消え,WebAssembly内に実装されるようになった……

usuyuki commented 10 months ago
tinygo:wasm-ld: warning: function signature mismatch: random
>>> defined as () -> i64 in lto.tmp
>>> defined as () -> i32 in /opt/usuyuki/homebrew/Cellar/tinygo/0.30.0/lib/wasi-libc/sysroot/lib/wasm32-wasi/libc.a(random.o)    

そもそもwasiのrandはまだないはずでは…… https://github.com/WebAssembly/wasi-random Phase 3の状態.

usuyuki commented 10 months ago

randomArduinoと名前を変えることで対処. 全部変えることになるが,WebAssemblyでのimportの名前なので記述する上では変わらないのでユーザー影響なし.