
On 14/03/12 22:32, Ranjit Jhala wrote:
Dear Simon,
I am indeed using the GHC API -- to crunch .hs source to CoreExpr, which I then walk over to generate refinement type constraints and so on.
In the past (with GHC 7.04) I *was* able to do some profiling -- to hunt down a space leak. However, perhaps at that time I was not using hscCompileCoreExpr but something else? However, it could also be something silly like me not having built 7.4.1 with profiling support?
Specifically, here's I think, the key bits of GHC API code I'm using (from the link you sent, I suspect 2 is the problem) but any clues will be welcome!
1. To extract the mod_guts from the file "fn"
getGhcModGuts1 :: (GhcMonad m) => FilePath -> m ModGuts getGhcModGuts1 fn = do liftIO $ deleteBinFiles fn target<- guessTarget fn Nothing addTarget target load LoadAllTargets modGraph<- depanal [] True case find ((== fn) . msHsFilePath) modGraph of Just modSummary -> do mod_guts<- coreModule `fmap` (desugarModule =<< typecheckModule =<< parseModule modSummary) return mod_guts
2. To convert a raw string (e.g. "map" or "zipWith" to the corresponding Name inside GHC) I suspect this is the bit that touches the Ghci code -- because thats where I extracted it from -- Is this what is causing the problem?
stringToNameEnv :: HscEnv -> String -> IO Name stringToNameEnv env s = do L _ rn<- hscParseIdentifier env s (_, lookupres)<- tcRnLookupRdrName env rn case lookupres of Just (n:_) -> return n _ -> errorstar $ "Bare.lookupName cannot find name for: " ++ s
The code in (2) doesn't reach hscCompileCoreExpr. In (1), the only way to get to hscCompileCoreExpr is by compiling a module that contains some Template Haskell or quasiquotes. Could that be the case? (the reason is that TH and QQ both need to compile some code and run it on the fly, which requires the interpreter, which is the bit that doesn't work with profiling). Cheers, Simon
On Mar 14, 2012, at 3:59 AM, Simon Marlow wrote:
On 13/03/2012 21:25, Ranjit Jhala wrote:
Hi all,
I'm trying to use the nifty backtracing mechanism in GHC 74. AFAICT, this requires everything be built with profiling on), but as a consequence, I hit this:
"You can't call hscCompileCoreExpr in a profiled compiler"
Any hints on whether there are work-arounds?
Can you give more details about what you're trying to do? Are you using the GHC API in some way?
I'm afraid there's something of a deep limitation in that the interpreter that is used by GHCi and Template Haskell doesn't work with profiling:
http://hackage.haskell.org/trac/ghc/ticket/3360
We think it is quite a lot of work to fix this.
Cheers, Simon