ক্যাবল এবং স্ট্যাকের মধ্যে পার্থক্য কী?


108

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


fpcomplete.com/blog/2015/06/announcing-first-public-beta-stack (সংক্ষেপে এটি cabal-installস্ট্যাকেজটি যতটা সম্ভব প্রতিস্থাপন করে এবং ব্যবহার করে - কিছুটা সময় ক্যাবল-ইনস্টলে কিছু ব্যাক-ইন্টিগ্রেশন থাকতে পারে এবং আমি মনে করি সম্প্রদায় নিশ্চিত নয় যে এটি ভাল জিনিস কিনা না, কারণ এটি সম্প্রদায়কে বিভক্ত করতে পারে)
কার্সটেন

এএফআইইউ স্ট্যাকটি একটি বিদ্যমান প্রকল্পে দ্রুত কাজ করার জন্য কার্যকর। আপনি যদি স্ক্র্যাচ থেকে কিছু শুরু করেন, আপনাকে অবশ্যই ক্যাবল ব্যবহার করতে হবে।
এমবি 14

@ এমবি 14 এটি কেস নয়। আপনি স্ক্র্যাচ থেকে প্রকল্পগুলি শুরু করতে স্ট্যাক ব্যবহার করতে পারেন। আসলে, স্ট্যাক টেম্পলেটগুলি এটি করার একটি সহজ উপায় সরবরাহ করে।
সিবি

উত্তর:


80

স্ট্যাক কি ক্যাবলের প্রতিস্থাপন?

হ্যা এবং না.

কোন ক্ষেত্রে আমার ক্যাবলের পরিবর্তে স্ট্যাক ব্যবহার করা উচিত? স্ট্যাক কি করতে পারে যে ক্যাবাল পারে না?

স্ট্যাক ডিফল্টরূপে কিউরেটেড স্ট্যাকেজ প্যাকেজগুলি ব্যবহার করে । এটি তাই, যে কোনও নির্ভরতা একসাথে তৈরি করতে পরিচিত, সংস্করণ সংঘাতের সমস্যাগুলি এড়িয়ে চলে (যা যখন তারা হাস্কেল অভিজ্ঞতায় সাধারণ ছিল, "ক্যাবল হেল" হিসাবে পরিচিত ছিল)। ক্যাবলের সাম্প্রতিক সংস্করণগুলিতে সংঘাত রোধের জন্য ব্যবস্থাও রয়েছে। তবুও, একটি পুনরুত্পাদনযোগ্য বিল্ড কনফিগারেশন সেট আপ করা যাতে আপনি ঠিক জানেন যে সংগ্রহাগুলি থেকে কী টানা হবে স্ট্যাকের সাথে আরও সহজ for নোট স্ট্যাকেজ প্যাকেজগুলি ব্যবহারের বিধান রয়েছে বলে মনে রাখবেন, স্ট্যাকেজ স্ন্যাপশটে কোনও প্যাকেজ উপস্থিত না থাকলেও আপনি যেতে ভাল।

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

  • এমনকি স্ট্যাক আপনার জন্য জিএইচসি ডাউনলোড করে এবং এটিকে একটি বিচ্ছিন্ন স্থানে রাখে।
  • ডকার সমর্থন (যা আপনার হাস্কেল অ্যাপ্লিকেশন মোতায়েনের জন্য খুব সুবিধাজনক)
  • পুনরুত্পাদনযোগ্য হাস্কেল স্ক্রিপ্ট : আপনি কোনও প্যাকেজের সংস্করণ নির্ধারণ করতে পারেন এবং গ্যারান্টি পেতে পারেন যে এটি কোনও সমস্যা ছাড়াই সর্বদা কার্যকর হবে। ( ক্যাবলের একটি স্ক্রিপ্ট বৈশিষ্ট্যও রয়েছে তবে এটির সাথে পুরোপুরি পুনরুত্পাদনযোগ্যতা নিশ্চিত করা একেবারেই সোজা নয়))
  • করার ক্ষমতা stack build --fast --file-watch। আপনি উপস্থিত স্থানীয় ফাইলগুলি পরিবর্তন করলে এটি স্বয়ংক্রিয়ভাবে পুনর্নির্মাণ হবে। --pedanticবিকল্পের সাথে এটি ব্যবহার করা আমার পক্ষে একটি চুক্তি-বিভক্তকারী।
  • স্ট্যাক টেমপ্লেট ব্যবহার করে প্রকল্পগুলি তৈরি সমর্থন করে । এটি আপনার নিজস্ব কাস্টম টেম্পলেটগুলিও সমর্থন করে।
  • স্ট্যাক এতে অন্তর্নির্মিত hpack সমর্থন করেছে। ইয়াল ফাইল যা শিল্পে বেশি ব্যবহৃত হয় তা ব্যবহার করে ক্যাবল ফাইল লেখার একটি বিকল্প (আইএমও, আরও ভাল) উপায় সরবরাহ করে।
  • স্ট্যাকের সাথে কাজ করার সময় ইন্টারো একটি মসৃণ অভিজ্ঞতা অর্জন করে ।

