স্কোপড-ভিত্তিক মেমরি পরিচালনার অসুবিধা


38

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

আমি এটিকে বরং বিভ্রান্ত মনে করি

  1. এসবিএমএম প্রোগ্রামগুলিকে আরও নিরঙ্কুশ করে তোলে (কোনও বস্তু ধ্বংস হওয়ার পরে আপনি ঠিক বলতে পারেন);
  2. যে ভাষাগুলি জিসি ব্যবহার করে সেগুলিতে আপনাকে প্রায়শই ম্যানুয়াল রিসোর্স ম্যানেজমেন্ট করতে হয় (উদাহরণস্বরূপ জাভাতে ফাইলগুলি বন্ধ করার পদ্ধতি দেখুন), যা আংশিকভাবে জিসির উদ্দেশ্যকে পরাস্ত করে এবং ত্রুটিযুক্ত প্রবণও হয়;
  3. হিপ মেমরিও (খুব মার্জিতভাবে, ইমো) স্কোপ-বেঁধে থাকতে পারে ( std::shared_ptrসি ++ এ দেখুন)।

এসবিএমএম কেন বেশি ব্যবহৃত হয় না? এর অসুবিধাগুলি কী কী?


1
কিছু অসুবিধাগুলি (বিশেষত গতি সম্পর্কিত) উইকিপিডিয়া: en.wikedia.org/wiki/… এ
ফিলিপ

2
জাভা ম্যানুয়াল রিসোর্স ম্যানেজমেন্ট সমস্যা গ্যারান্টি না দেওয়ার একটি পার্শ্ব প্রতিক্রিয়া যা finalize()আবর্জনা সংগ্রহের আগে কোনও বস্তুর পদ্ধতি বলা হবে। বাস্তবে, এটি একই শ্রেণির সমস্যার সৃষ্টি করে যা আবর্জনা সংগ্রহের সমাধান হওয়ার কথা।
ব্লারফ্লার

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

4
BTW। আমি এটিকে এসবিআরএম হিসাবে উল্লেখ করতে চাই কারণ আপনি কেবল স্মৃতি নয়, সাধারণভাবে সংস্থানগুলি পরিচালনা করতে একই পদ্ধতি ব্যবহার করতে পারেন।
প্লাজমাএইচ

উত্তর:


27

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

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

আবর্জনা সংগ্রহ আপনাকে সবচেয়ে বেশি ব্যবহৃত ব্যবহৃত সংস্থান, স্মৃতিশক্তি দ্বারা এই উদ্বেগ থেকে মুক্তি দেয়। অবশ্যই, অন্যান্য উত্সগুলির জন্য আপনার এখনও একই সিদ্ধান্ত নেওয়া দরকার, তবে এগুলি খুব কম সাধারণ (উপরে দেখুন), এবং জটিল (যেমন ভাগ করা) মালিকানাও খুব কম সাধারণ নয়। মানসিক বোঝা উল্লেখযোগ্যভাবে হ্রাস পায়।

এখন, আপনি সমস্ত মান আবর্জনা সংগ্রহ করার জন্য কিছু ডাউনসাইডের নাম দিয়েছেন । তবে, মেমরি-নিরাপদ জিসি এবং মান ধরণের উভয়কেই এক ভাষাতে আরআইআইয়ের সাথে একীকরণ করা অত্যন্ত শক্ত, সুতরাং সম্ভবত এই উপায়গুলি অন্য উপায়ের মাধ্যমে ছড়িয়ে দেওয়া আরও ভাল?

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

আপনার দ্বিতীয় পয়েন্ট, ম্যানুয়াল রিসোর্স ম্যানেজমেন্ট, আজকাল স্কোপ-ভিত্তিক ক্লিনআপ সম্পাদন করে এমন একটি স্টেটমেন্টের মাধ্যমে সম্বোধন করা হয়, তবে বস্তুটির জীবনকাল (এটি জিসি এবং মেমরির সুরক্ষার সাথে ইন্টারঅ্যাক্ট করে না) সাফ করে না। এটি usingসি # তে, withপাইথনে, tryসাম্প্রতিক জাভা সংস্করণগুলির সাথে-সংস্থানসমূহ।


1
এটি ব্যাখ্যা করে না যে কেন জিসির মতো ননডেটেরিস্টিক মডেলগুলি ডিটারমিনিস্টিকগুলির চেয়ে সর্বোত্তম হওয়া উচিত। usingবিবৃতি স্থানীয়ভাবে শুধুমাত্র সম্ভব। সদস্য ভেরিয়েবলগুলিতে রাখা সম্পদগুলি সেভাবে পরিষ্কার করা অসম্ভব।
ফিলিপ

