এফআরপি সম্পর্কে অনেক পৃষ্ঠাগুলি পড়ার পরে অবশেষে এফআরপি সম্পর্কে এই আলোকিত লেখার মুখোমুখি হয়েছি, শেষ পর্যন্ত এফআরপি আসলে কী সম্পর্কে তা বুঝতে পেরেছিল।
আমি হেইনিরিচ অ্যাপফেলমাস (প্রতিক্রিয়াশীল কলা লেখক) এর নীচে উদ্ধৃতি দিই।
ক্রিয়ামূলক প্রতিক্রিয়াশীল প্রোগ্রামিং এর সারাংশ কি?
একটি সাধারণ উত্তর হ'ল "এফআরপি হ'ল পরিবর্তনের কারণে পরিবর্তিত ফাংশনগুলির পরিবর্তে ব্যবস্থার পরিবর্তে কোনও সিস্টেমকে বর্ণনা করা” "এবং এটি অবশ্যই ভুল হবে না। এটিই সিনেমিক দৃষ্টিভঙ্গি। তবে আমার মতে, গভীর, আরও সন্তোষজনক উত্তর নীচের খাঁটি সিনট্যাকটিক মাপদণ্ড দ্বারা দেওয়া হয়েছে:
ক্রিয়ামূলক প্রতিক্রিয়াশীল প্রোগ্রামিংয়ের সারমর্ম হ'ল ঘোষণার সময় সম্পূর্ণরূপে একটি মানটির গতিশীল আচরণ নির্দিষ্ট করা।
উদাহরণস্বরূপ, একটি কাউন্টারের উদাহরণটি ধরুন: আপনার কাছে "উপরে" এবং "ডাউন" লেবেলযুক্ত দুটি বোতাম রয়েছে যা কাউন্টারকে বৃদ্ধি বা হ্রাস করতে ব্যবহৃত হতে পারে। অপরিহার্যভাবে, আপনি প্রথমে একটি প্রাথমিক মান নির্দিষ্ট করবেন এবং তারপরে যখনই কোনও বোতাম টিপবে তখন তা পরিবর্তন করবেন; এটার মতো কিছু:
counter := 0 -- initial value
on buttonUp = (counter := counter + 1) -- change it later
on buttonDown = (counter := counter - 1)
মুল বক্তব্যটি হ'ল ঘোষণার সময়, কাউন্টারটির জন্য কেবলমাত্র প্রাথমিক মান নির্দিষ্ট করা হয়; কাউন্টারটির গতিশীল আচরণ প্রোগ্রামের বাকী অংশে অন্তর্ভুক্ত। বিপরীতে, কার্যক্ষম প্রতিক্রিয়াশীল প্রোগ্রামিং ঘোষণার সময় পুরো গতিশীল আচরণটি নির্দিষ্ট করে:
counter :: Behavior Int
counter = accumulate ($) 0
(fmap (+1) eventUp
`union` fmap (subtract 1) eventDown)
যখনই আপনি কাউন্টারটির গতিশীলতা বুঝতে চান, আপনাকে কেবল তার সংজ্ঞাটি দেখতে হবে। এটিতে ঘটতে পারে এমন সমস্ত কিছুই ডানদিকে প্রদর্শিত হবে। এটি অত্যাবশ্যক পদ্ধতির বিপরীতে যেখানে পরবর্তী ঘোষণাগুলি পূর্বের ঘোষিত মানগুলির গতিশীল আচরণ পরিবর্তন করতে পারে।
সুতরাং, আমার বোঝার মধ্যে একটি এফআরপি প্রোগ্রাম হল সমীকরণের একটি সেট:
j
পৃথক: 1,2,3,4 ...
f
নির্ভর করে t
তাই এটি বাহ্যিক উদ্দীপনা মডেল করার সম্ভাব্যতা অন্তর্ভুক্ত করে
প্রোগ্রামের সমস্ত রাজ্য ভেরিয়েবলগুলিতে আবদ্ধ হয় x_i
এফআরপি গ্রন্থাগার অন্য কথায় সময় এগিয়ে, গ্রহণ যত্ন নেয় j
করার j+1
।
এই সমীকরণগুলি আমি এই ভিডিওতে আরও বিস্তারিতভাবে ব্যাখ্যা করি ।
সম্পাদনা করুন:
মূল উত্তরের প্রায় 2 বছর পরে, সম্প্রতি আমি এই সিদ্ধান্তে পৌঁছেছি যে এফআরপি বাস্তবায়নের আরও একটি গুরুত্বপূর্ণ দিক রয়েছে। তাদের একটি গুরুত্বপূর্ণ ব্যবহারিক সমস্যা সমাধান করতে হবে (এবং সাধারণত করা হয়): ক্যাশে অবৈধ ।
x_i
-S এর সমীকরণগুলি নির্ভরতা গ্রাফ বর্ণনা করে। যখন সময়ে কিছু x_i
পরিবর্তন হয় j
তখন অন্য সমস্ত x_i'
মানগুলি j+1
আপডেট করার প্রয়োজন হয় না, তাই সমস্ত নির্ভরতা পুনরায় গণনার প্রয়োজন হয় না কারণ কিছু x_i'
থেকে পৃথক হতে পারে x_i
।
তদ্ব্যতীত, x_i
-স পরিবর্তনগুলি ক্রমবর্ধমান আপডেট করা যেতে পারে। উদাহরণ হিসেবে বলা যায় এর একটি মানচিত্র অপারেশন বিবেচনা করা যাক f=g.map(_+1)
Scala, যেখানে f
এবং g
আছে List
এর Ints
। এখানে f
অনুরূপ x_i(t_j)
এবং g
হয় x_j(t_j)
। এখন আমি যদি কোনও উপাদানকে আগে থেকে প্রস্তুত করি g
তবে map
সমস্ত উপাদানগুলির জন্য ক্রিয়াকলাপ চালানো ব্যর্থ হবে g
। কিছু এফআরপি বাস্তবায়ন (উদাহরণস্বরূপ রিফ্লেক্স-ফ্রিপ ) লক্ষ্য করে এই সমস্যাটি সমাধান করা। এই সমস্যাটি ইনক্রিমেন্টাল কম্পিউটিং নামেও পরিচিত ।
অন্য কথায়, x_i
এফআরপিতে আচরণগুলি ( -র) কে ক্যাশে-এড গণনা হিসাবে বিবেচনা করা যেতে পারে। x_i
যদি কিছু f_i
-s পরিবর্তন হয় তবে দক্ষতার সাথে এই ক্যাশে-গুলি (দ্য-গুলি ) কে অকার্যকর ও পুনরায় সংশোধন করা এফআরপি ইঞ্জিনের কাজ ।