পার্থক্যটি ব্যাখ্যা করে একটি দুর্দান্ত ব্লগ পোস্ট রয়েছে: স্ট্যাক ক্যাবল নয় কেন? ক্যাবল যদিও সেই পোস্টের পরবর্তি মধ্যবর্তী বছরগুলিতে বিবর্তিত হয়েছে যাতে সেখানে আলোচিত কিছু বিষয়কে কাটিয়ে উঠতে পারে, স্ট্যাকের পিছনে নকশার লক্ষ্য এবং দর্শনের আলোচনা প্রাসঙ্গিক রয়েছে।


ক্যাবল 3 প্রকাশের পরে কি কোনও পরিবর্তন হয়েছে?
উইলিয়াম রুসনাক

4
@ উইলিয়ামআরসম্যাক হ্যাঁ, আছে। প্রাথমিকভাবে, ডিফল্ট ক্যাবল ওয়ার্কফ্লোতে এখন নির্ভরতা সংঘাত এড়ানো অন্তর্ভুক্ত করা হয়, যদিও এটি এটি করার জন্য কৌশলটি স্ট্যাকের থেকে লক্ষণীয়ভাবে পৃথক। (@ সিবি: আমি আপনার উত্তরটি আপডেট করার জন্য স্বাধীনতা নিয়েছি যাতে এই দিনগুলিতে কোথায় অবস্থান রয়েছে তা এটি আরও ভালভাবে প্রতিফলিত করে))
ডুপ্লোড

35

এরপরে, আমি ক্যাবল-ইনস্টল এবং স্ট্যাকের তুলনায় দুটি সরঞ্জামকে উল্লেখ করব । বিশেষত, ক্যাবল লাইব্রেরির সাথে বিভ্রান্তি এড়াতে আমি ক্যাবল-ইনস্টল ব্যবহার করব , যা উভয় সরঞ্জামই ব্যবহৃত সাধারণ অবকাঠামো।

