WASM 是一个低级虚拟机,因此它应该能够处理表示为二进制数组的字符串。
有方便的方法 .fromUTF8 和 .toUTF8: https :
然而,它们在三个方面是不对称的:
fromUTF8
需要知道字符串长度,而toUTF8
不返回该值。 你必须单独调用lengthUTF8
,这很浪费(它已经在toUTF8
调用fromUTF8
处理字符串中的\0
unicode 字符,而toUTF8
给人的印象是这些字符不受支持fromUTF8
需要以字节为单位的编码字符串的纯大小,而lengthUTF8
返回带有零字节填充的大小。 即使现有的测试也必须明确调整: https : 这是一种低效且令人困惑的方法。 如果 AssemblyScript 的目标是成为一种高级 WASM 友好的语言,那么在标准库中使用 C-isms 就像指向空终止字符串的裸指针一样感觉与这些目标背道而驰。
我的建议是将 .lengthUTF8 和 .toUTF8 重命名为 .lengthUTF8ZeroTerminated、.toUTF8ZeroTerminated 并引入 .toUTF8Buffer,它返回一个填充了正确内容和大小的 ArrayBuffer。 这个 API 对用户来说会更加清晰和方便。
替代解决方案是引入一个基本类型,如
class MemSlice {
constructor(readonly offset: usize, readonly length: usize) {}
...
}
一般来说,这将非常有用
同意,这些 API 并不理想。 甚至可能将它们从字符串类中移到专门针对互操作(使用 C)的对象中。
此 PR中改进了 UTF8/UTF16 api
最有用的评论
替代解决方案是引入一个基本类型,如
一般来说,这将非常有用