জিএইচসি এত বড় / বড় কেন?


147

একটি সহজ উত্তর আছে: জিএইচসি এত বড় কেন?

  • ওসিএএমএল: 2 এমবি
  • পাইথন: 15 এমবি
  • এসবিসিএল: 9 এমবি
  • ওপেনজেআরই - 26 এমবি
  • জিএইচসি: 113 এমবি

"হাস্কেল যদি সঠিক হাতিয়ার হয় তবে আমার কেন আকারের যত্ন নেওয়া উচিত নয়" এর সুসমাচার প্রচারে আগ্রহী নয়; এটি একটি প্রযুক্তিগত প্রশ্ন।


1
আপনি কোথা থেকে এই 500 এমবি পাচ্ছেন? আমার জিএইচসি এর চেয়ে বড় কোথাও নেই।
জ্যাকব

আপনি সমস্ত লাইব্রেরি গণনা না করা অবধি আমার ধারণা ...
জ্যাকব

দুঃখিত, আমি একটি প্যাকেজ ম্যানেজার ডাউনলোড বন্ধ করে যাচ্ছিলাম যার মধ্যে কিছু ডিপ রয়েছে। ওয়েব সাইট থেকে ডাউনলোডের আকার প্রতিবিম্বিত করতে আমি এটি আপডেট করেছি। আমি একটি সম্পাদনা সংক্ষিপ্ত যোগ করেছি তবে এটি এখানে উপস্থিত হয়নি (এখনও?)। আমি মনে করি প্রশ্ন এখনও দাঁড়িয়ে আছে। এটা বড়।
ক্রিস্টোফার সম্পন্ন

20
সম্ভবত আমাদের আপেল এবং কমলাতে কমলাতে তুলির তুলনা করা উচিত। জেআরই একটি রানটাইম, বিকাশকারী কিট নয়। OpenJDK 7 উৎস বান্ডিল 82 মেগাবাইট ( download.java.net/openjdk/jdk7 ) বনাম GHC 7 উৎস বান্ডিল, 23 মেগাবাইট ( haskell.org/ghc/download_ghc_7_0_1 )। এখন রানটাইম: উবুন্টুতে ওপেনজেডক---জে-হেডলেস, MB 77 এমবি অসম্প্রেসড বনাম হাস্কেল হেলোরল্ড, এটির রানটাইমের সাথে স্থিরভাবে যুক্ত, <1 এমবি।
সস্তানিন

আজ আমি 2014 সালের আকারগুলিতে আগ্রহী ছিলাম It মনে হয় তর্কটি এখনও ধরে। আমি ইউআরএলএসগুলি পেয়েছি : 1.GHC haskell.org/ghc/download_ghc_7_8_3 ; 2.OpenJCK packages.ubuntu.com/precise/openjdk-7-jdk
AnneTheAgile

উত্তর:


187

এটা সত্যিই কিছুটা নির্বোধ। জিএইচসি সহ প্রতিটি লাইব্রেরি 4 টিরও কম স্বাদে সরবরাহ করা হয় :

  • স্থির
  • প্রগতিশীল
  • প্রোফাইল
  • GHCi

জিএইচসিআই সংস্করণটি হ'ল স্থির সংস্করণ যা একটি একক .oফাইলে একসাথে যুক্ত । অন্য তিনটি সংস্করণগুলির নিজস্ব ইন্টারফেস ফাইলের ( .hiফাইল) সেট রয়েছে । প্রোফাইল করা সংস্করণগুলি অপ্রচলিত সংস্করণগুলির আকারের দ্বিগুণ বলে মনে হচ্ছে (যা কিছুটা সন্দেহজনক, কেন তা আমার উচিত।

মনে রাখবেন যে জিএইচসি নিজেই একটি গ্রন্থাগার , সুতরাং আপনি জিএইচসি এর 4 কপি পেয়ে যাচ্ছেন। কেবল এটিই নয়, তবে জিএইচসি বাইনারি নিজেই স্থিতিশীলভাবে সংযুক্ত, সুতরাং এটি জিএইচসির 5 অনুলিপি।

আমরা সম্প্রতি এটি তৈরি করেছি যাতে GHCi স্থির .aফাইলগুলি ব্যবহার করতে পারে । এটি আমাদের এই স্বাদগুলির মধ্যে একটি থেকে মুক্তি পেতে সহায়তা করবে। দীর্ঘ মেয়াদী, আমাদের গতিশীলভাবে জিএইচসির সাথে লিঙ্ক করা উচিত, তবে এটি একটি বৃহত্তর পরিবর্তন কারণ এটি গতিশীলভাবে ডিফল্ট সংযোগ স্থাপন করতে বাধ্য হবে - সি এর বিপরীতে, আপনি গতিশীলভাবে লিঙ্ক করতে যাচ্ছেন কিনা তা আপনাকে সামনে সিদ্ধান্ত নিতে হবে। এটি সত্যই কার্যকর হওয়ার আগে আমাদের আরও পরিবর্তন (যেমন ক্যাবল এবং অন্যান্য জিনিসগুলির মধ্যে প্যাকেজ সিস্টেমের কাছে) দরকার।


