এরপরে, আমি ক্যাবল-ইনস্টল এবং স্ট্যাকের তুলনায় দুটি সরঞ্জামকে উল্লেখ করব । বিশেষত, ক্যাবল লাইব্রেরির সাথে বিভ্রান্তি এড়াতে আমি ক্যাবল-ইনস্টল ব্যবহার করব , যা উভয় সরঞ্জামই ব্যবহৃত সাধারণ অবকাঠামো।
বিস্তৃতভাবে বলতে, আমরা বলতে পারেন চক্রান্ত করা-ইনস্টল এবং স্ট্যাকের থেকে frontends হয় Cabal । উভয় সরঞ্জামই হাস্কেল প্রকল্পগুলি নির্মাণ করা সম্ভব করেছে যার নির্ভরতাগুলির সেটগুলি একটি একক সিস্টেমের সীমানার মধ্যে একে অপরের সাথে দ্বন্দ্ব করতে পারে। তারা এই লক্ষ্যটিকে কীভাবে সম্বোধন করে তার মধ্যে মূল পার্থক্য রয়েছে:
ডিফল্টরূপে, ক্যাবল-ইনস্টলটি যখন কোনও প্রকল্প তৈরি করতে বলা হয়, তার .cabal
ফাইলটিতে উল্লিখিত নির্ভরতাগুলি দেখুন এবং এটি সন্তুষ্ট করে এমন প্যাকেজ এবং প্যাকেজ সংস্করণগুলির একটি সেট বের করার জন্য নির্ভরতা সমাধানকারী ব্যবহার করুন। এই সেটটি পুরো হ্যাকেজ থেকে আঁকা - সমস্ত প্যাকেজ এবং সমস্ত সংস্করণ, অতীত ও বর্তমান। একবার সম্ভাব্য বিল্ড প্ল্যানটি পাওয়া গেলে, নির্ভরতার পছন্দসই সংস্করণ ইনস্টল করা হবে এবং ক্যাবল-ইনস্টল ডকুমেন্টেশনের কোথাও একটি ডাটাবেসে ইনডেক্স করা হবে যার অর্থ "নিক্স-স্টাইলের স্থানীয় বিল্ডস" রয়েছে ।~/.cabal
। নির্ভরতাগুলির মধ্যে সংস্করণগুলির দ্বন্দ্বগুলি ইনস্টল করা প্যাকেজগুলিকে তাদের সংস্করণগুলি (পাশাপাশি অন্যান্য প্রাসঙ্গিক কনফিগারেশন বিকল্পগুলি) অনুসারে ইনডেক্সিং করে এড়ানো যায়, যাতে বিভিন্ন প্রকল্প একে অপরের পায়ের আঙ্গুলের পা না রেখে তাদের প্রয়োজনীয় নির্ভরতা সংস্করণগুলি পুনরুদ্ধার করতে পারে। এই ব্যবস্থা কি
যখন একটি প্রকল্প তৈরি করতে বলা হয় , হ্যাকেজের পরিবর্তে স্ট্যাকটি উইলের resolver
ক্ষেত্রটি দেখুন stack.yaml
। ডিফল্ট ওয়ার্কফ্লোতে, সেই ক্ষেত্রটি একটি স্ট্যাকেজ স্ন্যাপশট নির্দিষ্ট করে , যা হ্যাকেজ প্যাকেজগুলির একটি নির্দিষ্ট সংস্করণ যা পারস্পরিক সামঞ্জস্যপূর্ণ হিসাবে পরিচিত with স্ট্যাক তারপর নির্ভরতা উল্লেখিত সন্তুষ্ট করার প্রচেষ্টা করা হবে .cabal
ফাইল (বা সম্ভবত ফাইল ব্যবহার করে শুধুমাত্র কি স্ন্যাপশট দ্বারা প্রদান করা হয় - বিভিন্ন ফরম্যাট, একই ভূমিকা)। প্রতিটি স্ন্যাপশট থেকে ইনস্টল করা প্যাকেজগুলি পৃথক ডাটাবেসে নিবন্ধিত হয়, যা একে অপরের সাথে হস্তক্ষেপ করে না।project.yaml
আমরা বলতে পারি যে কোনও বিল্ড কনফিগারেশন নির্দিষ্ট করার ক্ষেত্রে স্ট্যাক পদ্ধতির সরলতার জন্য কিছু সেটআপ নমনীয়তার বাণিজ্য করে। বিশেষত, যদি আপনি জানেন যে আপনার প্রকল্পটি এলটিএস 15.3 স্ন্যাপশট ব্যবহার করে, আপনি এটির স্ট্যাকেজ পৃষ্ঠায় যেতে পারেন এবং এক নজরে জানতে পারেন যে কোনও নির্ভরতা স্ট্যাকের সংস্করণ স্ট্যাকেজ থেকে টানতে পারে। এতে বলা হয়েছে, উভয় সরঞ্জামই এমন বৈশিষ্ট্যগুলি সরবরাহ করে যা মূল কর্মপ্রবাহের বাইরে চলে যায় যাতে প্রতিটি এবং অন্য বৃহত্তম সমস্ত কিছু করতে পারে (সম্ভবত কম সুবিধাজনক পদ্ধতিতে হলেও)। উদাহরণস্বরূপ, একটি পরিচিত ভাল বিল্ড কনফিগারেশনের সঠিক সংস্করণ হিমায়িত করার এবং ক্যাবল-ইনস্টল সহ হ্যাকেজের পুরানো রাষ্ট্রের সাথে নির্ভরতাগুলি সমাধান করার উপায় রয়েছে, এবং স্ট্যাক ব্যবহার করার সময় অ স্ট্যাকেজ নির্ভরতা বা ওভাররাইড স্ন্যাপশট প্যাকেজ সংস্করণগুলি প্রয়োজন ।
সর্বশেষে, মধ্যে অন্য পার্থক্য চক্রান্ত করা-ইনস্টল এবং স্ট্যাকের বড় এই ওভারভিউতে কহতব্য হতে যথেষ্ট যে, যা স্ট্যাকের যেমন সম্পূর্ণ বিল্ড পরিবেশ, বৈশিষ্ট্য সঙ্গে প্রদানের এ লক্ষ্য স্বয়ংক্রিয় GHC ইনস্টলেশন ব্যবস্থাপনা এবং Docker ইন্টিগ্রেশন । বিপরীতে, ক্যাবল-ইনস্টল বলতে বাস্তুসংস্থার অন্যান্য অংশগুলিতে অর্থোথোনাল বোঝানো হয়েছে, এবং তাই এটি এই ধরণের বৈশিষ্ট্য সরবরাহ করার চেষ্টা করে না (বিশেষত, জিএইচসি সংস্করণগুলি আলাদাভাবে ইনস্টল করতে হবে এবং পরিচালনা করতে হবে, এটি লিনাক্স ডিস্ট্রোর মাধ্যমেই হোক প্যাকেজগুলি, উইন্ডোজে হাস্কেল প্ল্যাটফর্ম কোর , বা গ্যাকআপ সরঞ্জাম )।
cabal-install
স্ট্যাকেজটি যতটা সম্ভব প্রতিস্থাপন করে এবং ব্যবহার করে - কিছুটা সময় ক্যাবল-ইনস্টলে কিছু ব্যাক-ইন্টিগ্রেশন থাকতে পারে এবং আমি মনে করি সম্প্রদায় নিশ্চিত নয় যে এটি ভাল জিনিস কিনা না, কারণ এটি সম্প্রদায়কে বিভক্ত করতে পারে)