8
@ ফিলিপস শেয়ার্ডের মালিকানা হ'ল একটি জিসি, কেবল খুব দরিদ্র। যদি আপনি গণনার রেফারেন্সটি "ভাগ করে নেওয়া মালিকানা" গ্রহণ করেন তবে দয়া করে এটি বলুন তবে চক্র সম্পর্কে আলোচনাটি আমনের উত্তরের মন্তব্যে রাখুন। আমিও নিশ্চিত নই যে রেফ গণনা অপ্রয়োজনীয় অর্থে ডিটারমিনিস্টিক কিনা বা (আগ্রহী চক্রগুলি যত তাড়াতাড়ি সম্ভব মুক্তি দেওয়া হয়, তবে প্রোগ্রামটি দেখে আপনি কখনই তা বলতে পারবেন না)। তদুপরি, প্রত্যেকের জন্য রেফ গণনা একটি আধুনিক ট্রেসিং জিসির চেয়ে ধীর এবং ধীর er

16
usingআরআইআইয়ের সাথে তুলনা করা একটি রসিকতা, ঠিক তাই আপনি জানেন।
ডেডএমজি

3
@ ফিলিপস দয়া করে "মর্যাদাবান" জন্য আপনার মেট্রিকটি বর্ণনা করুন। এটা সত্য যে ম্যানুয়াল মেমরি পরিচালনা পরিচালনার জন্য রান-টাইমে ম্যানুয়াল মেমরি পরিচালনা দ্রুত হয়। তবে একা মেমরি পরিচালনায় সিপিইউয়ের সময়টিতে সফ্টওয়্যারটির ব্যয়টি বিশুদ্ধভাবে বিচার করা যায় না।
আরটিস

2
@ আর্টস: আমি অগত্যা এটির সাথে একমত হব না। RAII প্রয়োজনীয়তার সাথে আসে যে কোনও বস্তুর সুযোগ ছাড়ার কারণে অবশ্যই তা ধ্বংস করা উচিত। একটি লুপ, তারপরে এন অবজেক্ট ধ্বংসের প্রয়োজন। একটি আধুনিক জেনারেল জিসির অধীনে লুপের শেষ না হওয়া পর্যন্ত বা তার পরেও এই ধ্বংসগুলি পিছিয়ে দেওয়া যেতে পারে এবং কয়েকশো স্মরণীয় মেমরির ধ্বংস করতে কেবল একটি অপারেশন করতে পারে। একজন জিসি করতে খুব খুব তার ভাল ক্ষেত্রেই দ্রুত।
ফোশি

14

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

আবর্জনা-সংগৃহীত ভাষাগুলি সরাসরি RAII ব্যবহার করতে পারে না , তবে প্রায়শই সমতুল্য প্রভাব সহ সিনট্যাক্স সরবরাহ করে। জাভাতে, আমাদের সাথে চেষ্টা-রিসোর্স স্টেটমেন্ট রয়েছে

try (BufferedReader br = new BufferedReader(new FileReader(path))) { ... }

যা স্বয়ংক্রিয়ভাবে .close()ব্লক প্রস্থান করার সময় উত্সটিতে কল করে। সি # এর IDisposableইন্টারফেস রয়েছে, যা .Dispose()একটি using (...) { ... }বিবৃতি রেখে যাওয়ার সময় ডাকে । পাইথনের withবিবৃতি রয়েছে:

with open(filename) as f:
    ...

যা একই ধরণের কাজ করে। এটির একটি আকর্ষণীয় স্পিনে, রুবির ফাইল ওপেন পদ্ধতিটি একটি কলব্যাক পায়। কলব্যাক কার্যকর হওয়ার পরে ফাইলটি বন্ধ হয়ে যায়।

File.open(name, mode) do |f|
    ...
end

আমার মনে হয় নোড.জেএস একই কৌশল ব্যবহার করে।


4
রিসোর্স ম্যানেজমেন্টের জন্য উচ্চতর অর্ডার ফাংশনগুলি ব্যবহার করা রুবির অনেক আগে থেকেই আসে। লিসপ্সে, এটি বলা খুব সাধারণ বিষয় with-open-filehandleযা বলা যায় যে ফাইলগুলি ওপেন করে তা কোনও ফাংশনে ফল দেয় এবং ফাংশন ফিরে আসার সাথে সাথে আবার ফাইলটি বন্ধ করে দেওয়া হয়।
জার্গ ডব্লু মিটাগ

4
চক্রীয় রেফারেন্স যুক্তিটি বেশ সাধারণ, তবে এটি কতটা গুরুত্বপূর্ণ? মালিকানা পরিষ্কার থাকলে দুর্বল পয়েন্টার ব্যবহার করে চক্রীয় রেফারেন্সগুলি হ্রাস করা যায়।
ফিলিপ

