我刚刚注意到Lwt.mli中的以下功能:
val backtrace_bind : (exn -> exn) -> 'a t -> ('a -> 'b t) -> 'b t
val backtrace_catch : (exn -> exn) -> (unit -> 'a t) -> (exn -> 'a t) -> 'a t
val backtrace_try_bind : (exn -> exn) -> (unit -> 'a t) -> ('a -> 'b t) -> (exn -> 'b t) -> 'b t
val backtrace_finalize : (exn -> exn) -> (unit -> 'a t) -> (unit -> unit t) -> 'a t
不幸的是,他们没有证件。他们做了什么?
答案 0 :(得分:2)
GitHub和文档中的一些挖掘表明,当使用pa_lwt
并将-lwt-debug
传递给camlp4
时,这些内部用于在线程之间传播回溯。默认情况下,它们也用于ppx_lwt
。
此页面上记录了-lwt-debug
选项:http://ocsigen.org/lwt/2.5.0/manual/(在页面中搜索"回溯支持"转到它)。
此处记录了ppx_lwt
中关闭 的选项:https://ocsigen.org/lwt/dev/api/Ppx_lwt(搜索-no-debug
)。
请参阅此提交,其中显示这些提交在try_lwt
等生成的代码中使用:https://github.com/ocsigen/lwt/commit/78eee34fb6247da38a3d4ea5b7872676181d47e2
已编辑:通过查看更多代码并纳入评论确认更多内容。