Skip to main content

IOG GHC Update #13

· 3 min read

Biweekly update from the GHC DevX team at IOG.

Previous updates can be found here.

JavaScript backend

  • Luite: implemented JS support for running interactive processes via the process library by using NodeJS features. See Process#292. This change fixes a major issue with Cabal's custom Setup.hs scripts which are built with the JS backend (i.e. when not using haskell.nix) as these scripts need to run other processes such as ghc interactively.

  • Sylvain: fixed an issue with exception pretty-printing. GHC#23565 and GHC!10739.

  • Sylvain: fixed an issue with levity polymorphic data constructors. GHC#22360 and GHC!10681. It also fixed GHC#22291 as a side-effect.

  • Sylvain: disabled dumping the eventlog into stderr by default GHC!10677. We still neeed a better eventlog implementation but at least it fixed the T16707 test in the stm package that was failing fo a reason unrelated to stm.

  • Josh: worked on updating ghcjs-dom and ghcjs-base to support the JS backend. This requires changes to some dependencies that have GHCJS FFI import strings, as well as dependencies that are broken by GHC 9.8. See: splitmix!75

  • Jeff: Changed the CI runner on gitlab to split the JavaScript job into two jobs: a debug build and a performance build. This re-enables performance testing and tracking on GHC's testsuite for the JavaScript backend. GHC!10576

  • Jeff: Opened the JStg draft MR. This MR is the next step on the roadmap to add GHCJS's optimizer to the JS backend. It adds a new IR to the JavaScript backend pipeline that allows us to separate concerns in the code base. The current pipeline uses the same IR to write the RTS and garbage collector, as a target to compile STG to and as a optimization target. As a consequence the IR is not a particularly good optimization target nor a good eDSL for the RTS and GC. With this MR we'll have the beginnings of a good eDSL for the RTS and GC, which allows for a better IR for the code generator and optimizer.

Deprecation warnings

Incomplete Record Selectors

  • Bartek: The MR for the Incomplete Record Selectors warning is ready, waiting for another MR to fix the long-range PMC information in do-notations


  • Josh: added support for js/asm/cmm sources to executable components, and factorised the overlapping code for c/cpp/js/asm/cmm source handling for both library and executable components. See: Cabal!9061.


  • Luite: added support for large stack offsets in the ByteCode to fix GHC#22888. See GHC!9957.


  • Bartek: Almost finished investigating some of the cases for record fields not emitting custom warnings. See GHC#23279 for details

  • Jeff: FUNARCH GHC modularity paper was accepted! See you at ICFP.

  • Sylvain: implemented a -prelude-is GHC flag to make the Prelude module selectable, following the discussion on Discourse. See ticket GHC#23551 and merge request GHC!10704. Not sure if/when it's going to be merged. Do show your support on the issue if you want this.