Assemblyscript: .toUTF8 与 .fromUTF8 的行为不一致、混乱且效率低下

创建于 2018-12-23  ·  3评论  ·  资料来源: AssemblyScript/assemblyscript

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 对用户来说会更加清晰和方便。

enhancement

最有用的评论

替代解决方案是引入一个基本类型,如

class MemSlice {
    constructor(readonly offset: usize, readonly length: usize) {}
    ...
}

一般来说,这将非常有用

所有3条评论

替代解决方案是引入一个基本类型,如

class MemSlice {
    constructor(readonly offset: usize, readonly length: usize) {}
    ...
}

一般来说,这将非常有用

同意,这些 API 并不理想。 甚至可能将它们从字符串类中移到专门针对互操作(使用 C)的对象中。

此 PR中改进了 UTF8/UTF16 api

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

emil14 picture emil14  ·  3评论

drachehavoc picture drachehavoc  ·  6评论

pannous picture pannous  ·  4评论

torch2424 picture torch2424  ·  5评论

kungfooman picture kungfooman  ·  5评论