Skip to main content

IOG GHC Update #24

ยท 3 min read

Triweekly update from the GHC DevX team at IOG.

Previous updates can be found here.

High level summaryโ€‹

We're investigating a performance regression in ouroboros-consensus. We're still working on reproducing the issue with a profiling compiler. Inferring performance behavior from intermediate codes (Core, STG) proved to be difficult because the code is heavily polymorphic and allocates a lot. We'll try to specialize it more in the coming weeks.

GHC 9.10 is about to fork from GHC's main development branch. We worked on several patches that are planned to be integrated into 9.10:

Some maintenance was done:

  • upgraded a dependency of GHCup to be compatible with GHC 9.6
  • upgraded GHC's CI images
  • Simplified JS codegen to use newish STG tag-inference mechanism

Detailsโ€‹

Sylvain: released haskus-utils-variant 3.4, a dependency of ghcup, to be compatible with GHC 9.6 and above. See https://github.com/haskus/packages/issues/51

Sylvain: pure Haskell implementation of bytestring (bytestring#631). Updated several times after several reviews. Now merged.

Sylvain: support for C sources (e.g. sqlite) with the JS backend (GHC!11502). Added test using sqlite in GHC's testsuite. It has been reverted because it's too large and has too many dependencies. It will be replaced by several smaller tests. direct-sqlite JS support should be upstreamed and the package added to head.hackage.

Jeff: added test to GHC's testsuite tracking the size of a binary file (GHC!11551). This is useful to avoid regressions and to check progress with the code generator improvements (JS and native).

Jeff: upgraded Node.js in GHC's CI images (ci-images!137) The corresponding PR for ghc.nix is also up. This way ghc.nix and the GHC CI will use the same version of emscripten and nodejs.

Josh: successfully ported a Space Invaders game from using GHC's WebAssembly backend to using GHC's JavaScript backend. Wrote a blog post draft about it. It will be published in the upcoming weeks.

Luite: merge request for the JSTG optimizer has been opened: GHC!11507. CI is passing and it should be merged soon after reviews.

Jeff: updated GHC's CODEOWNERS file (GHC!12032)

Sylvain: wrote a CLC proposal about bitcast primops (CLC proposal#253)

Josh: reworked the performance report based on new benchmarks and graphs.

Josh: changed JS codegen to use GHC tags to track evaluation knowledge, allowing us to remove a custom inference mechanism and reduce maintenance burden GHC!11857

Jeff/Luite: Helped fix a bug in the JavaScript linker that showed up because of the migration from base to ghc-internal: https://gitlab.haskell.org/ghc/ghc/-/commit/20b702b582279ce2573ec4fb5908b31eaeeb8918