কিছু ক্রিয়ামূলক ভাষার সফ্টওয়্যার লেনদেনের মেমরির প্রয়োজন কেন?


24

সংজ্ঞা অনুসারে কার্যকরী ভাষাগুলিতে রাষ্ট্রীয় ভেরিয়েবলগুলি বজায় রাখা উচিত নয়। তাহলে, কেন, হাস্কেল, ক্লোজার এবং অন্যান্যরা সফ্টওয়্যার লেনদেনের মেমরি (এসটিএম) বাস্তবায়ন সরবরাহ করে? দুটি পদ্ধতির মধ্যে কোনও দ্বন্দ্ব রয়েছে কি?


আমি কেবল এই আকর্ষণীয় কাগজটি লিঙ্ক করতে চাই যা বেশ ব্যাখ্যা করে।
ফ্যালকন

1
স্পষ্টতই, সমস্ত কার্যকরী ভাষা রাষ্ট্র বজায় রাখে, তবে বিশুদ্ধতা নির্ধারণ করে যে কোনও ভেরিয়েবলের মান সেট হয়ে গেলে এটি পরিবর্তিত হয় না।
রবার্ট হার্ভে

উত্তর:


13

পরিবর্তনশীল স্থিতি বজায় রাখার জন্য একটি কার্যকরী ভাষা নিয়ে কোনও ভুল নেই। এমনকি "বিশুদ্ধ" কার্যকরী ভাষা যেমন হাস্কেলের বাস্তব বিশ্বের সাথে যোগাযোগের জন্য রাষ্ট্র বজায় রাখা প্রয়োজন। ক্লজিউরের মতো "অপরিষ্কার" কার্যকরী ভাষাগুলি পার্শ্ব প্রতিক্রিয়াগুলিকে মঞ্জুরি দেয় যা পরিবর্তিত অবস্থা অন্তর্ভুক্ত করতে পারে।

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

আমি মনে করি যে কার্যকরী ভাষাগুলিতে এসটিএম বেশি ব্যবহৃত হওয়ার বিভিন্ন কারণ রয়েছে:

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

আমি ব্যক্তিগতভাবে ক্লোজুরের পরিবর্তনের অনুমতি দেওয়ার পদ্ধতির পছন্দ করি তবে কেবলমাত্র কঠোরভাবে নিয়ন্ত্রিত "পরিচালিত রেফারেন্স" প্রসঙ্গে যা এসটিএম লেনদেনে অংশ নিতে পারে। ভাষার অন্য সমস্ত কিছু "খাঁটিভাবে কার্যকরী"।

  ;; 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 অনেক ট্রানজেকশনাল সত্তা সহ একটি বৃহত জটিল সিস্টেমে সমাধান করতে।

কিছু অতিরিক্ত জ্ঞানার্জনের জন্য, রিচ হিকি এই ভিডিওতে ক্লোজারের এসটিএম ব্যাখ্যা করার জন্য দুর্দান্ত কাজ করেছে


3

সংজ্ঞা অনুসারে কার্যকরী ভাষাগুলির ক্ষেত্রে রাষ্ট্রের ভেরিয়েবলগুলি বজায় রাখা উচিত নয়

আপনার সংজ্ঞাটি ভুল। যে ভাষা সহজভাবে রাষ্ট্র বজায় রাখতে পারে না সেগুলি ব্যবহার করা যায় না।

ক্রিয়ামূলক এবং অপরিহার্য ভাষার মধ্যে পার্থক্য নয় যে তাদের একটির রাষ্ট্র রয়েছে এবং অন্যটিরও নেই। এটি একরকমভাবে তারা রাজ্য বজায় রাখে।

অত্যাবশ্যকীয় ভাষা সমস্ত প্রোগ্রামে রাজ্য ছড়িয়ে পড়ে।

কার্যকরী ভাষাগুলি স্বতন্ত্রভাবে টাইপ স্বাক্ষরের মাধ্যমে রাষ্ট্রকে বিচ্ছিন্ন করে এবং বজায় রাখে। এবং এ কারণেই তারা এসটিএমের মতো অত্যাধুনিক রাষ্ট্র পরিচালনার ব্যবস্থা সরবরাহ করে।


2

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


আপনার সম্ভবত সম্ভবত পরিবর্তনীয় অবস্থা। সমস্ত প্রোগ্রাম স্থিতি এমনকি এমনকি কার্যকরীও বজায় রাখে।
রবার্ট হার্ভে

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