সংজ্ঞা অনুসারে কার্যকরী ভাষাগুলিতে রাষ্ট্রীয় ভেরিয়েবলগুলি বজায় রাখা উচিত নয়। তাহলে, কেন, হাস্কেল, ক্লোজার এবং অন্যান্যরা সফ্টওয়্যার লেনদেনের মেমরি (এসটিএম) বাস্তবায়ন সরবরাহ করে? দুটি পদ্ধতির মধ্যে কোনও দ্বন্দ্ব রয়েছে কি?
সংজ্ঞা অনুসারে কার্যকরী ভাষাগুলিতে রাষ্ট্রীয় ভেরিয়েবলগুলি বজায় রাখা উচিত নয়। তাহলে, কেন, হাস্কেল, ক্লোজার এবং অন্যান্যরা সফ্টওয়্যার লেনদেনের মেমরি (এসটিএম) বাস্তবায়ন সরবরাহ করে? দুটি পদ্ধতির মধ্যে কোনও দ্বন্দ্ব রয়েছে কি?
উত্তর:
পরিবর্তনশীল স্থিতি বজায় রাখার জন্য একটি কার্যকরী ভাষা নিয়ে কোনও ভুল নেই। এমনকি "বিশুদ্ধ" কার্যকরী ভাষা যেমন হাস্কেলের বাস্তব বিশ্বের সাথে যোগাযোগের জন্য রাষ্ট্র বজায় রাখা প্রয়োজন। ক্লজিউরের মতো "অপরিষ্কার" কার্যকরী ভাষাগুলি পার্শ্ব প্রতিক্রিয়াগুলিকে মঞ্জুরি দেয় যা পরিবর্তিত অবস্থা অন্তর্ভুক্ত করতে পারে।
মূল কথাটি হ'ল ক্রিয়ামূলক ভাষাগুলি পরিবর্তিত অবস্থাকে নিরুৎসাহিত করে যদি না আপনার সত্যিকারের প্রয়োজন হয় । সাধারণ স্টাইলটি হ'ল খাঁটি ফাংশন এবং অপরিবর্তনীয় ডেটা ব্যবহার করে প্রোগ্রাম করা এবং কেবল আপনার কোডের নির্দিষ্ট অংশগুলিতে "অপরিষ্কার" পরিবর্তনযোগ্য রাষ্ট্রের সাথে যোগাযোগ করা হয় যা এটির প্রয়োজন হয়। এইভাবে, আপনি আপনার কোডের বাকী অংশটি "খাঁটি" রাখতে পারেন।
আমি মনে করি যে কার্যকরী ভাষাগুলিতে এসটিএম বেশি ব্যবহৃত হওয়ার বিভিন্ন কারণ রয়েছে:
আমি ব্যক্তিগতভাবে ক্লোজুরের পরিবর্তনের অনুমতি দেওয়ার পদ্ধতির পছন্দ করি তবে কেবলমাত্র কঠোরভাবে নিয়ন্ত্রিত "পরিচালিত রেফারেন্স" প্রসঙ্গে যা এসটিএম লেনদেনে অংশ নিতে পারে। ভাষার অন্য সমস্ত কিছু "খাঁটিভাবে কার্যকরী"।
;; define two accounts as managed references
(def account-a (ref 100))
(def account-b (ref 100))
;; define a transactional "transfer" function
(defn transfer [ref-1 ref-2 amount]
(dosync
(if (>= @ref-1 amount)
(do
(alter ref-1 - amount)
(alter ref-2 + amount))
(throw (Error. "Insufficient balance!")))))
;; make a stranfer
(transfer account-a account-b 75)
;; inspect the accounts
@account-a
=> 25
@account-b
=> 175
নোট করুন উপরের কোডটি সম্পূর্ণ লেনদেনের এবং পারমাণবিক - একটি বহিরাগত পর্যবেক্ষক অন্য লেনদেনের মধ্যে দুটি ভারসাম্য পড়তে সর্বদা একটি সামঞ্জস্যপূর্ণ পারমাণবিক অবস্থা দেখতে পাবেন, যেমন দুটি ভারসাম্য সর্বদা 200 এর সমান হবে lock অনেক ট্রানজেকশনাল সত্তা সহ একটি বৃহত জটিল সিস্টেমে সমাধান করতে।
কিছু অতিরিক্ত জ্ঞানার্জনের জন্য, রিচ হিকি এই ভিডিওতে ক্লোজারের এসটিএম ব্যাখ্যা করার জন্য দুর্দান্ত কাজ করেছে
সংজ্ঞা অনুসারে কার্যকরী ভাষাগুলির ক্ষেত্রে রাষ্ট্রের ভেরিয়েবলগুলি বজায় রাখা উচিত নয়
আপনার সংজ্ঞাটি ভুল। যে ভাষা সহজভাবে রাষ্ট্র বজায় রাখতে পারে না সেগুলি ব্যবহার করা যায় না।
ক্রিয়ামূলক এবং অপরিহার্য ভাষার মধ্যে পার্থক্য নয় যে তাদের একটির রাষ্ট্র রয়েছে এবং অন্যটিরও নেই। এটি একরকমভাবে তারা রাজ্য বজায় রাখে।
অত্যাবশ্যকীয় ভাষা সমস্ত প্রোগ্রামে রাজ্য ছড়িয়ে পড়ে।
কার্যকরী ভাষাগুলি স্বতন্ত্রভাবে টাইপ স্বাক্ষরের মাধ্যমে রাষ্ট্রকে বিচ্ছিন্ন করে এবং বজায় রাখে। এবং এ কারণেই তারা এসটিএমের মতো অত্যাধুনিক রাষ্ট্র পরিচালনার ব্যবস্থা সরবরাহ করে।
কখনও কখনও কোনও প্রোগ্রামের পরিবর্তনীয় স্থিতি প্রয়োজন (উদাহরণস্বরূপ, কোনও ওয়েব অ্যাপ্লিকেশনের জন্য ডাটাবেস সামগ্রী) এবং এটি কার্যকরী প্রোগ্রামিংয়ের সুবিধাগুলি না হারিয়ে এটি ব্যবহার করতে সক্ষম হওয়াই দুর্দান্ত । অ-কার্যকরী ভাষাগুলিতে, পরিবর্তনীয় স্থিতি সবকিছুকে ছড়িয়ে দেয়। যদি আপনি এটিকে কিছু প্রকারের বিশেষ এপিআই দিয়ে স্পষ্ট করে থাকেন তবে আপনি এটিকে একটি ছোট সনাক্তকারী অঞ্চলে সীমাবদ্ধ রাখতে পারেন অন্য সমস্ত কিছু খাঁটি কার্যকরভাবে থেকে যায়। এফপির সুবিধার মধ্যে রয়েছে সহজেই ডিবাগিং, পুনরাবৃত্তযোগ্য ইউনিট টেস্টিং, ব্যথাহীন সামঞ্জস্য এবং মাল্টিকোর / জিপিইউ বন্ধুত্ব।