gpt4 book ai didi

haskell - 在 STM 事务中使用跟踪是否安全?

转载 作者:行者123 更新时间:2023-12-02 13:39:13 27 4
gpt4 key购买 nike

我有一个事务由于某种原因无限期失败,我想在内部使用跟踪指令。例如,要在执行此片段中的事务之前打印 MVar 的状态:

    data_out <- atomically $ do 
rtg_state <- takeTMVar ready_to_go
JobDescr hashid url <- T.readTBChan next_job_descr
case rtg_state of
Ready_RTG n -> do
putTMVar ready_to_go $ Processing_RTG n
putTMVar start_harvester_browser hashid
putTMVar next_test_url_to_check_chan hashid
putTMVar next_harvest_url hashid
return (n,hashid,url)
_ -> retry

这会导致程序出现段错误或行为异常吗?

最佳答案

只要您仅将 trace 用于调试目的,就应该没问题。作为一般规则,假设在程序的最终生产就绪版本中不会有trace

您永远不会从 trace 中观察到段错误。它的“不安全”源于它在纯代码中注入(inject)可观察到的效果。例如,在 STM 中,当事务重试时,其效果被假定为回滚。如果使用 trace 向用户发送消息,则无法回滚该消息。如果 trace 的输出触发导弹发射,您将不得不处理国际副作用。如果 trace 只是向开发人员发出“仅供引用,代码正在执行 X”的信号,那么这不是程序核心逻辑的一部分,而且完全没问题。

关于haskell - 在 STM 事务中使用跟踪是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30569279/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com