16
এবং এখানে আমি ভাবলাম এটি হ্যাস্কেল যে সমস্ত যুক্তি দেয় তা ছিল: অলস মূল্যায়ন, টাইপ অনুমান, ইত্যাদি
ম্যাকান্দ্রে

4
সুতরাং, 113 এমবি / 4 ~ = 28 এমবি, ওপেনজেআরআই থেকে এখনও বড় ... তবে বিবেচনা করুন জিএইচসি ওপেনজেডিকে তুলনীয়, কেবল জেআরই নয়, এটি আমাকে আরও ভাল বোধ করে।
আর্থ ইঞ্জিন

1
এখন যেহেতু আমি মনে করি জিএইচসি ডায়নামিক লিঙ্কিং ব্যবহার করেছে, সম্ভবত চারটি স্বাদের সংকোচনের জন্য ডঃ @ সিমন মার্লো'র ধারণাগুলি আরও ব্যবহারিক? উদ্ধৃতি: 1. # 3658 (এটি সমর্থন করে এমন প্ল্যাটফর্মগুলিতে ডায়ামনিকালি জিএইচসিআই (এবং সিস্টেম লিঙ্কার ব্যবহার করুন) - জিএইচসি ghc.haskell.org/trac/ghc/ticket/3658 ; 2. # 8266 (ম্যাকের উপর ডায়নামিক লিঙ্কিং) - GHC ghc.haskell.org/trac/ghc/ticket/8266 ; ৩. # ৮767676 (স্ট্যাটিক এক্সিকিউটেবল + জিএইচসি এপিআই (+ ডায়নামিক লিঙ্কিং? সেগফল্ট দেয়)) - জিএইচসি
অ্যানিএজিল

56

সম্ভবত আমাদের আপেল এবং কমলাতে কমলাতে তুলির তুলনা করা উচিত। জেআরই একটি রানটাইম, বিকাশকারী কিট নয়। আমরা তুলনা করতে পারি: বিকাশের কিটের উত্স আকার, সংকলিত বিকাশের কিটের আকার এবং ন্যূনতম রানটাইমের সংকলিত আকার।

ওপেনজেডকে 7 উত্স বান্ডিলটি 82 এমবি (ডাউনলোড.java.net/openjdk/jdk7) বনাম জিএইচসি 7 উত্স বান্ডিল, যা 23 এমবি (haskell.org/ghc/download_ghc_7_0_1)। জিএইচসি এখানে বড় নয়। রানটাইমের আকার: উবুন্টুতে ওপেনজেডক---জে-হেডলেস হ'ল হেসেল হেলোরল্ল্ড বনাম MB 77 এমবি সঙ্কুচিত, এটি তার রানটাইমের সাথে স্থিরভাবে যুক্ত, যা <1 এমবি is জিএইচসি এখানে বড় নয়।

যেখানে জিএইচসি বড়, এটি সংকলিত বিকাশের কিটের আকার:

জিএইচসি ডিস্ক ব্যবহার

জিএইচসি নিজেই 270 এমবি নেয়, এবং সমস্ত লাইব্রেরি এবং ইউটিলিটিগুলি যেগুলি একত্রিত হয় এটির সাথে 500 এমবি লাগে। এবং হ্যাঁ, এটি অনেকগুলি এমনকি বেস লাইব্রেরি এবং একটি বিল্ড সরঞ্জাম / নির্ভরতা পরিচালক সহ। জাভা বিকাশের প্ল্যাটফর্মটি ছোট।

GHC:

$ aptitude show ghc6 | grep Size
Uncompressed Size: 388M

ওপেনজেডিকে নির্ভরতা:

$ 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

তবে এটি আপনার লেখার মতো 26 মেগাবাইটের চেয়েও 100 এমবি এর বেশি।

Ghc6 এবং ghc6-prof এর হেভিওয়েট জিনিসগুলি হ'ল:

$ 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

কত বড় তা দয়া করে নোট করুন libHSghc-6.12.1_p.a। সুতরাং উত্তরটি স্থির লিঙ্কিং এবং সমস্ত লাইব্রেরির জন্য প্রোফাইলিং সংস্করণ বলে মনে হচ্ছে।


