HeadlinesBriefing favicon HeadlinesBriefing.com

নির্ধারিত কোর এবং গৌরবহীন শেল আর্কিটেকচার

Hacker News •
×

আটো বছর আগে, গ্যারি বার্নহার্ট ফাংশনাল কোর, ইম্পারেটিভ শেল শব্দটি উদ্ধার করেন। অধিকাংশ ভালো কম্পিউটার ধারণার মতো, এটি পুরোপুরি নতুন এখনও ছিল না, কিন্তু তার ধারণা খুবই স্পষ্ট ছিল, এবং এটি বিদ্যমান ব্যবসার মধ্যে পরীক্ষা ও নির্ধারণের নিয়ে কথা বলার জন্য একটি চমৎকার ভিত্তি গঠন করে। সংক্ষেপে, ফাংশনাল কোর ইম্পারেটিভ শেল আর্কিটেকচার কোডটি দুইটি অংশে ভাগ করে। ফাংশনাল কোর পূর্ণভাবে ফাংশনাল - অর্থাৎ কোনো I/O নেই এবং কোনো ধ্বংসজনক অবস্থা আপডেট নেই। এটি অ্যাপ্লিকেশনের ব্যবসার লজিকের ওপর ভিত্তি রাখে। ইম্পারেটিভ শেল কম পথ আছে, কিন্তু অবস্থা বজায় রাখে, বাইরের নির্ভরতাগুলি সমন্বয় করে এবং বাইরের জগতের সাথে যুক্ত হয় - অর্থাৎ I/O। এর কাজ হলো কোরকে মূল্যগুলি দিয়ে প্রশ্ন করা, কোনো ব্ল্যাকবক্স সিদ্ধান্তের ফলাফল হিসাবে মূল্যগুলি গ্রহণ করা, এবং বাইরের জগতের সাথে সংযোগের জন্য ব্যবহার করা; হোক ডাটাবেসে লেখা, একটি অনুরোধ পাঠানো, অথবা GUI আপডেট করা। এই মডেলে কোর ও শেল আছে ভিন্ন বৈশিষ্ট্যগুলি: কোর শেল নির্ণয় নেয় নির্ভরতাগুলি সমন্বয় করে অনেক বিশাল চালনার পথ আছে বেশি সরল চালনা আছে বিশ্বকে আলাদা করে রাখে বিশ্বের সাথে একীকৃত হয় এটি কোরকে পরীক্ষার জন্য অত্যন্ত যোগ্য করে। কারণ এটি পূর্ণভাবে ফাংশনাল, সমান ইনপুটগুলি সর্বদা সমান ফলাফল দেবে। কারণ এটি আলাদা, কোনও মক বা স্টার্ব কিছুই নেই। এবং কারণ এটি জটিল ব্যবসার লজিক হ্যান্ডল করে, পরীক্ষগুলি আমাদের সিস্টেমের আচরণ সম্পর্কে বেশ কিছু বলতে পারে। ফাংশনাল পিউরিটি ও নির্ধারণ একটি ছোট উপায়ে এই গুণগুলি বর্ণনা করা যা শুদ্ধ ফাংশনগুলিকে পরীক্ষার জন্য যোগ্য করে তা হলো তারা নির্ধারিত। অর্থাৎ - একটি ইনপুট স্ট্রিম দিয়ে, একটি শুদ্ধ ফাংশন সর্বদা সমান একটি আউটপুট স্ট্রিম ফেরায়; তার আচরণ পুনরাবৃত্তিযোগ্য। কিন্তু শুদ্ধ ফাংশনাল প্রোগ্রামিং একমাত্র এখানে পৌঁছানোর পথ নয়। যদি আমরা সামান্য কাঁধ ঝুলিয়ে দেখি, আমরা দেখতে পারি যে একটি মানের ধারা এবং একটি সমন্বয়ের ধারা ভিন্ন পদ্ধতিতে একই বিষয়টি প্রকাশ করে, এবং স্টেট মেশিনগুলি আমাদের সমান সুবিধা আনতে পারে। নিম্নলিখিত কোড বিবেচনা করুন: function add(ns) {return ns.reduce((a, b) => a + b, 0)} class Add Machine {#state = 0 transition(input) {this.#state += input} get state() {return this.#state}} add ফাংশন সহজে বোঝা যায়; এটি শুদ্ধ এবং তাই নির্ধারিত। কিন্তু Add Machine এটি নির্ধারিতও - একই transition ফাংশনের কলের একই ক্রম দিয়ে, Add Machine সমান অবস্থা ফেরাবে। এটি ইম্পারেটিভ হওয়া এটিকে পরিবর্তন করে না। const output = add([1, 2, 3]) const a = new Add Machine() a.transition(1) a.transition(2) a.transition(3) const output = a.state শুদ্ধ ফাংশনাল প্রোগ্রামিং একটি ভাল প্যারাডাইম, কিন্তু কার্যকরতা বা ভাষার কারণে, এটি সর্বদা ব্যবহারযোগ্য নয় - আমি C-তে এটি করার চেষ্টা করতে চাইনি! কিন্তু শুদ্ধ ফাংশনাল থেকে শুধুমাত্র নির্ধারিত করে মানের মাপকাঠি হ্রাস করলে, আমরা Functional Core Imperative Shell-এর পরীক্ষার যোগ্যতার সুবিধা বজায় রাখি, এবং এর প্রয়োগযোগ্যতা বাড়িয়ে দেই। আর সুতরাং এই পোস্টের শিরোনাম: নির্ধারিত কোর, গৌরবহীন শেল। নির্ধারণ একটি অধিক প্রতস্পন্দ ধারণা হতে পারে শুদ্ধতার তুলনায়। আপনি কীভাবে এটি চিহ্নিত করেন? আমি এটি সনাক্ত করা সহজ বলে মনে করি কারণ মনে শুরু করা সহজ যা নির্ধারিত নয়। এখানে কিছু সাধারণ উদাহরণ রয়েছে অ-পুনরাবৃত্তিযোগ্য আচরণের: একটি সিড নেওয়া না র্যান্ডম নম্বর জেনারেটর কল করা অ্যাসিনক্রোনাস এবং মাল্টি-থ্রেডেড অপারেশন নেটওয়ার্কের মাধ্যমে যোগাযোগ করা অন্য প্রক্রিয়াগুলির সাথে যোগাযোগ করা পঢ়া লিখা স্থানীয় স্টোরেজে ডাটাবেস ইন্টারঅ্যাকশন OS-কে তারিখ বা সময় অনুরোধ করা সব এগুলি গৌরবহীন শেলে পরিলিপ্ত। আপনি যখন আপনার ব্যবসার লজিকে এগুলি পান, তখন আপনার পাসে একটি প্রাকৃতিক লক্ষ্য আছে ফ্র্যাগমেন্টেশনের জন্য - বা তাদের আসপাশে একটি ফাংশন দুইটি ভাগে বাঁটা, বা তাদেরকে একটি লেয়ার উপরে নেওয়া এবং তাদের ফলাফলকে একটি প্যারামিটার হিসাবে ইনজেক্ট করা। শেল মেটাফোরের কথা বাস্তবে ভাবা মজার বিষয়; এটি লজিককে আসপাশন করা উচিত, অ্যাপ্লিকেশনের হৃদয়কে প্রশ্ন করা যাতে এটি কী চায়। কাজ করা আপনার সাথে যা আছে এটি সব ভাল, আপনি যেতে পারেন, কিন্তু আমি যে পুরনো কোডে ব্যস্ত হয়েছি, তাকে কী উপকার দেয়?