কোন প্রোগ্রাম পরিচালনার জন্য সেরা হাস্কেল গ্রন্থাগারগুলি কী কী? [বন্ধ]


115

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

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

স্কালাল বিশ্বে কমপক্ষে প্রথম তিনটি প্রয়োজনীয়তার সাথে ডিল করার জন্য ভাল লাইব্রেরি রয়েছে। উদাহরণ:

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

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

যদি হ্যাস্কেল কোডকে "উত্পাদন-প্রস্তুত" তৈরি করার আশেপাশে অন্য কোনও গ্রন্থাগার, সরঞ্জাম বা অনুশীলন থাকে তবে আমি সেগুলি সম্পর্কেও জানতে আগ্রহী।


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

1
অন্যান্য সরঞ্জাম এবং কৌশল সম্পর্কে, এই এই প্রশ্নটির একটি ওভারভিউ রয়েছে: stackoverflow.com/questions/3077866/…
ডন স্টুয়ার্ট

1
অন্য একটি জিনিস - আপনি * নিক্স সিস্টেমে প্রচুর পরিমাণে প্রক্রিয়া পরিসংখ্যান এবং মেটাডেটা সরাসরি / proc ফাইল সিস্টেমের মাধ্যমে অ্যাক্সেস করতে পারেন। সুতরাং আপনি যদি আত্মবিশ্বাসের জন্য কয়েকটি রুটিন লিখেন তবে এটি রানটাইমে সরাসরি হুকের অভাবের বিকল্প হিসাবে সহায়তা করে।
sclv

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

1
@ ট্রিচ্রিস্ট তিনি প্রথম অনুচ্ছেদ এবং বুলেটযুক্ত তালিকার বাকী অংশটি অবিলম্বে সরল ইংরেজিতে এর অর্থ ব্যাখ্যা করে অপারেশনাল শব্দটি অনুসরণ করে ব্যয় করেন ।
ম্যাকক্টেন

উত্তর:


54

এটা একটা ভাল প্রশ্ন! এখানে প্রথম কাটা।

একাধিক স্তরে লগ করতে সক্ষম হবেন (উদা: ডিবাগ, সতর্কতা ইত্যাদি)।

এইচএসলগার সহজেই সর্বাধিক জনপ্রিয় লগিং কাঠামো।

প্রোগ্রামটি কীভাবে কাজ করছে এবং সেই কাজটি কতক্ষণ নিচ্ছে সে সম্পর্কে মেট্রিক / পরিসংখ্যান সংগ্রহ এবং ভাগ করতে সক্ষম হন। আদর্শভাবে, সংগৃহীত মেট্রিকগুলি এমন একটি ফর্ম্যাটে পাওয়া যায় যা গ্যাংলিয়ার মতো সাধারণভাবে ব্যবহৃত তদারকি সরঞ্জামগুলির সাথে সামঞ্জস্যপূর্ণ হয়, বা এতটা পাগলা হতে পারে।

আমি কোনও স্ট্যান্ডার্ডাইজড রিপোর্টিং সরঞ্জাম সম্পর্কে সচেতন নই, তবে, +RTS -sস্ট্রিমগুলি থেকে রিপোর্টগুলি আহরণ করা (বা প্রোফাইলিং আউটপুট পতাকাগুলির মাধ্যমে) অতীতে করা কিছু ছিল।

$ ./A +RTS -s
64,952 bytes allocated in the heap
1 MB total memory in use
 %GC time       0.0%  (6.1% elapsed)
 Productivity 100.0% of total user, 0.0% of total elapsed

আপনি এটি মেশিন-পঠনযোগ্য ফর্ম্যাটেও পেতে পারেন:

$ ./A +RTS -t --machine-readable

 [("bytes allocated", "64952")
 ,("num_GCs", "1")
 ,("average_bytes_used", "43784")
 ,("max_bytes_used", "43784")
 ,("num_byte_usage_samples", "1")
 ,("peak_megabytes_allocated", "1")
 ,("init_cpu_seconds", "0.00")
 ,("init_wall_seconds", "0.00")
 ,("mutator_cpu_seconds", "0.00")
 ,("mutator_wall_seconds", "0.00")
 ,("GC_cpu_seconds", "0.00")
 ,("GC_wall_seconds", "0.00")
 ]

