OCaml中的String.blit与String.sub

OCaml中的String.blit与String.sub,ocaml,Ocaml,在OCaml中使用String.blit或String.sub更好吗?我所说的更好,是指更多的时间或内存效率,甚至是更惯用的语言 也就是说,这样做是否“更好”: 或 它们都在内部调用相同的函数unsafe\u blit。我将使用使您的代码最清晰的函数。它们都在内部调用相同的函数unsafe\u blit。我将使用使您的代码最清晰的函数。由于这两个函数具有不同的语义,这取决于您想做什么 确实可以使用String.blit将字符串的一部分复制到新的字符串中,但我认为您不应该使用它而不是sub。首先,

在OCaml中使用String.blit或String.sub更好吗?我所说的更好,是指更多的时间或内存效率,甚至是更惯用的语言

也就是说,这样做是否“更好”:


它们都在内部调用相同的函数
unsafe\u blit
。我将使用使您的代码最清晰的函数。

它们都在内部调用相同的函数
unsafe\u blit
。我将使用使您的代码最清晰的函数。

由于这两个函数具有不同的语义,这取决于您想做什么

确实可以使用
String.blit
将字符串的一部分复制到新的字符串中,但我认为您不应该使用它而不是
sub
。首先,如果切换到OCAML4.02并尝试使用
字节
,则情况会很糟糕。然后,它使您的代码变得不那么清晰(并且您还必须添加一个字符串创建)


另外,请注意,
blit
是一个必需的特性,而
sub
本身就是功能性的。所以这主要取决于你个人的编程风格。不过,就表现而言,它们是相当可比的。如果开发团队决定对常量字符串使用不同的表示形式,这种情况可能会改变(不过不要着急,这在未来几年内不会发生)。

由于这两个函数具有不同的语义,这取决于您想要做什么

确实可以使用
String.blit
将字符串的一部分复制到新的字符串中,但我认为您不应该使用它而不是
sub
。首先,如果切换到OCAML4.02并尝试使用
字节
,则情况会很糟糕。然后,它使您的代码变得不那么清晰(并且您还必须添加一个字符串创建)


另外,请注意,
blit
是一个必需的特性,而
sub
本身就是功能性的。所以这主要取决于你个人的编程风格。不过,就表现而言,它们是相当可比的。如果开发团队决定对常量字符串使用不同的表示形式,这种情况可能会发生变化(不过不要着急,这在未来几年内不会发生)。

String.blit
允许重用相同的缓冲区或使用部分缓冲区。如果您不需要这些东西,只需使用
sub


就复杂性而言,这两种操作在子字符串/间隔的大小上都是线性的。

字符串。blit允许重用相同的缓冲区或使用部分缓冲区。如果您不需要这些东西,只需使用
sub


就复杂性而言,这两种操作在子字符串/间隔的大小上都是线性的。

它们做的事情不同!请看修订版!他们做不同的事情!请看修订版!
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. *)