@ সাকুন্দিমের উত্তর বেশিরভাগ ক্ষেত্রেই সত্য, তবে ভাষার নকশা এবং ব্যবহারিক প্রয়োজনীয়তা সম্পর্কে বাণিজ্য সম্পর্কে আরও কিছু গুরুত্বপূর্ণ অন্তর্দৃষ্টি রয়েছে।
অবজেক্টস এবং রেফারেন্স
এই ভাষাগুলি সাধারণত আনবাউন্ড ডায়নামিক এক্সটেন্টস (বা সি এর পার্লেন্সে, আজীবন , যদিও এই ভাষাগুলির মধ্যে বস্তুর অর্থের পার্থক্যের কারণে ঠিক একই নয় তবে ডিফল্টরূপে) প্রথম শ্রেণীর রেফারেন্সগুলি এড়িয়ে গিয়ে ম্যান্ডেট (বা ধরে নিন) অবজেক্টসমূহ উদাহরণস্বরূপ সি তে অবজেক্ট পয়েন্টার) এবং শব্দার্থবিজ্ঞানের বিধিগুলিতে অপ্রত্যাশিত আচরণ (উদাহরণস্বরূপ শব্দার্থবিজ্ঞানের সাথে সম্পর্কিত আইএসও সি এর অপরিজ্ঞাত আচরণ)।
তদুপরি, এই জাতীয় ভাষায় (প্রথম শ্রেণির) অবজেক্টগুলির ধারণাটি রক্ষণশীলভাবে সীমাবদ্ধ: কোনও কিছুই "স্থানীয়" বৈশিষ্ট্য নির্দিষ্ট করা হয় না এবং ডিফল্টরূপে গ্যারান্টিযুক্ত হয়। এটি কয়েকটি ALGOL- এর মতো ভাষায় সম্পূর্ণ পৃথক, যাদের অবজেক্টগুলি আনবাউন্ড ডায়নামিক এক্সটেন্টস (যেমন সি এবং সি ++) ছাড়াই থাকে, যেখানে অবজেক্টগুলি সাধারণত কিছু ধরণের "টাইপড স্টোরেজ" বোঝায়, সাধারণত মেমরির অবস্থানগুলির সাথে মিলিত হয়।
অবজেক্টগুলির মধ্যে স্টোরেজ এনকোড করার জন্য কিছু অতিরিক্ত সুবিধা রয়েছে যেমন তাদের জীবদ্দশায় ডিটারমিনিস্টিক কম্পিউটেশনাল এফেক্ট সংযুক্ত করতে সক্ষম হওয়া, তবে এটি অন্য একটি বিষয়।
ডেটা স্ট্রাকচারের সিমুলেশন সমস্যা
প্রথম শ্রেণীর রেফারেন্স ব্যতীত, এককভাবে সংযুক্ত তালিকাগুলি কার্যকরভাবে এবং বহনযোগ্যভাবে প্রচলিত traditionalতিহ্যবাহী (আগ্রহী / পরিবর্তনীয়) ডেটা স্ট্রাকচারের অনুকরণ করতে পারে না, কারণ এই ডেটা স্ট্রাকচারগুলির উপস্থাপনা এবং এই ভাষাগুলিতে সীমাবদ্ধ আদিম ক্রিয়াকলাপের কারণে। (বিপরীতভাবে, সি, আপনি বেশ সহজেই এমনকি একটি লিঙ্ক করতে পারেন আহরণ তালিকা কঠোরভাবে অনুসারী প্রোগ্রাম ।) এবং মত অ্যারে / ভেক্টর যেমন বিকল্প ডাটা স্ট্রাকচার বাস্তবে এককভাবে সংযুক্ত তালিকা তুলনায় কিছু উচ্চতর বৈশিষ্ট্য আছে না। আর এই কারণেই আর 5 আরএস নতুন আদিম ক্রিয়াকলাপ প্রবর্তন করে।
তবে দ্বি দ্বি-সংযুক্ত তালিকার তুলনায় ভেক্টর / অ্যারে প্রকারের মধ্যে পার্থক্য রয়েছে। একটি অ্যারে প্রায়শই ও (1) অ্যাক্সেস সময় জটিলতা এবং কম স্থানের ওভারহেড দিয়ে ধরে নেওয়া হয়, যা তালিকার দ্বারা ভাগ না করা দুর্দান্ত বৈশিষ্ট্য। (যদিও কঠোরভাবে বলা যায়, আইএসও সি দ্বারা উভয়ই গ্যারান্টিযুক্ত নয়, তবে ব্যবহারকারীরা প্রায়শই এটির প্রত্যাশা করেন এবং কোনও ব্যবহারিক প্রয়োগ কার্যকরভাবে এই অন্তর্নিহিত গ্যারান্টি লঙ্ঘন করবে না)) ওটিওএইচ, একটি দ্বিগুণ সংযুক্ত তালিকা প্রায়শই উভয় সম্পত্তিকে এককভাবে সংযুক্ত তালিকার চেয়ে আরও খারাপ করে তোলে O , যখন পশ্চাদপদ / ফরোয়ার্ড পুনরাবৃত্তিটি এমনকি কম ওভারহেড সহ একটি অ্যারে বা ভেক্টর (পূর্ণসংখ্যার সূচকগুলির সাথে একত্রে) দ্বারা সমর্থিত হয়। সুতরাং, দ্বিগুণ-লিঙ্কযুক্ত তালিকাটি সাধারণভাবে আরও ভাল সম্পাদন করে না। আরও খারাপ এখনও, তালিকার গতিশীল মেমোরি বরাদ্দ সম্পর্কিত ক্যাশে দক্ষতা এবং বিলম্বিতা সম্পর্কে পারফরম্যান্স অন্তর্নিহিত বাস্তবায়ন পরিবেশের দ্বারা সরবরাহিত ডিফল্ট বরাদ্দকারী ব্যবহার করার সময় অ্যারে / ভেক্টরগুলির পারফরম্যান্সের চেয়ে বিপর্যয়করভাবে খারাপ। সুতরাং খুব নির্দিষ্ট এবং "চতুর" রানটাইম খুব বেশি এই জাতীয় বস্তু তৈরির অনুকূলিতকরণ ছাড়াই অ্যারে / ভেক্টর প্রকারগুলি প্রায়শই লিঙ্কযুক্ত তালিকাগুলিতে পছন্দ করা হয়। (উদাহরণস্বরূপ, আইএসও সি ++ ব্যবহার করে, একটি সতর্কতা রয়েছেstd::vector
std::list
ডিফল্টরূপে অগ্রাধিকার দেওয়া উচিত )) সুতরাং, বিশেষভাবে সংযুক্ত তালিকার (দ্বিগুণ) লিঙ্কযুক্ত তালিকার পক্ষে নতুন আদিমদের পরিচয় করানো অবশ্যই অনুশীলনে অ্যারে / ভেক্টর ডেটা স্ট্রাকচারকে সমর্থন করার জন্য এতটা সুবিধাজনক নয়।
সুষ্ঠু হওয়ার জন্য, তালিকায় এখনও অ্যারে / ভেক্টরগুলির চেয়ে কিছু নির্দিষ্ট বৈশিষ্ট্য রয়েছে:
- তালিকাগুলি নোড-ভিত্তিক। তালিকা থেকে উপাদানগুলি সরিয়ে ফেলা অন্য নোডের অন্যান্য উপাদানের রেফারেন্সকে অবৈধ করে না । (এটি কিছু গাছ বা গ্রাফের ডেটা কাঠামোর ক্ষেত্রেও সত্য)) ওটিওএইচ, অ্যারে / ভেক্টরগুলি অনুসরণযোগ্য অবস্থানটি অবৈধ হওয়ার বিষয়ে উল্লেখ করতে পারে (কিছু ক্ষেত্রে ব্যাপক পুনঃনির্ধারণের সাথে)।
- তালিকাগুলি ও (1) সময়ে বিভক্ত হতে পারে । বর্তমানের সাথে নতুন অ্যারে / ভেক্টরগুলির পুনর্গঠন অনেক বেশি ব্যয়বহুল।
যাইহোক, অন্তর্নির্মিত একক-লিঙ্কযুক্ত তালিকাগুলি সমর্থন সহ কোনও ভাষার জন্য এই বৈশিষ্ট্যগুলি খুব গুরুত্বপূর্ণ নয়, যা ইতিমধ্যে এরূপ ব্যবহারের জন্য সক্ষম। তবুও তফাত রয়েছে, তবুও ভাষাগুলির বাধ্যতামূলক গতিশীল এক্সটেন্টগুলির ভাষায় (যার অর্থ সাধারণত জঞ্জাল সংগ্রহকারী ঝুঁকির উল্লেখগুলি দূরে রাখে), অভিপ্রায় অনুসারে অবৈধতাও কম গুরুত্বপূর্ণ হতে পারে। সুতরাং, কেবলমাত্র দ্বি-সংযুক্ত লিঙ্কের তালিকা জিতে থাকতে পারে:
- উভয় পুনঃ-পুনঃস্থাপন গ্যারান্টি এবং দ্বিদ্বিচারী পুনরাবৃত্তি প্রয়োজনীয়তা প্রয়োজন। (যদি উপাদান অ্যাক্সেসের পারফরম্যান্স গুরুত্বপূর্ণ হয় এবং ডেটার সেট যথেষ্ট পরিমাণে বড় হয় তবে আমি পরিবর্তে বাইনারি অনুসন্ধান গাছ বা হ্যাশ টেবিলগুলি বেছে নেব))
- দক্ষ দ্বি-নির্দেশমূলক স্প্লাইস অপারেশনগুলির প্রয়োজন। এটি যথেষ্ট বিরল। (আমি কেবল ব্রাউজারে রৈখিক ইতিহাস রেকর্ডের মতো কিছু বাস্তবায়নের জন্য প্রয়োজনীয়তা পূরণ করি))
অপরিচ্ছন্নতা এবং এলিয়াসিং
হাস্কেলের মতো শুদ্ধ ভাষায়, বস্তুগুলি অপরিবর্তনীয়। স্কিমের অবজেক্টটি প্রায়শই কোনও রূপান্তর ছাড়াই ব্যবহৃত হয়। এ জাতীয় সত্যটি অবজেক্ট ইন্টার্নিংয়ের সাথে মেমরির দক্ষতার কার্যকরভাবে উন্নতি করা সম্ভব করে - উড়ে একই মান সহ একাধিক বস্তুর অন্তর্নিহিত ভাগ করে নেওয়া।
এটি ভাষা ডিজাইনের একটি আক্রমণাত্মক উচ্চ-স্তরের অপ্টিমাইজেশান কৌশল। যাইহোক, এটি বাস্তবায়নের সমস্যার সাথে জড়িত। এটি প্রকৃতপক্ষে অন্তর্নিহিত স্টোরেজ কোষগুলির অন্তর্নিহিত উপকরণগুলি পরিচয় করিয়ে দেয়। এটি এলিয়াসিং বিশ্লেষণকে আরও কঠিন করে তুলেছে। ফলস্বরূপ, অ-প্রথম-শ্রেণীর রেফারেন্সগুলির ওভারহেড অপসারণের কম সম্ভাবনা থাকতে পারে, এমনকি ব্যবহারকারীরা কখনই এগুলিকে স্পর্শ করেন না। স্কিমের মতো ভাষায়, একবার রূপান্তর সম্পূর্ণরূপে উড়িয়ে দেওয়া না গেলে এটি সমান্তরালেও হস্তক্ষেপ করে। যদিও এটি একটি অলস ভাষায় ঠিক আছে (যদিও ইতিমধ্যে যাইহোক ঠাঁইগুলির দ্বারা সৃষ্ট পারফরম্যান্স সমস্যা রয়েছে)।
সাধারণ পরিকল্পনাযুক্ত প্রোগ্রামিংয়ের জন্য ভাষা নকশার এ জাতীয় পছন্দ সমস্যাযুক্ত হতে পারে। তবে কিছু সাধারণ কার্যকরী কোডিং নিদর্শনগুলির সাথে, ভাষাগুলি এখনও ভাল কাজ করে বলে মনে হচ্ছে।