আদর্শভাবে আপনি একটি সকেটের উপর দিয়ে চলমান জিএইচসি রানটাইমের সাথে সংযুক্ত করতে পারেন এবং এই জিসি পরিসংখ্যানটিকে ইন্টারেক্টিভভাবে দেখতে পারেন তবে বর্তমানে এটি খুব সহজ নয় ("আরটিএস / স্ট্যাটাস এইচ" ইন্টারফেসের সাথে এফএফআই বাইন্ডিং দরকার)। আপনি ThreadScopeজিসি এবং থ্রেডিং আচরণ ব্যবহার করে এবং পর্যবেক্ষণ করে কোনও প্রক্রিয়াতে সংযুক্ত করতে পারেন ।

অনুরূপ পতাকাগুলি ইনক্রিমেন্টাল, লগড সময় এবং স্পেস প্রোফাইলিংয়ের জন্য উপলব্ধ, যা পর্যবেক্ষণের জন্য ব্যবহার করা যেতে পারে (যেমন এই গ্রাফগুলি ক্রমবর্ধমানভাবে নির্মিত যেতে পারে)।

hpcপ্রোগ্রামের নির্বাহ সম্পর্কে তার Tixপ্রকারের মাধ্যমে প্রচুর পরিসংখ্যান সংগ্রহ করে এবং লোকেরা টাইম-স্লাইসে লগ করার জন্য কোনও কোড লিখিত সরঞ্জাম রয়েছে যা কোড চালাচ্ছে।

কনফিগারযোগ্য, আদর্শ এমন একটি সিস্টেমের মাধ্যমে যা চলমান প্রোগ্রামগুলিতে কনফিগার করা বৈশিষ্ট্যগুলিকে প্রোগ্রামগুলি পুনরায় আরম্ভ না করে আপডেট করার মঞ্জুরি দেয়।

এর জন্য বেশ কয়েকটি সরঞ্জাম উপলব্ধ, আপনি xmonad- স্টাইলের রাষ্ট্র পুনরায় লোড করতে পারেন; অথবা plugins* প্যাকেজগুলির মাধ্যমে কোড হটসওয়ারে উঠুন বা hint। এর মধ্যে কিছু অন্যের চেয়ে বেশি পরীক্ষামূলক।

পুনরুত্পাদনযোগ্য মোতায়েন

গ্যালোইস সম্প্রতি মুক্তি পেয়েছে cabal-dev, যা পুনরুত্পাদনযোগ্য বিল্ডগুলি করার জন্য একটি সরঞ্জাম (যেমন নির্ভরতাগুলি স্কোপড এবং নিয়ন্ত্রিত হয়)।


6
ডায়ার প্যাকেজটি xmonad- স্টাইলের রাষ্ট্র পুনরায় লোডিং বিমূর্ত করার কথা রয়েছে, তাই বিশেষত উল্লেখ করা উচিত, আমি মনে করি। তবে এটি পুনঃসংশোধন এবং পুনরায় নিয়োগের সাথে একত্রে জড়িত তাই পুরো সরঞ্জামের চেইনের সাথে কোনও মেশিনে পরিবর্তন সম্পর্কে সত্যই বলা যায়। রিমোট রেডপ্লাইয়ের জন্য আপনি আরও কিছু এসিড-স্টেটের মতো চান, যদিও এটি আমার স্বাদের জন্য কিছুটা ভারী ওজন। আমি এই অবিচ্ছিন্ন mvar বিমূর্ততা পেয়েছি যার দুর্বল গ্যারান্টি রয়েছে তবে আপনি কেবল একটি সরল এমওয়ারের মতোই আচরণ করতে পারেন যা বাইনারিটির প্রতিটি লঞ্চটিতে অনুষ্ঠিত বাইনারিটির সর্বশেষ ডেটা সহ জাদুগতভাবে জনবহুল হয়।
sclv

