রাষ্ট্রের পরিবর্তনের উপর নির্ভর না করা কেন ভাল?


16

এই প্রশ্নটি /software/25569/is-haskell-worth-learning প্রশ্নটি থেকে উদ্ভূত হয়েছে

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

কেন?

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

এটি কি হার্ডওয়্যার মেমরি অ্যাক্সেসের সাথে সম্পর্কিত, বা অন্য কোনও কিছু যা বড় পারফরম্যান্স লাভ?


2
হাস্কেল একাডেমিক। আমি ক্লুজুর সম্পর্কে রিচ হিকির কয়েকটি বক্তৃতা দেখব - সেখানে তিনি হত্যাকারী ব্যবহারিক যুক্তি দেয় (জাভিয়েরের তিনটি পয়েন্টের মতো, তবে একটি সহজ উপায়েও করেছিলেন)।
কাজ


6
কেবলমাত্র হাস্কেল "একাডেমিক" এর অর্থ এটি অযৌক্তিক বা বাস্তববাদী নয়।
টিখন জেলভিস

উত্তর:


17

আমার মাথার উপরের অংশে কমপক্ষে তিনটি বড় সুবিধা রয়েছে:

  1. এটি প্রোগ্রামগুলি গাণিতিক প্রকাশের আরও ঘনিষ্ঠ করে তোলে। গণিতে, xপরিবর্তন হয় না, আপনি সমীকরণটি সমাধান না করা অবধি এটি কী তা জানেন না।

  2. শেষ পর্যন্ত, সেখানে হয় রাষ্ট্র পরিবর্তন করুন (সব পরে, যে কিভাবে কম্পিউটার নিম্ন স্তরের কাজ); তবে এটি ভাষা দ্বারা নির্দিষ্ট জায়গায় সীমাবদ্ধ। যা সংস্থাপকটিকে কোডটিকে আরও অনুকূল করার জন্য চারপাশে স্থানান্তরিত করার বিশাল সুযোগ দেয়, যেহেতু এটি জানে যে এটি অন্যান্য কোডের উপর নির্ভর করে এমন কোনও কিছু পরিবর্তন করে না।

  3. পরিবর্তনশীল নয় এমন ডেটা অ্যাক্সেস করার জন্য সমকালীন কোডের সিঙ্ক্রোনাইজ করার দরকার নেই, তাই এসএমপি শেয়ার্ড মেমরি সিস্টেমে (আজকের সমস্ত মাল্টিকোর সিস্টেম) এবং আলগাভাবে আবদ্ধ ক্লাস্টারগুলিতে উভয়ই সম্মতি বাড়ানো হয়েছে।


3
ফাংশনাল প্রোগ্রামিংয়ের প্রোপোজেন্টরা বেশিরভাগ স্ট্রেস # 3 রাখে, অর্থাৎ সহজ সমঝোতা প্রম্মিং।
Mchl

4
@ এমসিএল: আমার অভিজ্ঞতায় তারা সবচেয়ে বেশি চাপ দিয়েছিলেন "এটি বোঝা আরও সহজ এবং সম্পর্কে যুক্তি", যা ধরণের 1 এর সাথে মিলে যায় যদিও আমি মনে করি যে এটি ভাষা সম্প্রদায়ের মধ্যে পৃথক হতে পারে।
sepp2k

+1, খুব সম্পূর্ণ উত্তর। @ sepp2k: আমার অনুমান উভয়ই গুরুত্বপূর্ণ। একটি প্রোগ্রাম সম্পর্কে যুক্তিযুক্ত হ'ল আমরা প্রতিদিন যা করি তা সত্য এবং সত্য যে আপনাকে যদি পরীক্ষা করতে হয় না যে কিছু গভীরভাবে লুকানো ফাংশনে রাজ্যটি পরিবর্তিত হয়নি তবে কেবলমাত্র উচ্চ-স্তরের পদ্ধতিগুলি পড়া এবং কী চলছে তা ধরা খুব সহজ। হার্ডওয়্যার-ওয়াইজ: যেহেতু আমরা মাল্টি-কোর এবং মাল্টি-প্রসেসরের দিকে আরও বেশি এগিয়ে যাচ্ছি (যদিও আমি অনুমান করি যে হোম কম্পিউটারগুলি মাল্টি-প্রসেসরগুলি পাওয়ার আগে এটি কিছুটা সময় হয়ে যাবে), সমকালীন প্রোগ্রামিংয়ের সুবিধার্থে এমন একটি ভাষা থাকা একটি প্রিমিয়াম।
ম্যাথিউ এম।

