Prawdopodobnie powinniśmy porównać jabłka do jabłek, a pomarańcze do pomarańczy. JRE to środowisko wykonawcze, a nie zestaw deweloperski. Możemy porównać: rozmiar źródła zestawu deweloperskiego, rozmiar skompilowanego zestawu deweloperskiego i skompilowany rozmiar minimalnego środowiska uruchomieniowego.
Pakiet źródłowy OpenJDK 7 ma 82 MB (download.java.net/openjdk/jdk7) w porównaniu z pakietem źródłowym GHC 7, czyli 23 MB (haskell.org/ghc/download_ghc_7_0_1). GHC nie jest tu duży. Rozmiar środowiska wykonawczego: openjdk-6-jre-headless na Ubuntu to 77 MB nieskompresowanego w porównaniu z Haskell helloworld, statycznie połączonym z jego uruchomieniem, które wynosi <1 MB. GHC nie jest tu duży.
Gdzie GHC jest duży, jest to rozmiar skompilowanego zestawu deweloperskiego:
Sam GHC zajmuje 270 MB, a wraz ze wszystkimi bibliotekami i narzędziami, które są razem, zajmuje ponad 500 MB. I tak, to dużo, nawet z podstawowymi bibliotekami i narzędziem do budowania / menedżerem zależności. Platforma programistyczna Java jest mniejsza.
GHC:
$ aptitude show ghc6 | grep Size
Uncompressed Size: 388M
przeciwko OpenJDK z zależnościami:
$ aptitude show openjdk-6-jdk openjdk-6-jre openjdk-6-jre-headless ant maven2 ivy | grep Size
Uncompressed Size: 34.9M
Uncompressed Size: 905k
Uncompressed Size: 77.3M
Uncompressed Size: 1,585k
Uncompressed Size: 3,736k
Uncompressed Size: 991k
Ale nadal jest więcej niż 100 MB, a nie 26 MB, gdy piszesz.
Ciężkie rzeczy w ghc6 i ghc6-prof to:
$ dpkg -L ghc6 | grep '\.a$' | xargs ls -1ks | sort -k 1 -n -r | head -3
57048 /usr/lib/ghc-6.12.1/ghc-6.12.1/libHSghc-6.12.1.a
22668 /usr/lib/ghc-6.12.1/Cabal-1.8.0.2/libHSCabal-1.8.0.2.a
21468 /usr/lib/ghc-6.12.1/base-4.2.0.0/libHSbase-4.2.0.0.a
$ dpkg -L ghc6-prof | grep '\.a$' | xargs ls -1ks | sort -k 1 -n -r | head -3
112596 /usr/lib/ghc-6.12.1/ghc-6.12.1/libHSghc-6.12.1_p.a
33536 /usr/lib/ghc-6.12.1/Cabal-1.8.0.2/libHSCabal-1.8.0.2_p.a
31724 /usr/lib/ghc-6.12.1/base-4.2.0.0/libHSbase-4.2.0.0_p.a
Zwróć uwagę, jak duży jest libHSghc-6.12.1_p.a
. Więc odpowiedzią wydają się być statyczne wersje linkowania i profilowania dla każdej biblioteki.