Có lẽ chúng ta nên so sánh táo với táo và cam với cam. JRE là một bộ thực thi, không phải là một bộ phát triển. Chúng tôi có thể so sánh: kích thước nguồn của bộ phát triển, kích thước của bộ phát triển được biên dịch và kích thước được biên dịch của thời gian chạy tối thiểu.
Gói nguồn OpenJDK 7 là 82 MB (download.java.net/openjdk/jdk7) so với gói nguồn GHC 7, là 23 MB (haskell.org/ghc/doad_ghc_7_0_1). GHC không lớn ở đây. Kích thước thời gian chạy: openjdk-6-jre-headless trên Ubuntu là 77 MB không nén so với Haskell hellowworld, được liên kết tĩnh với thời gian chạy của nó, <1 MB. GHC không lớn ở đây.
Trong đó GHC lớn, là kích thước của bộ công cụ phát triển được biên dịch:
Bản thân GHC mất 270 MB và với tất cả các thư viện và tiện ích đi kèm, phải mất hơn 500 MB. Và vâng, nó rất nhiều, ngay cả với các thư viện cơ sở và công cụ xây dựng / trình quản lý phụ thuộc. Nền tảng phát triển Java nhỏ hơn.
GHC:
$ aptitude show ghc6 | grep Size
Uncompressed Size: 388M
chống lại sự phụ thuộc của OpenJDK:
$ 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
Nhưng nó vẫn còn hơn 100 MB chứ không phải 26 MB như bạn viết.
Những thứ nặng trong ghc6 và ghc6-prof là:
$ 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
Xin lưu ý rằng lớn như thế nào libHSghc-6.12.1_p.a
. Vì vậy, câu trả lời dường như là các phiên bản liên kết và định hình tĩnh cho mọi thư viện ngoài kia.