String.blit 与 OCaml 中的 String.sub
String.blit vs String.sub in OCaml
在 OCaml 中使用 String.blit 还是 String.sub 更好?我所说的更好是指更多的时间或内存效率,甚至更惯用。
即是 "better" 做:
let new_string = String.sub old_string 0 4;;
或者
String.blit old_string 0 new_string 0 4;; (* I guess new_string is a byte seq here. *)
他们都在内部调用同一个函数unsafe_blit
。我会使用使您的代码最清晰的那个。
由于这两个函数有不同的语义,这取决于你想做什么。
String.blit
确实可以用来将字符串的一部分复制到新的新字符串中,但我认为您不应该使用它来代替 sub
。首先,当您切换到 OCaml 4.02 并尝试使用 Bytes
时,这会很糟糕。然后,它会使您的代码变得不那么清晰(并且您还必须添加一个字符串创建)。
此外,请注意 blit
是命令式功能,而 sub
本身是功能性的。所以这主要取决于你个人的编程风格。但在性能方面,它们具有相当的可比性。如果开发团队决定对常量字符串使用不同的表示形式,这可能会改变(不过不要急,未来几年不会发生)。
String.blit
允许重复使用相同的缓冲区或使用部分缓冲区。如果您不需要这些东西,只需使用 sub
.
就复杂度而言,这两个操作在 substring/interval 的大小上都是线性的。
在 OCaml 中使用 String.blit 还是 String.sub 更好?我所说的更好是指更多的时间或内存效率,甚至更惯用。
即是 "better" 做:
let new_string = String.sub old_string 0 4;;
或者
String.blit old_string 0 new_string 0 4;; (* I guess new_string is a byte seq here. *)
他们都在内部调用同一个函数unsafe_blit
。我会使用使您的代码最清晰的那个。
由于这两个函数有不同的语义,这取决于你想做什么。
String.blit
确实可以用来将字符串的一部分复制到新的新字符串中,但我认为您不应该使用它来代替 sub
。首先,当您切换到 OCaml 4.02 并尝试使用 Bytes
时,这会很糟糕。然后,它会使您的代码变得不那么清晰(并且您还必须添加一个字符串创建)。
此外,请注意 blit
是命令式功能,而 sub
本身是功能性的。所以这主要取决于你个人的编程风格。但在性能方面,它们具有相当的可比性。如果开发团队决定对常量字符串使用不同的表示形式,这可能会改变(不过不要急,未来几年不会发生)。
String.blit
允许重复使用相同的缓冲区或使用部分缓冲区。如果您不需要这些东西,只需使用 sub
.
就复杂度而言,这两个操作在 substring/interval 的大小上都是线性的。