2
@ ফিলিপ যখন আপনি রেফ গণনা ব্যবহার করেন, মালিকানা সাধারণত পরিষ্কার হয় না । এছাড়াও, এই উত্তরটি সেই ভাষাগুলির বিষয়ে কথা বলে যা একচেটিয়াভাবে এবং স্বয়ংক্রিয়ভাবে গণনা ব্যবহার করে, তাই দুর্বল উল্লেখগুলি উপস্থিত নেই বা শক্তিশালী উল্লেখগুলির তুলনায় ব্যবহার করা বেশ শক্ত।

3
@ ফিলিপ সাইক্লিক ডেটা স্ট্রাকচারগুলি খুব বিরল, যদি না আপনি জটিল গ্রাফগুলির সাথে কাজ করছেন। দুর্বল পয়েন্টারগুলি একটি সাধারণ চক্রীয় বস্তু গ্রাফে সহায়তা করে না, যদিও তারা গাছের পিতামাত্ত পয়েন্টারগুলির মতো আরও সাধারণ ক্ষেত্রে সহায়তা করে। একটি ভাল কাজটি হ'ল একটি প্রসঙ্গ অবজেক্ট রাখা যা পুরো গ্রাফের রেফারেন্সকে উপস্থাপন করে এবং ধ্বংস পরিচালনা করে। রিফকাউন্টিং কোনও ডিলব্রেকার নয়, তবে এটির প্রয়োজন যে প্রোগ্রামার তার সীমাবদ্ধতা সম্পর্কে খুব সচেতন is অর্থাৎ এটির জিসির তুলনায় কিছুটা বেশি জ্ঞানীয় ব্যয় রয়েছে।
আমন

1
রেফ গণনা খুব কমই ব্যবহৃত হয় এর একটি গুরুত্বপূর্ণ কারণ হ'ল এটি সরলতা থাকা সত্ত্বেও এটি প্রায়শই জিসির চেয়ে ধীর হয়।
রাফলেউইন্ড

14

আমার মতে আবর্জনা সংগ্রহের সর্বাধিক দৃ advantage় বিশ্বাস হ'ল এটি যোজনীয়তার পক্ষে অনুমতি দেয় । স্মৃতি পরিচালনার সঠিকতা আবর্জনা সংগৃহীত পরিবেশের একটি স্থানীয় সম্পত্তি। আপনি প্রতিটি অংশ বিচ্ছিন্নভাবে তাকান এবং এটি মেমরি ফাঁস করতে পারে কিনা তা নির্ধারণ করতে পারেন। যেকোন সংখ্যক মেমরি-সঠিক অংশ একত্রিত করুন এবং সেগুলি সঠিক থাকে।

আপনি যখন রেফারেন্স গণনা উপর নির্ভর করেন আপনি সেই সম্পত্তিটি হারাবেন। আপনার অ্যাপ্লিকেশনটি মেমরি ফাঁস করতে পারে কিনা তা রেফারেন্স গণনা সহ পুরো অ্যাপ্লিকেশনটির একটি বৈশ্বিক সম্পত্তি হয়ে যায়। অংশগুলির মধ্যে প্রতিটি নতুন মিথস্ক্রিয়ায় ভুল মালিকানা ব্যবহার এবং মেমরি পরিচালনা ভাঙ্গার সম্ভাবনা থাকে।

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