বিস্তৃতভাবে বলতে, আমরা বলতে পারেন চক্রান্ত করা-ইনস্টল এবং স্ট্যাকের থেকে frontends হয় Cabal । উভয় সরঞ্জামই হাস্কেল প্রকল্পগুলি নির্মাণ করা সম্ভব করেছে যার নির্ভরতাগুলির সেটগুলি একটি একক সিস্টেমের সীমানার মধ্যে একে অপরের সাথে দ্বন্দ্ব করতে পারে। তারা এই লক্ষ্যটিকে কীভাবে সম্বোধন করে তার মধ্যে মূল পার্থক্য রয়েছে:

  • ডিফল্টরূপে, ক্যাবল-ইনস্টলটি যখন কোনও প্রকল্প তৈরি করতে বলা হয়, তার .cabalফাইলটিতে উল্লিখিত নির্ভরতাগুলি দেখুন এবং এটি সন্তুষ্ট করে এমন প্যাকেজ এবং প্যাকেজ সংস্করণগুলির একটি সেট বের করার জন্য নির্ভরতা সমাধানকারী ব্যবহার করুন। এই সেটটি পুরো হ্যাকেজ থেকে আঁকা - সমস্ত প্যাকেজ এবং সমস্ত সংস্করণ, অতীত ও বর্তমান। একবার সম্ভাব্য বিল্ড প্ল্যানটি পাওয়া গেলে, নির্ভরতার পছন্দসই সংস্করণ ইনস্টল করা হবে এবং ক্যাবল-ইনস্টল ডকুমেন্টেশনের কোথাও একটি ডাটাবেসে ইনডেক্স করা হবে যার অর্থ "নিক্স-স্টাইলের স্থানীয় বিল্ডস" রয়েছে~/.cabal । নির্ভরতাগুলির মধ্যে সংস্করণগুলির দ্বন্দ্বগুলি ইনস্টল করা প্যাকেজগুলিকে তাদের সংস্করণগুলি (পাশাপাশি অন্যান্য প্রাসঙ্গিক কনফিগারেশন বিকল্পগুলি) অনুসারে ইনডেক্সিং করে এড়ানো যায়, যাতে বিভিন্ন প্রকল্প একে অপরের পায়ের আঙ্গুলের পা না রেখে তাদের প্রয়োজনীয় নির্ভরতা সংস্করণগুলি পুনরুদ্ধার করতে পারে। এই ব্যবস্থা কি

  • যখন একটি প্রকল্প তৈরি করতে বলা হয় , হ্যাকেজের পরিবর্তে স্ট্যাকটি উইলের resolverক্ষেত্রটি দেখুন stack.yaml। ডিফল্ট ওয়ার্কফ্লোতে, সেই ক্ষেত্রটি একটি স্ট্যাকেজ স্ন্যাপশট নির্দিষ্ট করে , যা হ্যাকেজ প্যাকেজগুলির একটি নির্দিষ্ট সংস্করণ যা পারস্পরিক সামঞ্জস্যপূর্ণ হিসাবে পরিচিত with স্ট্যাক তারপর নির্ভরতা উল্লেখিত সন্তুষ্ট করার প্রচেষ্টা করা হবে .cabalফাইল (বা সম্ভবত ফাইল ব্যবহার করে শুধুমাত্র কি স্ন্যাপশট দ্বারা প্রদান করা হয় - বিভিন্ন ফরম্যাট, একই ভূমিকা)। প্রতিটি স্ন্যাপশট থেকে ইনস্টল করা প্যাকেজগুলি পৃথক ডাটাবেসে নিবন্ধিত হয়, যা একে অপরের সাথে হস্তক্ষেপ করে না।project.yaml

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

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


11

এফএকিউ থেকে আমি কী সংগ্রহ করতে পারি তা থেকে মনে হয় স্ট্যাক ক্যাবল লাইব্রেরি ব্যবহার করে তবে cabal.exeবাইনারি নয় (আরও সঠিকভাবে ক্যাবল-ইনস্টল হিসাবে পরিচিত)। দেখে মনে হচ্ছে প্রকল্পটির লক্ষ্য হ'ল স্বয়ংক্রিয়ভাবে স্যান্ডবক্সিং এবং নির্ভরতা নরকতা এড়ানো।

অন্য কথায়, এটি একই ক্যাবাল প্যাকেজ কাঠামো ব্যবহার করে, এটি এই স্টাফটি পরিচালনা করার জন্য একটি ভিন্ন ফ্রন্ট-এন্ড সরবরাহ করে। (আমি মনে করি!)


এছাড়াও cabal, তাদের উত্স কোডটিও ব্যবহার করছে বলে মনে হচ্ছে docker। যদিও তারা এখনও এটি ব্যবহার করে কিনা আমি জানি না।
সিবি

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