Faire de petits exécutables haskell?

Existe-t-il de bons moyens pour créer de petits exécutables haskell? Avec ghc6, un simple programme hello world semble atteindre environ 370kB (523kB avant ssortingp). Bonjour tout le monde en C est d’environ 4 Ko (9 Ko avant le ssortingp).

GHC relie statiquement tout (sauf les bibliothèques utilisées par le runtime lui-même, qui sont liées dynamicment).

Dans les temps anciens, GHC a relié toute la bibliothèque (haskell) dès que vous en avez utilisé quelque chose. Il y a quelque temps, GHC a commencé à relier “fichier obj”, ce qui a considérablement réduit la taille binary. À en juger par la taille, vous avez déjà dû utiliser le nouveau GHC.

Sur le plan positif, vous avez déjà beaucoup de choses dans ce 500K, comme le kernel multithread, le garbage collector, etc.

Ajoutez au moins le garbage collector à votre code C, puis comparez-les à nouveau 🙂

La taille que vous voyez est le runtime Haskell (libHSrts.a), qui est lié statiquement à chaque exécutable Haskell. Si c’était un object partagé, comme librt.o pour C, votre binary ne serait que quelques k (la taille d’un fichier fractionné .o dans la source de la bibliothèque).

Sans mettre en œuvre la liaison dynamic de libHSrts.a sur votre plate-forme, vous pouvez réduire la taille de vos exécutables via une bande.