2
এছাড়াও, জিএইচসির নতুন EventLogলগিং ফ্রেমওয়ার্ক ( +RTS -lরানটাইম ব্যবহার করে) কোনও ফাইলে আউটপুট প্রবাহিত করে, যা ইভেন্টলগ ফর্ম্যাটটি পড়ার কোনও সরঞ্জাম দিয়ে ভিজ্যুয়ালাইজ করা যায়।
ডন স্টুয়ার্ট

2
একটি প্রোগ্রাম এর ইভেন্টগুলির লগগুলি এই জাতীয় উত্সাহিত করবে : গ্যালোইস / অ্যাডসন / টেম্প / এ.ইভেন্ট.লগ - যা রূপান্তরিত হতে পারে - i.imgur.com/QAe6r.png । আমি এই ফর্ম্যাটটির উপরে অন্য পর্যবেক্ষণের সরঞ্জামগুলি তৈরির কল্পনা করতে পারি।
ডন স্টুয়ার্ট

2
আরও মনে রাখবেন যে প্রচুর প্রোফাইলিং সরঞ্জাম পরীক্ষার জন্য দুর্দান্ত তবে প্রোডাকশন কোডের জন্য এতটা নয়। ওভারহেড একপাশে রেখে, উদাহরণস্বরূপ কেবলমাত্র একটি একক প্রসেসরের সাহায্যে ব্যবহার করা যেতে পারে।
sclv

9
  • কনফিগারেশন সম্পর্কিত, আমি কনফিগার ফাইলটি আমার প্রকল্পগুলির জন্য দরকারী বলে মনে করেছি। আমি এটি উত্পাদনে আমার সমস্ত ডেমনগুলির জন্য ব্যবহার করি। এটি স্বয়ংক্রিয়ভাবে আপডেট হয় না।
  • আমি পরিবেশে জুড়ে প্রজননযোগ্য বিল্ড তৈরির জন্য ক্যাবল-ডেভ ব্যবহার করি (স্থানীয়, দেব, সহকর্মী-স্থানীয়)। প্রকৃতপক্ষে ক্যাবল-ডেভ অপরিহার্য, বিশেষত প্রকল্প ডিরেক্টরিতে লাইব্রেরির স্থানীয়, প্যাচযুক্ত সংস্করণগুলিকে সমর্থন করার দক্ষতার জন্য।
  • এটির মূল্য কীসের জন্য, আমি xmonad- স্টাইলের রাষ্ট্র পুনরায় লোডিংয়ের সাথে যাব। হাস্কেলের বিশুদ্ধতা এই তুচ্ছ করে তোলে; মাইগ্রেশন একটি সমস্যা তবে তা যাই হোক না কেন। আমি আমার আইআরসিডি-র জন্য এইচএসপ্লাগিন এবং ইঙ্গিত দিয়ে পরীক্ষা করেছিলাম এবং পূর্বের ক্ষেত্রে একটি জিএইচসি রানটাইম সমস্যা ছিল, এবং পরবর্তীকালে একটি সেগমেন্টেশন ত্রুটি ছিল। পরে পোস্টমর্টেমের জন্য আমি গিথুবে শাখা ছেড়ে দিয়েছি: https://github.com/chrisdone/hulk

কনফিগার ফাইলের উদাহরণ:

# Default options
[DEFAULT]
hostname: localhost
# Options for the first file
[file1]
location: /usr/local
user: Fred

9

ডন যা বলেছিল তা আমি প্রতিধ্বনিত করব এবং কয়েকটি সাধারণ বিট যোগ করবো।

উদাহরণস্বরূপ, দুটি অতিরিক্ত সরঞ্জাম এবং গ্রন্থাগার যা আপনি বিবেচনা করতে চাইতে পারেন:

  • সম্পত্তি ভিত্তিক পরীক্ষার জন্য কুইকচেক
  • এর বর্ধিত সংস্করণ হিসাবে hlint-Wall

এগুলি উভয়ই কোড মানের লক্ষ্যযুক্ত।

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

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

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

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