ATS2 中的字符串是如何释放的?
How are strings freed in ATS2?
http://www.ats-lang.org/Documents.html 包括 "Introduction to Programming in ATS",其中包括 fileref_get_line_string
returns a Strptr1
的断言(查看 filebas.dats
表明它returns a String
via strptr2string
), 它包括这个代码:
#include "share/atspre_staload.hats"
#include "share/atspre_staload_libats_ML.hats"
implement main0() = loop() where
fun loop(): void = let
val isnot = fileref_isnot_eof(stdin_ref)
in
if isnot then let
val line = fileref_get_line_string(stdin_ref)
val () = print_string(line)
val () = strptr_free(line)
in
loop()
end else ()
end
end
如果包含 strptr_free
行,则会引发类型错误。如果不包含该行,程序就会公然泄漏内存。是否有当前文档或 ATS2 示例说明应该如何使用 fileref_* 字词?以上代码的 ATS2 版本是什么?
fileref_get_line_string有两个版本:一个在prelude/filebas和
另一个在 libats/ML/filebas。要获得线性字符串,您需要
前者:
#include
"share/atspre_staload.hats"
implement
main0() = loop() where
fun
loop(): void = let
val
isnot =
fileref_isnot_eof(stdin_ref)
in
if isnot then let
val line =
fileref_get_line_string(stdin_ref)
val () =
print_strptr(line)
val () = free(line)
in
loop()
end else ()
end
end
http://www.ats-lang.org/Documents.html 包括 "Introduction to Programming in ATS",其中包括 fileref_get_line_string
returns a Strptr1
的断言(查看 filebas.dats
表明它returns a String
via strptr2string
), 它包括这个代码:
#include "share/atspre_staload.hats"
#include "share/atspre_staload_libats_ML.hats"
implement main0() = loop() where
fun loop(): void = let
val isnot = fileref_isnot_eof(stdin_ref)
in
if isnot then let
val line = fileref_get_line_string(stdin_ref)
val () = print_string(line)
val () = strptr_free(line)
in
loop()
end else ()
end
end
如果包含 strptr_free
行,则会引发类型错误。如果不包含该行,程序就会公然泄漏内存。是否有当前文档或 ATS2 示例说明应该如何使用 fileref_* 字词?以上代码的 ATS2 版本是什么?
fileref_get_line_string有两个版本:一个在prelude/filebas和 另一个在 libats/ML/filebas。要获得线性字符串,您需要 前者:
#include
"share/atspre_staload.hats"
implement
main0() = loop() where
fun
loop(): void = let
val
isnot =
fileref_isnot_eof(stdin_ref)
in
if isnot then let
val line =
fileref_get_line_string(stdin_ref)
val () =
print_strptr(line)
val () = free(line)
in
loop()
end else ()
end
end