ভাল উত্তর, আমি উত্তরটি বলেছিলাম বলে মনে করলাম # 2, এবং যদিও আমি বহুপাশের সুবিধাগুলি সম্পর্কে প্রায়শই পড়েছি, এটি খুব কমই পরিষ্কারভাবে বলা হয়েছে, দুর্দান্ত কাজ।
অক্টোডো

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

4

এখানে আরও একটি সুবিধা: সংযুক্তি হ্রাস। আপনার মতো কোড থাকলে:

 function doStuff(x) { return x + y;}

এবং অন্য কোথাও আপনার:

 function doOtherStuff(x) { y++; return y + x;}

তারপরে দুটি ফাংশন অন্তর্নিহিতভাবে নির্ভরশীল । কল করার doStuffমাধ্যমে কলিং প্রভাবিত হয় তা বলার সহজ উপায় নেই doOtherStuff। পরিবর্তনীয় অবস্থা ব্যতীত আপনাকে সংযোগটি সুস্পষ্ট করতে হবে।

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


+1 টি। অনেক অভিজ্ঞ প্রোগ্রামাররা উপরের মত কোডটি লিখতে জানেন না এবং "এই পরিস্থিতিতে পরিবর্তনীয় রাষ্ট্রটি খারাপ" থেকে "আমরা পরিবর্তিত রাষ্ট্রের পরিমাণকে আরও কার্যকরভাবে কমিয়ে আনি এবং আরও কার্যকরীভাবে লিখি" থেকে যাওয়া কোনও বিশাল পদক্ষেপ নয়, তবে এটি একটি পদক্ষেপ হতাশাজনকভাবে কয়েক জন।
ড্যান_ওয়াটারওয়ার্থ

2

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

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

এই উত্তরটি মূলত @ জাভিয়েরের পয়েন্ট 1 এর সম্প্রসারণ।

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

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


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

স্বীকৃতি দেওয়ার ক্ষেত্রে সত্যিকার অর্থে রাষ্ট্রীয় গণনা করার কিছু নেই । ডোন-স্বীকৃতি monadic ফাংশন পাইপলাইনের শীর্ষে একটি সহজ বাক্য গঠন। রাষ্ট্রীয় গণনা কেবলমাত্র এমন একটি জিনিস যা মনাদ ব্যবহার করে প্রকাশ করা যেতে পারে এবং তাই করণ-স্বরলিপি।
জোনাথন স্টার্লিং

মিশ্র ফাংশনাল এবং অপরিহার্য প্রোগ্রামিং হ'ল অস্তিত্বের প্রতিটি ভাষাই যা করে। হাস্কেল সম্ভবত রাষ্ট্রীয় অংশগুলি বিচ্ছিন্ন করার জন্য একটি উপায় সরবরাহ করেছে, তবে এটি এটি একটি সঠিক মিশ্রণ করে না: দাতব্য এটি কেমন হওয়া উচিত (আইএমএইচও) more
Yttrill

2

লেখক হিসাবে নিরোধ , একটি DBMS মধ্যে Haskell লেখা কিছু চপল রাষ্ট্র বিরোধ আমার দৃশ্য কল করতে পারেন। আমি অন্যথায় প্রদর্শন আশা করি।

পরিবর্তনীয় রাষ্ট্রের উদ্দেশ্য হ'ল বর্তমান সিস্টেমটি যে কোনও সিস্টেমের মধ্যে রয়েছে সেটিকে বর্ণনা করা Say আপনার একটি ব্লগ রয়েছে এবং এটি একটি ডেটাবেস দ্বারা ব্যাকএন্ড হয়, ডাটাবেসটি আপনার ব্লগে আপনার যে পোস্টগুলি পোস্ট করেছে সে সময়ে আপনাকে সেই সময়ে জিজ্ঞাসা করেছে এটা। এই মুহুর্তে কতটি পোস্ট রয়েছে?

এটিকে পার্থক্যহীন স্থিতির সাথে তুলনা করুন যা তথ্য জানাতে ব্যবহৃত হয়। 12 আগস্টে কতটি পোস্ট ছিল?

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

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