1
নির্ভুলতা কেবল তখনই সামঞ্জস্যযোগ্য যদি অবজেক্টগুলি কেবল তাদের পক্ষে রেফারেন্স রাখে এবং সেই উল্লেখগুলির লক্ষ্যগুলির পক্ষে নয়। নোটিফিকেশনগুলির মতো জিনিসগুলি মিশ্রণে প্রবেশ করার পরে (বব জোয়ের একটি উল্লেখ রাখেন কারণ জো কিছু কিছু ঘটলে বব তাকে অবহিত করতে বলেছিলেন এবং বব তা করার প্রতিশ্রুতি দিয়েছিলেন, তবে বব অন্যথায় জোয়ের বিষয়ে চিন্তা করে না), জিসি নির্ভুলতার প্রায়শই স্কোপড রিসোর্স ম্যানেজমেন্টের প্রয়োজন হয় [অনেক ক্ষেত্রে ম্যানুয়ালি প্রয়োগ করা হয়েছে, যেহেতু জিসি সিস্টেমে সি ++ এর স্বয়ংক্রিয়তা নেই lack
সুপারক্যাট

@ সুপের্যাট: "জিসি নির্ভুলতার জন্য প্রায়শই স্কোপড রিসোর্স ম্যানেজমেন্টের প্রয়োজন হয়"। অঁ্যা? সুযোগটি কেবল উত্স কোডে বিদ্যমান থাকে এবং জিসি কেবল রান-টাইমে উপস্থিত থাকে (এবং তাই, সুযোগের অস্তিত্ব সম্পর্কে সম্পূর্ণ বিস্মৃত)।
জন হ্যারোপ

@ জোড়হরপ: আমি "স্কোপ" শব্দটি একই অর্থে সি ++ "স্কোপড পয়েন্টার" হিসাবে ব্যবহার করছিলাম [অবজেক্টের আজীবন এটি ধারক ধারণ করে রাখা উচিত], যেহেতু মূল প্রশ্নটি দ্বারা বোঝানো এই ব্যবহার। আমার বক্তব্যটি হ'ল অবজেক্টগুলি নিজের পক্ষে সম্ভাব্য দীর্ঘ-কালীন রেফারেন্স তৈরি করে যেমন ইভেন্টগুলি গ্রহণ করা বিশুদ্ধ-জিসি সিস্টেমে সংযোজিত হতে পারে না। নির্ভুলতার জন্য, নির্দিষ্ট উল্লেখগুলি শক্তিশালী হওয়া দরকার এবং নির্দিষ্ট উল্লেখগুলি দুর্বল হওয়া দরকার এবং কোন রেফারেন্স হওয়া দরকার যা কোন বস্তুর কীভাবে ব্যবহৃত হয় তার উপর নির্ভর করবে। উদাহরণস্বরূপ ...
সুপারক্যাট

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

@ সুপের্যাট: ঠিক আছে। আমি বলব না যে এটি "প্রায়শই" ঘটে থাকে। আমি 30 বছরের প্রোগ্রামিংয়ের মধ্যে কেবল একবার এটি পেরিয়ে এসেছি।
জন হ্যারোপ

7

বন্ধ সমস্ত আধুনিক ভাষার এক অপরিহার্য বৈশিষ্ট্য। এগুলি জিসির সাথে কার্যকর করা খুব সহজ এবং খুব শক্ত (যদিও অসম্ভব নয়) এর সাথে আরএআইআইয়ের সাথে সঠিক ধারণা পাওয়া যায়, যেহেতু তাদের অন্যতম প্রধান বৈশিষ্ট্য হ'ল তারা আপনাকে আপনার ভেরিয়েবলগুলির আজীবন বিমূর্ত করার অনুমতি দেয়!

সি ++ এগুলি কেবল অন্য প্রত্যেকের 40 বছর পরে পেয়েছিল এবং তাদের সঠিক করে তুলতে প্রচুর স্মার্ট লোকেরা প্রচুর পরিশ্রম করেছিল। বিপরীতে, প্রোগ্রামিং ভাষাগুলি ডিজাইনিং এবং প্রয়োগের ক্ষেত্রে শূন্য জ্ঞানের লোকেদের দ্বারা ডিজাইন করা এবং প্রয়োগ করা অনেকগুলি স্ক্রিপ্টিং ভাষা রয়েছে।


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

আমি ডেলানানের সাথে একমত: সি ++ ক্লোজারগুলি সঠিকভাবে পায় নি: আপনি যখন অনুরোধ করবেন তখন আপনি কোনও কোর ডাম্প পেতে না চাইলে আপনাকে খুব সাবধানে প্রোগ্রাম করতে হবে।
জর্জিও

2
@ ডেলান: ক্যাপচার-বাই-রেফারেন্স ল্যাম্বদার খুব ইচ্ছাকৃতভাবে সেই [&]বাক্য গঠন রয়েছে। যে কোনও সি ++ প্রোগ্রামার ইতিমধ্যে &রেফারেন্সগুলির সাথে সাইনটি সংযুক্ত করে এবং বাসি রেফারেন্স সম্পর্কে জানে।
এমসাল্টাররা

2
@ সলটার্স আপনার বক্তব্য কি? আমি নিজেই রেফারেন্স সংযোগ আঁকছি। আমি বলিনি যে সি ++ ল্যাম্বডাস ব্যতিক্রমীভাবে অনিরাপদ, আমি বলেছিলাম যে তারা রেফারেন্সের মতো ঠিক অনিরাপদ। আমি যুক্তি দিয়েছিলাম না যে সি ++ ল্যাম্বডাস খারাপ, আমি এই উত্তরের দাবির বিরুদ্ধে যুক্তি দিয়েছিলাম (যে সি ++ খুব দেরি হয়ে গেছে কারণ তারা কীভাবে এটি সঠিকভাবে করতে হবে তা নির্ধারণ করতে হয়েছিল)।

5
  1. এসবিএমএম প্রোগ্রামগুলিকে আরও নিরঙ্কুশ করে তোলে (কোনও বস্তু ধ্বংস হওয়ার পরে আপনি ঠিক বলতে পারেন);

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

  1. যে ভাষাগুলি জিসি ব্যবহার করে সেগুলিতে আপনাকে প্রায়শই ম্যানুয়াল রিসোর্স ম্যানেজমেন্ট করতে হয় (উদাহরণস্বরূপ জাভাতে ফাইলগুলি বন্ধ করার পদ্ধতি দেখুন), যা আংশিকভাবে জিসির উদ্দেশ্যকে পরাস্ত করে এবং ত্রুটিযুক্ত প্রবণও হয়;

দেখুন usingসি # এবং useএফ # হবে।

  1. হিপ মেমরিটি (খুব মার্জিতভাবে, ইমো) স্কোপ-বেঁধেও হতে পারে (স্ট্যান্ডার্ড :: সি ++ তে শেয়ার্ড_পিটার)।

অন্য কথায়, আপনি গাদাটি নিতে পারেন যা একটি সাধারণ উদ্দেশ্য সমাধান এবং এটি কেবলমাত্র নির্দিষ্ট ক্ষেত্রে কার্যকরভাবে পরিবর্তন করতে পারে যা গুরুতরভাবে সীমাবদ্ধ is এটি অবশ্যই সত্য, তবে অকেজো।

এসবিএমএম কেন বেশি ব্যবহৃত হয় না? এর অসুবিধাগুলি কী কী?

আপনি যা করতে পারেন তা এসবিএমএম সীমাবদ্ধ করে:

  1. এসবিএমএম প্রথম শ্রেণীর লেক্সিকাল ক্লোজারগুলির সাথে wardর্ধ্বমুখী ছত্রাকজনিত সমস্যা তৈরি করে যার কারণেই ক্লোজারগুলি সি # এর মতো ভাষায় জনপ্রিয় এবং সহজ তবে সি ++ এ বিরল এবং কৃপণ। নোট করুন যে প্রোগ্রামিংয়ে ফাংশনাল কনস্ট্রাক্টসের ব্যবহারের দিকে একটি সাধারণ প্রবণতা রয়েছে।

  2. এসবিএমএম-এর জন্য ডেস্ট্রাক্টর প্রয়োজন এবং কোনও ফাংশন ফিরে আসার আগে আরও কাজ যুক্ত করে লেজ কলগুলিতে তারা বাধা দেয়। টেইল কলগুলি এক্সটেনসিবল স্টেট মেশিনগুলির জন্য দরকারী এবং। নেট এর মতো জিনিসগুলি সরবরাহ করে।

  3. কিছু ডেটা স্ট্রাকচার এবং অ্যালগরিদম এসবিএমএম ব্যবহার করে বাস্তবায়ন করা কুখ্যাতভাবে কঠিন। মূলত যে কোনও জায়গায় যে চক্র প্রাকৃতিকভাবে ঘটছে। সর্বাধিক উল্লেখযোগ্যভাবে গ্রাফ অ্যালগরিদম। আপনি কার্যকরভাবে আপনার নিজের জিসি লেখা শেষ।

  4. সাম্প্রতিক প্রোগ্রামিং কঠোর কারণ নিয়ন্ত্রণ প্রবাহ এবং সুতরাং, অবজেক্টের লাইফটাইমগুলি সহজাতভাবে এখানে অ-সংজ্ঞাবাদী। মেসেজ পাসিং সিস্টেমে ব্যবহারিক সমাধানগুলি বার্তাগুলির গভীর অনুলিপি এবং অত্যধিক দীর্ঘকালীন জীবনকাল ব্যবহার করে tend

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

এসবিএমএম এতটাই সীমিত করে দিচ্ছে যে প্রোগ্রামারদের এমন পরিস্থিতিতে পালানোর পথের প্রয়োজন যেখানে আজীবন বাসা বাঁধতে পারে না। সি ++ এ, shared_ptrএকটি পালানোর রুট সরবরাহ করে তবে এটি আবর্জনা সংগ্রহের ট্রেসিংয়ের চেয়ে 10x ডলার কম হতে পারে । সুতরাং সিসির পরিবর্তে এসবিএমএম ব্যবহার করা বেশিরভাগ সময় বেশিরভাগ লোককে ভুল পায়ে ফেলে। এটি অবশ্য বলা যায় না যে এটি অকেজো। এসবিএমএম সিস্টেম এবং এমবেডেড প্রোগ্রামিংয়ের প্রসঙ্গে যেখানে সংস্থানগুলি সীমাবদ্ধ তা এখনও মূল্যবান।

এফডব্লিউআইডাব্লু আপনি ফোরথ এবং অ্যাডাকে খুঁজে বার করতে এবং নিকোলাস উইথের কাজটি পড়তে পছন্দ করতে পারেন।


1
আপনি যদি বলেন তবে কোন বিটগুলি আমি নিবন্ধগুলি বিশদভাবে বা উদ্ধৃত করতে সক্ষম হব।
জন হ্যারোপ

2
সমস্ত ব্যবহারের ক্ষেত্রে সর্বব্যাপী হওয়ার বিপরীতে কয়েকটি বিরল ব্যবহারের ক্ষেত্রে 10x ধীর হওয়া কতটা প্রাসঙ্গিক? সি ++ এর ইউনিক_পিটার রয়েছে এবং বেশিরভাগ কারণে এটি পর্যাপ্ত। এর পরে, আরআইআই ট্রিটকে আক্রমণ করার পরিবর্তে সি ++ (এমন একটি ভাষা যা অনেকে প্রত্নতাত্ত্বিক ভাষা হওয়ার জন্য ঘৃণা করতে পছন্দ করেন), আপনি যদি কোনও ভাষার উপর আক্রমণ করে RAII ট্রাইতে আক্রমণ করতে চলেছেন, উদাহরণস্বরূপ, রাস্ট পরিবারের একটি ছোট ভাইবোন চেষ্টা করুন। মরিচা মূলত সি ++ ভুল হয়ে গেছে এমন সব কিছু পায় যখন বেশিরভাগ জিনিস ঠিক হয়ে যায় যে সি ++ ঠিক ঠিক পেয়েছে। আরও 'ব্যবহার' আপনাকে ব্যবহারের ক্ষেত্রে খুব সীমিত সেট দেয় এবং রচনাটিকে উপেক্ষা করে।
ব্যবহারকারী1703394

2
"সমস্ত ব্যবহারের ক্ষেত্রে সর্বব্যাপী হওয়ার বিপরীতে কয়েকটি বিরল ব্যবহারের ক্ষেত্রে 10x ধীর হওয়া কতটা প্রাসঙ্গিক?" প্রথমত, এটি একটি বিজ্ঞপ্তি যুক্তি: shared_ptrকেবলমাত্র C ++ এ বিরল কারণ এটি খুব ধীর। দ্বিতীয়ত, এটি একটি আপেল এবং কমলা তুলনা (যেমন নিবন্ধটি ইতিমধ্যে দেখানো হয়েছে) কারণ shared_ptrএকটি উত্পাদন জিসির তুলনায় অনেকগুণ ধীর। তৃতীয়ত, জিসিগুলি সর্বব্যাপী নয় এবং এলএমএক্স এবং র‌্যাপিড অ্যাডিশনের ফিক্স ইঞ্জিনের মতো সফ্টওয়্যারগুলিতে এড়ানো হয়।
জন হ্যারোপ

1
@ জোন হ্যারোপ, আপনি যদি না হন তবে আমাকে আলোকিত করুন। গভীর সংস্থান ব্যবহারের ট্রানজিটিভ প্রভাবগুলি প্রশমিত করতে আপনি 30+ বছর ধরে এমন কোন জাদু রেসিপি ব্যবহার করেছেন? 30+ বছর পরে এই ধরণের যাদু রেসিপি ব্যতীত আমি কেবলমাত্র এই সিদ্ধান্তে পৌঁছাতে পারি যে আপনাকে অন্য কারণে এটির দ্বারা দংশিত করার জন্য নিশ্চয়ই অপব্যবহার করা উচিত।
ব্যবহারকারী1703394

1
@ জোন হ্যারোপ, শেয়ার্ড_পিটারটি বিরল নয় কারণ একটি ধীরে ধীরে ডিজাইন করা সিস্টেমে 'ভাগ করে নেওয়া মালিকানার' প্রয়োজন বিরল বলেই এর ধীর, বিরল।
ব্যবহারকারী1703394

4

টিআইওবি (যা অবশ্যই তর্কযোগ্য, তবে আমি আপনার ধরণের প্রশ্নটি সঠিকভাবে ব্যবহার করার জন্য অনুমান করি) এর মতো কয়েকটি জনপ্রিয়তার সূচকে দেখে, আপনি প্রথমে দেখতে পাবেন যে শীর্ষ 20 এর 50% "" স্ক্রিপ্টিং ভাষা "বা" এসকিউএল উপভাষা " ", যেখানে" ব্যবহারের স্বাচ্ছন্দ্য "এবং বিমূর্তকরণের উপায়গুলি নির্মাতামূলক আচরণের চেয়ে অনেক বেশি গুরুত্ব দেয়। বাকী "সংকলিত" ভাষা থেকে, এসবিএমএম সহ প্রায় 50% ভাষা এবং ~ 50% ছাড়াই রয়েছে। সুতরাং আপনার হিসাবের বাইরে স্ক্রিপ্টিং ভাষাগুলি নেওয়ার সময়, আমি বলব আপনার অনুমানটি ঠিক ভুল, সংকলিত ভাষাগুলির মধ্যে এসবিএমএমযুক্ত ভাষাগুলি যেমন ভাষাগুলি রয়েছে তেমন জনপ্রিয়।


1
"ব্যবহারের স্বাচ্ছন্দ্য" কীভাবে নির্ধারণ থেকে আলাদা? একটি নির্বিচারবাদী ভাষার চেয়ে কোনও ডিটারমিনিস্টিক ভাষা ব্যবহার করা সহজ বলে বিবেচনা করা উচিত নয়?
ফিলিপ

2
@ ফিলিপাইস কেবলমাত্র যে জিনিসটি নির্বিচারে বা মূলত গুরুত্বপূর্ণ তা নয়। অবজেক্ট লাইফ টাইম তার নিজের মতো করে আসে না (যদিও সি ++ এবং বন্ধুরা অনেকগুলি জিনিস বেঁধে দেয় যা জীবনের সময়কে আপত্তি জানায়, কারণ তারা পারে)। যখন কোনও অ্যাক্সেসযোগ্য অবজেক্টটি মুক্ত হয় তখন কিছু যায় আসে না কারণ সংজ্ঞা অনুসারে আপনি এটিকে আর ব্যবহার করছেন না।

আরও একটি বিষয়, পার্ল এবং পাইথনের মতো বিভিন্ন "স্ক্রিপ্টিং ভাষা" এছাড়াও রেফারেন্স গণনাটিকে মেমরি পরিচালনার জন্য প্রাথমিক মাধ্যম হিসাবে ব্যবহার করে।
ফিলিপ

1
@ ফিলিপ কমপক্ষে পাইথন বিশ্বে এটি সিপিথনের প্রয়োগের বিশদ হিসাবে বিবেচিত হয়, এটি ভাষার কোনও সম্পত্তি নয় (এবং কার্যত প্রতিটি বাস্তবায়নই পুনরায় গণনা রোধ করে)। তদুপরি, আমি যুক্তি দিয়ে বলব যে ব্যাকআপ চক্র জিসির সাথে ক্যাচ-অল-অপ্ট-আউট রেফারেন্স গণনা এসবিএমএম বা আরআইআই হিসাবে যোগ্যতা অর্জন করে না। প্রকৃতপক্ষে, আপনাকে এই ধরণের মেমরি পরিচালনার রাইআরআইয়ের সাথে তুলনা করার মতো রাইআইআই প্রবক্তাদের সন্ধান করতে কঠোর চাপ দেওয়া হবে (বেশিরভাগ কারণ এটি তা নয়, চক্রটি কোথাও প্রোগ্রামের অন্য কোথাও প্রম্পট অবলম্বনকে রোধ করতে পারে)।

3

একটি জিসি সিস্টেমের একটি প্রধান সুবিধা যা এখনও কেউ উল্লেখ করেনি তা হ'ল একটি জিসি সিস্টেমে একটি রেফারেন্স যতক্ষণ না বিদ্যমান রয়েছে তার পরিচয় ধরে রাখার নিশ্চয়তা দেওয়া হচ্ছে । যদি রেফারেন্সের অনুলিপিগুলি উপস্থিত থাকার সময় কোনও বস্তুতে একটি IDisposable.Dispose(.NET) বা AutoCloseable.Close(জাভা) কল করে, সেই অনুলিপিগুলি একই অবজেক্টটিকে উল্লেখ করতে থাকবে। অবজেক্টটি আর কোনও কিছুর জন্য কার্যকর হবে না তবে এটি ব্যবহারের চেষ্টাতে বস্তুর দ্বারা নিয়ন্ত্রিত ভবিষ্যদ্বাণীপূর্ণ আচরণ থাকবে। বিপরীতে, সি ++ এর মধ্যে, কোড যদি deleteকোনও বস্তুতে কল করে এবং পরে এটি ব্যবহার করার চেষ্টা করে তবে সিস্টেমটির পুরো অবস্থা সম্পূর্ণ অপরিজ্ঞাত হয়ে যায়।

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


4
আপনি প্রথমার্ধে যে সম্পত্তিটি উল্লেখ করেন তা হ'ল মেমরির সুরক্ষা। মেমরির সুরক্ষা অর্জনের জন্য একটি জিসি হ'ল একটি খুব সহজ উপায়, একটি জিসি প্রয়োজন হয় না: একটি সুনির্দিষ্ট উদাহরণের জন্য মরিচা দেখুন at

@ ডেলানান: আমি যখন মরিচা-আংটি.আর.আরজি দেখি তখন আমার ব্রাউজারটি সেখান থেকে কার্যকরভাবে নেভিগেট করতে পারে না বলে মনে হয়; আমি আরও তথ্যের জন্য কোথায় খুঁজব? আমার ধারণাটি হ'ল জিসিবিহীন মেমরির সুরক্ষা ডেটা স্ট্রাকচারের উপর কিছু নির্দিষ্ট বিধিনিষেধ আরোপ করে যা কোনও অ্যাপ্লিকেশনের প্রয়োজন হতে পারে এমন সমস্ত জিনিসের সাথে সঠিকভাবে খাপ খায় না, তবে আমি ভুল প্রমাণিত হতে পেরে খুশি হব।
সুপারক্যাট

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

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

1
আমি মনে করি না যে স্ট্যাক এক্সচেঞ্জের মন্তব্যগুলি কোনও ভাষার মাধ্যমে ট্যুর দেওয়ার সঠিক মাধ্যম। আপনি যদি এখনও আগ্রহী হন তবে আপনি সোজা সোর্সটিতে যেতে পারেন (# রাস্ট আইআরসি, মরিচা-মেলিং তালিকা ইত্যাদি) এবং / অথবা আমাকে একটি চ্যাট রুমে আঘাত করতে পারেন (আপনার একটি তৈরি করতে সক্ষম হওয়া উচিত)।

-2

প্রথমত, এটি উপলব্ধি করা অত্যন্ত গুরুত্বপূর্ণ যে এসআইএমএম-এর সাথে আরআইআইয়ের সমান। এমনকি এসবিআরএম থেকেও। আরআইআইয়ের একটি অতি প্রয়োজনীয় (এবং স্বল্প পরিচিত বা সর্বাধিক প্রশংসিত) গুণাবলির মধ্যে একটি এটি 'সম্পদ হওয়া' এমন একটি সম্পত্তি হিসাবে তৈরি করে যা রচনায় রূপান্তরিত হয় না।

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

http://minorfs.wordpress.com/2011/04/29/why-garbage-collection-is-anti-productive/

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


1
-1 এটি আমার মধ্যে পড়া সবচেয়ে খারাপ নিবন্ধগুলির মধ্যে একটি।
জন হ্যারোপ

1
ভাষাগুলিতে সমস্যাটি এমন নয় যে তারা জিসিকে সমর্থন করে, তবে তারা আরএআইআই ত্যাগ করে। কোনও ভাষা / কাঠামো উভয়কেই সমর্থন করতে সক্ষম না হওয়ার কোনও কারণ নেই।
সুপারক্যাট

1
@ জোন হ্যারোপ, আপনি কি আরও বিস্তারিত জানাতে পারেন? নিবন্ধে দাবি করা দাবির মধ্যে, এমন কি প্রথম 3 টি দাবির মধ্যে একটিও আছে যা ধারণ করে না? আমি মনে করি আপনি উত্পাদনশীলতার দাবিতে দ্বিমত পোষণ করতে পারেন, তবে অন্যান্য 3 টি দাবী একেবারেই বৈধ। সর্বাধিক গুরুত্বপূর্ণভাবে একটি সংস্থান হিসাবে সংক্রমণ সম্পর্কে প্রথম এক।
ব্যবহারকারী1703394

2
@ ব্যবহারকারী1703394: প্রথমত, পুরো নিবন্ধটি স্ট্রোম্যান "জিসিড ভাষা" এর আশেপাশে তৈরি করা হয় যখন বাস্তবে, আবর্জনা সংগ্রহের সাথে এর কিছুই করার থাকে না। দ্বিতীয়ত, তিনি আবর্জনা সংগ্রহকে দোষারোপ করেন যখন বাস্তবে, ত্রুটিগুলি অবজেক্ট অরিয়েন্টেড প্রোগ্রামিংয়ের সাথে থাকে। অবশেষে, তার যুক্তি 10 বছর খুব দেরী। ইতিমধ্যে বিপুল পরিমাণ প্রোগ্রামার জঞ্জাল সংগ্রহের জন্য আধুনিকীকরণ করেছেন ভাষাগুলি অবিকলভাবে কারণ তারা অনেক বেশি উত্পাদনশীলতা সরবরাহ করে।
জন হ্যারোপ 0

1
তার কংক্রিটের উদাহরণগুলি (র‌্যাম, ওপেন ফাইল হ্যান্ডলগুলি, লকগুলি, থ্রেডগুলি) বেশ বলছে। আমি শেষবারের মতো আমাকে কোডটি লিখতে হয়েছিল যেগুলি যে কোনওটির সাথে সরাসরি আচরণ করেছিল বলে মনে করতে খুব চাপ দিয়েছি। র‌্যামের সাহায্যে, জিসি সবকিছু স্বয়ংক্রিয় করে দেয়। ফাইল হ্যান্ডলগুলি দিয়ে আমি কোড লিখি File.ReadLines file |> Seq.lengthযেখানে বিমূর্ততা আমার জন্য বন্ধ হয়ে যায়। আমি নেট Taskএবং এফ # দিয়ে প্রতিস্থাপন করেছি লক এবং থ্রেড MailboxProcessor। এই পুরো "আমরা ম্যানুয়াল রিসোর্স ম্যানেজমেন্টের পরিমাণটি বিস্ফোরিত করেছি" কেবল সম্পূর্ণ বোকা।
জন হ্যারোপ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.