क्या छोटे हैकेल निष्पादन योग्य बनाने के कोई अच्छे तरीके हैं? Ghc6 के साथ एक साधारण हैलो वर्ल्ड प्रोग्राम लगभग 370kb (स्ट्रिप से पहले 523 केबी) में आता है। सी में हैलो वर्ल्ड लगभग 4 केबी (स्ट्रिप से 9 किलो पहले) है।छोटे हैकेल निष्पादन योग्य बनाना?
उत्तर
(किसी वास्तव में पता है जो संस्करण इस में जोड़ा गया?):
$ ghc -o hello hello.hs
$ strip -p --strip-unneeded --remove-section=.comment -o hello-small hello
$ du hello hello-small
700 hello
476 hello-small
एक गतिशील रूप से जुड़े हुए आरटीएस के लिए -dynamic झंडा जोड़े : http://hackage.haskell.org/trac/ghc/wiki/SharedLibraries/PlatformSupport
सी के साथ तुलना के लिए:
$ gcc hello.c -o hello
$ strip -p --strip-unneeded --remove-section=.comment -o hello-small hello
$ du hello hello-small
12 hello
8 hello-small
आप अपने आशीर्वाद (370Kb Luuuxury?) गिनती करना चाहिए: एक और अधिक वहाँ चल रहा
bash$ sbcl This is SBCL 1.0.24, an implementation of ANSI Common Lisp. * (sb-ext:save-lisp-and-die "my.core") [undoing binding stack and other enclosing state... done] [saving current Lisp image into ./my.core: ... done] bash$ du -sh my.core 25M my.core bash$
गंभीरता से हालांकि, जबकि आप शायद Haskell बाहर हिला कर सकते हैं एक बिट binaries, यह वास्तव में नहीं सी के साथ एक निष्पक्ष तुलना है नहीं है ।
पिछली बार जब मैंने ghc के साथ खेला (और यह पुराना हो सकता है) यह स्थिर रूप से सबकुछ जोड़ रहा था, जो एक कारक होगा।
जीएचसी स्थिर रूप से सबकुछ जोड़ रहा है (रनटाइम द्वारा उपयोग की जाने वाली लाइब्रेरी को छोड़कर, जो गतिशील रूप से जुड़े हुए हैं)।
बुढ़ापे में, जीएचसी ने पूरी तरह से (हैकेल) लाइब्रेरी को लिंक किया है जैसे ही आपने इसका कुछ उपयोग किया है। कुछ समय पहले, जीएचसी ने "प्रति ओबीजे फ़ाइल" लिंक करना शुरू किया, जिसने बाइनरी आकार को काफी हद तक कम कर दिया। आकार से निर्णय लेना, आप पहले से ही नए जीएचसी का उपयोग कर रहे हैं।
प्लस तरफ, आप पहले से ही सामान का एक बहुत उन 500K में, बहु-कोर, कचरा कलेक्टर आदि की तरह है
अपने सी कोड के लिए कम से कम कचरा कलेक्टर जोड़ कर उन्हें फिर से तुलना :)
हालांकि यह सच है कि हास्केल बाइनरी में सी बाइनरी नहीं है, यह बहुत कुछ है, अगर यह है उपयोग नहीं किया जाता है ... –
@ liw.fi यदि आप अपने एक्जिक्यूटिव के आकार के बारे में/उस/चिंतित हैं, सी केवल एकमात्र भाषा है जो आपके लिए पर्याप्त है। – Rayne
@ liw.fi हास्केल कचरा संग्रह, बहु-कोर निष्पादन इत्यादि के बारे में परिभाषा के लगभग है। इसलिए, वास्तव में, यह कोर में सभी चीजें रखने के लिए व्यर्थ _not_ है। या इसे छोड़ दें (मॉड्यूलरलाइज्ड कोर में अतिरिक्त प्रयास डालना जो ऐसा कर सकता है)। और किस लिए? 100K बाइनरी आकार को बचाने के लिए? – ADEpt
strip -p --strip-unneeded --remove-section=.comment -o your_executable_small your_executable
भी डॉ your_executable
आकार आप देख रहे हैं हास्केल क्रम (libHSrts.a) है, जो स्थिर हर हास्केल निष्पादन में जुड़ा हुआ है ldd में देखने का प्रयास। यदि यह एक साझा ऑब्जेक्ट था, जैसे c के लिए librt.o, तो आपकी बाइनरी केवल कुछ के (लाइब्रेरी स्रोत में विभाजित .o फ़ाइल का आकार) होगी।
अपने प्लेटफ़ॉर्म पर libHSrts.a की गतिशील लिंकिंग को लागू करने के लिए, आप अपने निष्पादन योग्य स्ट्रिप के माध्यम से छोटे बना सकते हैं।
चीजें बदल रही हैं - this काम पर चल रहे टुकड़े पर नजर रखें।
अपने द्विआधारी के आकार वास्तव में मायने रखती हैं, तो आप उपकरण gzexe है कि एक (अधिमानतः पहले से ही छीन) gzip संपीड़न के साथ निष्पादन योग्य पैक का उपयोग कर सकते हैं। मेरे 64-बिट लिनक्स बॉक्स पर, मूल हैलो वर्ल्ड प्रोग्राम 3 9 3 केबी को अलग करने के बाद 552 KB लेता है, और 125 KB को अलग करने और gzipping के बाद। Gzipping का गहरा पक्ष प्रदर्शन में है - निष्पादन योग्य पहले अनपॅक किया जाना है। भी
$ ghc -dynamic -o hello hello.hs
$ strip -p --strip-unneeded --remove-section=.comment -o hello-small hello
$ du hello hello-small
24 hello
16 hello-small
देखें:
इस बारे में नहीं पता था! यह वास्तव में उपयोगी युक्ति है, मेरे पास 15 एमबी निष्पादन योग्य था जो ** स्ट्रिप ** के बाद 7.3 एमबी तक था, लेकिन फिर ** gzexe ** के बाद 1.5 एमबी तक! मुझे एक और टूल मिला ** [अपक्स] (http://upx.sourceforge.net/) ** जो ** gzexe ** के स्थान पर उपयोग किया जाता है ** निष्पादन योग्य 1.2 एमबी तक पहुंच गया। –
- 1. छोटे पायथन निष्पादन योग्य?
- 2. स्टैंडअलोन लुआ निष्पादन योग्य बनाना
- 3. एक बड़ा निष्पादन योग्य या कई छोटे डीएलएल?
- 4. निष्पादन योग्य के छोटे आकार को कैसे प्राप्त करें?
- 5. निष्पादन योग्य
- 6. निष्पादन योग्य
- 7. निष्पादन योग्य
- 8. निष्पादन योग्य
- 9. निष्पादन योग्य
- 10. निष्पादन योग्य
- 11. निष्पादन योग्य
- 12. निष्पादन योग्य
- 13. निष्पादन योग्य
- 14. निष्पादन योग्य
- 15. निष्पादन योग्य
- 16. निष्पादन योग्य
- 17. निष्पादन योग्य
- 18. गैर निष्पादन निष्पादन योग्य फ़ाइल
- 19. सी # निष्पादन योग्य निष्पादन निर्देशिका
- 20. मेरे रूबी ऐप से विंडोज़ निष्पादन योग्य बनाना?
- 21. सभी PHP फ़ाइलों को निष्पादन योग्य बनाना (पुनरावर्ती)
- 22. क्लोजर प्रोजेक्ट से निष्पादन योग्य जार फ़ाइल बनाना?
- 23. एक ईएलएफ निष्पादन योग्य
- 24. .net निष्पादन योग्य
- 25. एंटीवायरस मेरे निष्पादन योग्य
- 26. आकार और निष्पादन योग्य
- 27. अनचाहे निष्पादन योग्य
- 28. नियमित सी ++ निष्पादन योग्य
- 29. बूस्ट टूल निष्पादन योग्य
- 30. निष्पादन योग्य अमान्य एंटाइटेलमेंट
यहां वर्णित गतिशील लिंकिंग का उपयोग करें, http: // stackoverflow।कॉम/प्रश्न/611545 9/छोटे-हैकेल-प्रोग्राम-संकलित-साथ-ghc-in-huge-binary –