9

আমার অনুমান - প্রচুর এবং স্থির লিঙ্ক। প্রতিটি লাইব্রেরির স্থিতিশীলভাবে এর নির্ভরতাগুলি লিঙ্ক করা প্রয়োজন, যার পরিবর্তে স্থিতিশীলভাবে তাদের এবং নরমকরণের লিঙ্ক করা প্রয়োজন। এবং এটি সমস্ত প্রায়শই কোনও প্রোফাইলিং সহ এবং ছাড়া উভয়ই সংকলিত হয় এবং এমনকি বাইনারিগুলি ছিনিয়ে নেওয়া হয় না এবং তাই প্রচুর ডিবাগার তথ্য ধারণ করে।


2
জিএইচসি কোনও সম্পূর্ণ প্রোগ্রামে স্যুইচ করলে, জেএইচসি-র মতো প্রায় সমস্ত মডেলই পুনরায় কম্পাইল করে ফেললে আমি সম্ভবত আপত্তি করব না। এটি আরও দ্রুত সংকলন করতে পারে যদি এটি অদলবদল থেকে 'এলডি' রাখে।
জন এল

8

কারণ এটি জিসিসি এবং সমস্ত স্ট্যাটিকালি সংযুক্ত লাইব্রেরির গুচ্ছ বান্ডিল করে ।

কমপক্ষে উইন্ডোজ এ।


12
না, লিনাক্সে নয় এটি কেবল জিসিসির উপর নির্ভর করে। উইন্ডোগুলির "ডিস্ট্রিবিউশন" তে কোনও জিসিসি না থাকায় এটি জিএসিসি সহ আসতে হবে।
কমোনাড

5

এখানে আমার বাক্সে ডিরেক্টরি আকার বিচ্ছেদ:

https://spreadsheets.google.com/ccc?key=0AveoXImmNnZ6dDlQeHY2MmxPcEYzYkpweEtDSS1fUlE&hl=en

দেখে মনে হচ্ছে বৃহত্তম সংস্থার (123 এমবি) সংকলন নিজেই সংকলনের জন্য বাইনারি রয়েছে। দস্তাবেজগুলির ওজন একটি অবাক করা 65 এমবি MB তৃতীয় স্থানটি ক্যাবাল ৪১ এমবিতে।

বিন ডিরেক্টরিটি ৩৩ মেগাবাইট, এবং আমি মনে করি যে হ্যাস্কেল অ্যাপ্লিকেশনগুলি তৈরির জন্য প্রযুক্তিগতভাবে প্রয়োজনীয় কেবলমাত্র তার একটি উপসেট।


6
আমাকে এটিতে কিছু যুক্ত করতে দাও: আপনি যদি কেবল খালি হাড় সংকলকটি নেন এবং একেবারে প্রয়োজন না এমন কোনও কিছু স্ট্রিপ করেন (যেমন সংকলকটি নিরবিচ্ছিন্ন, স্ট্রিপ ইত্যাদি তৈরি করা হয়) তবে আপনি প্রায় 5 এমবিতে যেতে পারেন। তবে জিসিসির সাথে সংকলকগুলির আকার তুলনা করার চেষ্টা করুন। (মন্তব্যটি সম্পাদনা করেছেন, তাই আমাকে এটি মুছতে হয়েছিল ... দুঃখিত)
ফুজ

5

সংক্ষিপ্ত উত্তরটি হ'ল এটি কারণ যে সমস্ত এক্সিকিউটেবল স্থিতিশীলভাবে সংযুক্ত থাকে, তাদের মধ্যে ডিবাগের তথ্য থাকতে পারে এবং গ্রন্থাগারগুলি একাধিক অনুলিপিগুলিতে অন্তর্ভুক্ত থাকে। এটি অন্যান্য মন্তব্যকারীরা ইতিমধ্যে বলেছিলেন।

গতিশীল সংযোগ সম্ভব এবং নাটকীয়ভাবে আকার হ্রাস করবে। এখানে একটি উদাহরণ Hello.hs:

main = putStrLn "Hello world"

আমি উইন্ডোজে জিএইচসি 7.4.2 দিয়ে তৈরি করি।

ghc --make -O2Hello.exe1105Ks দেয়

stripএটি চালানো 630K ছেড়ে যায়

ghc --make -O2 -dynamic 40K দেয়

এটিকে ছিটানো মাত্র 13 কে।

এর নির্ভরতাগুলি 5 টি ঘন্টা যা মোট 9.2 এমবি স্ট্রিপ স্ট্রিপ এবং 5.7 মেগাবাইট কেটে ফেলা হয়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.