On 19 January 2011 23:59, Evan Laforge <[email protected]> wrote: > Another thing is that performance in logging is pretty critical. When > I profile, logging functions wind up in the expensive list if I'm not > careful. I don't know bad an unsafePerformIO plus a catch for every > log msg is going to be, but it's not going to be as fast as doing the > work at compile time.
It is possible that GHC's optimiser will let-float the "getSourceLoc assert" application to the top level, which would ensure that you only take the hit the first time. However, I'm not sure about this - do an experiment! Since logging is in IO anyway, perhaps GHC could provide a new magic primitive, (location :: IO String), which was replaced by the compiler with an expression like (return "MyLocation:42:1"). Your consumer could then look like myLogFunction location "extra-info" (myLogFunction is in IO and would deal with >>=ing in the location). This would be much less of a potential performance drag than going through exceptions. Shouldn't be too hard to patch GHC to do this, either. Cheers, Max _______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
