
#14391: Make the simplifier independent of the typechecker -------------------------------------+------------------------------------- Reporter: nomeata | Owner: (none) Type: task | Status: new Priority: normal | Milestone: Component: Compiler | Version: 8.3 Resolution: | Keywords: newcomer Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Phab:D4503 Wiki Page: | -------------------------------------+------------------------------------- Comment (by monoidal): I created a graph with all module dependencies in `compiler/`. If we don't count SOURCE imports, this graph is acyclic. If we do, there are cyclic dependencies, and we can analyze strongly connected components. Currently, there are 440 modules, but 357 of them are in the same component. In other words, we have 357 modules that import directly or indirectly each other. The full structure is 1*76 + 7 + 357. This means there's a bunch of one-element components, one 7-element component (FastString, Pretty, Panic, Outputable etc.) and everything else is in a big chunk. In total, there are 78 components. What if we could magically remove only one edge from this graph and try to obtain the largest amount of components? Here are the winners, the larger the better: {{{ # of components / import from / import to / new structure 282 typecheck/TcRnMonad.hs -> typecheck/TcSplice.hs 1*273 + 2*2 + 4 + 6 + 7*2 + 11 + 15 + 113 259 typecheck/TcSplice.hs -> main/HscMain.hs 1*252 + 2*4 + 4 + 7 + 169 242 simplCore/CoreMonad.hs -> typecheck/TcEnv.hs 1*236 + 2*2 + 4 + 7 + 88 + 101 235 main/DynFlags.hs -> main/Plugins.hs 1*229 + 2*2 + 4 + 7 + 96 + 100 234 main/Plugins.hs -> simplCore/CoreMonad.hs 1*228 + 2*2 + 4 + 7 + 98 + 99 137 main/HscMain.hs -> main/CodeOutput.hs 1*134 + 4 + 7 + 295 128 main/CodeOutput.hs -> nativeGen/AsmCodeGen.hs 1*125 + 4 + 7 + 304 97 main/HscMain.hs -> simplCore/SimplCore.hs 1*95 + 7 + 338 78 [current situation] 1*76 + 7 + 357 }}} This ticket shows up at the third place (CoreMonad -> TcEnv). If we could remove CoreMonad -> TcEnv import, the structure would improve to 1*236 + 2*2 + 4 + 7 + 88 + 101. Instead of a 357-sized cyclic chunk, we would have half of the modules not participating in any cycle, and the big chunk reduced to two smaller ones. Of course, my script didn't consider whether any item on this list is realistic. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/14391#comment:34 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler