🐰 MoonBit 字符串的 山 WebAssembly 漂流 [jsr-000T]

写这篇文章的起因来自和群友 A、B 的一次闲聊。群友 A 尝试使用 wasmtime 调用某个 🐰 MoonBit 编译出的 山 WebAssembly 函数,这个函数最终会返回一个字符串,他没有得到预期的结果,而是得到了一个看起来像是指针的数字。我检查编译结果后发现 🐰 MoonBit 山 WebAssembly 中返回的字符串实际上是一个作为 memory table offset 的 i32 常数。群友 B 指出其中的问题:一个 i32 只表示了位置,没有长度信息;他继而考虑这也许是 C 式字符串(使用 \0 标记字符串结尾)。但如果我们仔细观察 🐰 MoonBit 编译出的 WAT 文件,很容易发现 memory data 看起来并不像 C 式字符串⸺也确实不是,我写下这篇文章作为探索其编码的备忘录。