Skip to main content

IOG GHC Update #25

ยท 2 min read

Triweekly update from the GHC DevX team at IOG.

Previous updates can be found here.

High level summaryโ€‹

The team continued working on characterizing a performance regression in ouroboros-consensus when upgrading GHC from 8.10.7 to 9.6. As GHC isn't backward compatible, upgrading GHC not only means upgrading the compiler but also upgrading dependencies (including boot libraries), making investigations difficult because changes aren't isolated. We've enhanced GHC profiling tools (not upstreamed yet) to give the ability to applications (cardano-node here) to profile only a code section where we know a regression occurred. Investigation is still in progress.

Patches mentioned in our last update for inclusion in GHC 9.10 have been completed and merged:

We've started summarizing the results of our IOG-internal survey about Haskell tooling.

Detailsโ€‹

Luite: Has been investigating a cardano-node performance regression caused by upgrading from GHC 8.10 to GHC 9.6. Much of the work was related to improving ways we can measure performance of Haskell programs compiled with GHC. We hope we can merge some of the improvements into GHC in the future.

Luite: JSTG optimizer has been merged after some small improvements and fixes: GHC!11507.

Sylvain: reviewed a patch submitted by an external contributor to fix ghcjs-dom package for the JS backend: ghcjs-dom!104 It's nice seeing the GHCJS libraries starting to be upgraded to use the JS backend!

Josh/Sylvain: improved the performance of some JS numeric primitives: GHC!12152

Sylvain: started summarizing the results of our IOG-internal survey about Haskell tooling.

Sylvain: made bitcast between words and floats real primops with constant-folding for better performance and code optimization: GHC!11973

Josh: use STG tag inference to determine if a binder is evaluated in the JS backend: GHC!11857

Jeff: removed redundant GHC.Cmm.DataFlow.Collections module: GHC!12120

Jeff: did some merge request review; all merged now: