কার্যকরী প্রোগ্রামিংয়ে যেহেতু প্রায় সমস্ত ডেটা স্ট্রাকচার অপরিবর্তনীয়, যখন রাষ্ট্রকে একটি নতুন কাঠামো তৈরি করতে হয়। এর অর্থ কি আরও অনেক বেশি মেমোরি ব্যবহার হয়?
এটি ডেটা কাঠামোর উপর নির্ভর করে, আপনি যে সঠিক পরিবর্তনগুলি করেছেন এবং কিছু ক্ষেত্রে অপটিমাইজার। একটি উদাহরণ হিসাবে একটি তালিকার অর্থ প্রদান বিবেচনা করা যাক:
list2 = prepend(42, list1) // list2 is now a list that contains 42 followed
// by the elements of list1. list1 is unchanged
এখানে অতিরিক্ত মেমরির প্রয়োজনীয়তা স্থির - কলিংয়ের রানটাইম ব্যয়ও তাই prepend
। কেন? কারণ prepend
কেবল একটি নতুন ঘর তৈরি করে যার 42
মাথা এবং list1
লেজ হিসাবে। এটি list2
অর্জনের জন্য এটি অনুলিপি বা অন্যথায় পুনরাবৃত্তি করতে হবে না। এটি, সংরক্ষণের জন্য প্রয়োজনীয় মেমরি বাদে 42
, list2
একই মেমরিটি ব্যবহার করে যা পুনরায় ব্যবহার করে list1
। উভয় তালিকা অপরিবর্তনীয়, এই ভাগ করে নেওয়া পুরোপুরি নিরাপদ।
একইভাবে, ভারসাম্যযুক্ত কাঠের কাঠামোর সাথে কাজ করার সময়, বেশিরভাগ ক্রিয়াকলাপে কেবলমাত্র অতিরিক্ত স্থানের পরিমাণের প্রয়োজন হয় কারণ সমস্ত কিছু, তবে গাছের একটি পথ ভাগ করা যায়।
অ্যারেগুলির জন্য পরিস্থিতি কিছুটা আলাদা। এ কারণেই, অনেকগুলি এফপি ভাষায়, অ্যারেগুলি সাধারণত ব্যবহৃত হয় না। যাইহোক, আপনি যদি এই লাইনের পরে এমন কিছু করেন arr2 = map(f, arr1)
এবং arr1
আর কখনও ব্যবহার না করেন তবে একটি স্মার্ট অপ্টিমাইজার আসলে একটি কোড তৈরি করতে পারে যা arr1
নতুন অ্যারে তৈরি করার পরিবর্তে পরিবর্তিত হয় (প্রোগ্রামটির আচরণকে প্রভাবিত না করে)। সেক্ষেত্রে পারফরম্যান্স অবশ্যই এক অপরিহার্য ভাষায় হবে।