ম্যানুয়াল মেমরি পরিচালনা বা রানটাইম আবর্জনা সংগ্রহ ছাড়াই টাইপ-ভিত্তিক মেমরির সুরক্ষা?


13

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

স্থির মেমরির সুরক্ষা বা রানটাইম আবর্জনা সংগ্রহের প্রয়োজন নেই এমন স্থির মেমরির সুরক্ষার জন্য কী কী বিকল্প রয়েছে এবং হাস্কেল বা ইদ্রিসের মতো খাঁটি কার্যকরী টাইপের সিস্টেমটি ব্যবহার করে কীভাবে সমস্যাটি সমাধান করা যেতে পারে?


আপনি কি বলছেন যে আপনি ভাষার ধরণগুলি আবর্জনা সংগ্রহ এড়ানোর উপায় হিসাবে পরিবেশন করতে চান? ফাংশনগুলির মূল্যায়নে মূল সমস্যা দেখা দেয়। একটি ফাংশন একটি ক্লোজারে মূল্যায়ন করা হয়, যা বর্তমান রানটাইম পরিবেশকে আচ্ছন্ন করে। আবর্জনা সংগ্রহের মূল কারণ এটি the আপনি যদি ফাংশনগুলির জন্য টাইপিংয়ের নিয়মটি পরিবর্তন না করেন তবে আমি দেখতে পাচ্ছি না কীভাবে এর সাথে প্রকারগুলি সাহায্য করবে। জাভা এবং ভাঙ্গা সঙ্গে অন্যান্য ভাষায় বন্ধ গঠনের mutliating দ্বারা -abstractions পেতে এই aroudn তারা রেফারেন্স যে gabrage সংগ্রহ করতে হবে নামঞ্জুর। λ
আন্দ্রেজ বাউয়ার

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

মার্টিন হফম্যানের এলএফপিএল সম্পর্কে কী ? এটিতে একটি বিশেষ বেস টাইপ রয়েছে, "ডায়মন্ড", যার উপর ভিত্তি করে একটি রৈখিক ধরণের শৃঙ্খলা প্রয়োগ করা হয়, যাতে মেমরির ব্যবহারের জন্য মৌলিক মেমরির ব্যবহার (বরাদ্দ / বাতিলকরণ) হয় types আপনি যে দিকে কথা বলছেন সেদিকেই কি তা যাবে?
দামিয়ানো মাজাজা 22'18

উত্তর:


18

মোটামুটিভাবে বলতে গেলে, নিরাপদ ম্যানুয়াল মেমরি পরিচালনার জন্য দুটি মূল কৌশল রয়েছে।

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

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

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

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

    স্পষ্টতই, এফ-স্টার বা এইচটিটি উভয়ই রৈখিক-টাইপযুক্ত ভাষা নয়, তবে তাদের ম্যানডের জন্য সূচী ভাষা সাধারণত রেনল্ড এবং ও'হর্নের বিচ্ছেদ যুক্তির উপর ভিত্তি করে হয় , যা লিনিয়ার যুক্তি সম্পর্কিত একটি কাঠামোগত যুক্তি যা দুর্দান্ত সাফল্য দেখেছিল পয়েন্টার প্রোগ্রামগুলির জন্য হোয়ের লজিক্সের জন্য দৃ language় ভাষা।

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

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

এই সমস্ত পদ্ধতিরই কিছুটা মরিচাটির মতো "অনুভব" হবে, কারণ ভেরিয়েবলের ব্যবহারকে সীমাবদ্ধ রেখে মালিকানা ট্র্যাক করা তাদের সবার জন্য কী key


3

লিনিয়ার প্রকার এবং পৃথকীকরণ যুক্তি উভয়ই দুর্দান্ত, তবে বেশ কিছুটা প্রোগ্রামার প্রচেষ্টা প্রয়োজন হতে পারে। মরিচায় একটি নিরাপদ লিঙ্কযুক্ত তালিকাগুলি লেখা খুব কঠিন হতে পারে, উদাহরণস্বরূপ।

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

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

একটি সূচনা পয়েন্টের জন্য, আমি বলব ম্যাডস তোফ্টে এবং জিন-পিয়ের ট্যালপিনের "টাইপড কল-বাই-ভ্যালু Imp-ক্যালকুলাসের একটি স্ট্যাক অফ রিজিওনস ব্যবহার করে" পেপারের জন্য যান। অঞ্চল অনুমান সম্পর্কে আরও কাগজপত্রের জন্য, এম তোফ্টে এবং জে.পি.-এর অন্যান্য কাগজপত্র সন্ধান করুন ট্যালপিন, পিয়ের জুভেলোটের কিছু কাজ পাশাপাশি গ্রেগ মরিসেট, মাইক হিকস এবং ড্যান গ্রসম্যানের সাইক্লোন সম্পর্কিত সিরিজের কাগজপত্র।


-2

"বেয়ার মেটাল" সিস্টেমগুলির জন্য একটি তুচ্ছ স্কিমটি হ'ল সমস্ত রানটাইম মেমরির বরাদ্দকে কেবল অস্বীকার করা। মনে রাখবেন, এমনকি সি malloc/freeজোড়ের জন্য একটি রানটাইম লাইব্রেরি প্রয়োজন। সংকলনের সময় সমস্ত বস্তু সংজ্ঞায়িত করা হলেও, এগুলি টাইপসেফ উপায়ে সংজ্ঞায়িত করা যায়।

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

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

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