প্রোগ্রামিংয়ে পরিচালনা বা নিয়ন্ত্রণহীন কোড কী?


150

আমি আমার সি # কোডে একটি নির্দিষ্ট কমান্ড ব্যবহার করছি, যা ভালভাবে কাজ করে। তবে এটি "নিয়ন্ত্রণহীন" কোডে দুর্ব্যবহার করার কথা বলা হয়েছে।

পরিচালনা বা পরিচালনা না করা কোড কী?


উত্তর:


75

এমএসডিএন থেকে নিয়ন্ত্রিত কোড সম্পর্কে কিছু লেখা এখানে ।

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

পরিচালিত কোড সম্পর্কে আরও কিছু প্রশংসামূলক ব্যাখ্যা এখানে দেওয়া হয়েছে:

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

আপনার সমস্যার জন্য:

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


12
আমি আপনার উত্তরের চেষ্টা চেষ্টা প্রশংসা করি। তবে যে লোকেরা "পরিচালিত কোড" কী তা জানেন না তারা আপনার উত্তরে যা বোঝায় তা নিয়ে লড়াই করতে চলেছে: তারা জানতে পারবে না: "লাইব্রেরি কোড", "পরিচালনা না করা কোড", "নেটিভ কোড এপিআই", সিএলআর, নেট ফ্রেমওয়ার্কের ভিত্তি, আইএল,
সি এল এল

200

এই বিষয় সম্পর্কে একটি ভাল নিবন্ধ।

সংক্ষেপ,

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

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

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

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

  1. নেটিভ কোড প্রায়শই অব্যবস্থাপিত সমার্থক, তবে অভিন্ন নয়।

আপনার অর্থ হ্যাকিংয়ে আমরা। নেট ল্যাঙ্গেজ (সি #, সি ++) ব্যবহার করতে পারি না, তাই না?
হারুন এ।

7
@ এইচ_ওয়ার্ডক আপনি 'হ্যাকিং' হিসাবে কোনটি সংজ্ঞায়িত করেন? এটি একটি খুব সাধারণ শব্দ, এটি নওরাডে হ্যাক করা এবং কিছু রেজিস্টার হ্যাক করা সমান বলে like
অ্যালেক্স

7
আমাকে একবার সাক্ষাত্কারকারীর কাছে জিজ্ঞাসা করা হয়েছে, আমরা কি সি # তে অব্যবহৃত কোড চালাতে / লিখতে পারি? এটাতে কেউ সাহায্য করতে পারবে?
আরএসবি

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

67

যখন আপনি মনে অপরিচালিত মনে মেশিন-নির্দিষ্ট, মেশিন-স্তরের কোড। X86 সমাবেশ ভাষার মতো। অব্যবহৃত (নেটিভ) কোডটি সংকলনযুক্ত এবং প্রসেসরের জন্য চালানোর জন্য এটি সংযুক্ত করা হয় যার জন্য এটি তৈরি করা হয়েছিল, মুহুর্তের জন্য সমস্ত ওএস স্টাফ বাদ দিয়ে। এটি পোর্টেবল নয়, তবে এটি দ্রুত। খুব সহজ, ডাউন স্ট্রিপ কোড।

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

পরিচালিত ভেরিয়েবল থেকে রূপান্তর করতে, বলুন, একটি পরিচালনা না করে রাখাতে, আপনাকে আসল অবজেক্টে পৌঁছাতে হবে। এটি সম্ভবত কিছু অতিরিক্ত প্যাকেজিংয়ে মোড়ানো বা বক্স করা হয়েছে। 32 বিট মেশিনে অব্যবহৃত পরিচালিত ভেরিয়েবল (যেমন একটি 'ইনট', বলুন) - 4 বাইট লাগে। কোনও ওভারহেড বা অতিরিক্ত প্যাকেজিং নেই। পরিচালনা করা থেকে পরিচালনা না করা কোডে যাওয়ার প্রক্রিয়া - এবং আবার ফিরে - তাকে " মার্শালিং " বলে। এটি আপনার প্রোগ্রামগুলি সীমানা অতিক্রম করার অনুমতি দেয়।


1
তাহলে ম্যাসেলিং কীভাবে মান এবং রেফারেন্সের সাথে ইন্টারেক্ট করে? আমি উদাহরণস্বরূপ মার্শালবাইরফঅবজেক্ট সম্পর্কে কিছু মনে করি।
কাইল বারান

24

যতটা সম্ভব কথায় কথায়:

  • পরিচালিত কোড =। নেট প্রোগ্রাম
  • নিয়ন্ত্রণহীন কোড = "সাধারণ" প্রোগ্রাম

16
একটি। নেট প্রোগ্রাম "সাধারণ" নয়?
jtate

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

5

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

অন্যদিকে, অপরিচালিত কোড সোজা মেশিন কোডে প্রনয়ন। এটি সিএলআর দ্বারা পরিচালনা করে না।


4

মূলত অপরিকল্পিত কোড হ'ল এমন কোড যা। নেট সিএলআর এর অধীনে চলে না (ওরফে ভিবি.এনইটি, সি # ইত্যাদি নয়)। আমার অনুমান যে NUnit এর একটি রানার / র‌্যাপার রয়েছে যা নেট কোড (ওরফে সি ++) নয়।


4

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

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

তথ্যসূত্র: http://www.dotnetspider.com/forum/11612-differences-between-managed-and-unageaged-code.aspx


3

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


2

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


1

পরিচালিত কোড: - এমএসআইএল (অন্তর্বর্তী ভাষা) ফর্মটি ভাষা সংকলক সংকলনের পরে তৈরি করা হয় এবং সরাসরি সম্পাদন করে CLR ডেকে আনে পরিচালিত কোড । যেমন: - সমস্ত 61 ভাষা কোড। নেট ফ্রেমওয়ার্ক দ্বারা সমর্থিত

নিয়ন্ত্রণহীন কোড: - .netএমএসআইএল ফর্ম উপলভ্য নয় এমন কোড আগে তৈরি হয়েছিল এবং এটি CLRসরাসরি পরিবর্তে কার্যকর করা হয়CLR পরিচালিত হয়ে অপারেটিং সিস্টেমে পুনর্নির্দেশিত হবে কোড হিসাবে পরিচিত।

যেমন: -কম, উইন 32 এপিআই


এই পোস্টে অনেক ভুল আছে। স্পষ্টতই এমআইএসএল (আপনার অর্থ এমএসআইএল)।
ম্যাট সিমুর

1
  • পরিচালিত কোড: C #, VB.NET এর মতো .NET ভাষায় লিখিত কোড।
  • ম্যানেজড কোড: কোড নেট লিখিত নেই। নেট ভাষা এবং এমএসআইএল এটি কী তা বুঝতে পারে না এবং সিএলআরের অধীনে চলতে পারে না; তৃতীয় পক্ষের নিয়ন্ত্রণগুলির মতো আমরা আমাদের .NET অ্যাপ্লিকেশনগুলিতে ব্যবহার করি যা .NET ভাষায় তৈরি হয় না।

0

সবার আগে এটি বোঝার আগে .NET framework, Microsoftস্ট্যান্ড-একল পণ্যগুলি সরবরাহ করা MFC (Visual C++), VB, FoxProইত্যাদি etc.

২০০২ সালে, মাইক্রোসফ্ট তার পণ্যগুলি সংযুক্ত করে এবং নেট ফ্রেমওয়ার্ক তৈরি করে। এখন কোডটি কীভাবে আগে কার্যকর করা হয়েছিল এবং কীভাবে .NET ফ্রেমওয়ার্কে কোড পরিচালনা ও কার্যকর করা হয় তার মধ্যে পার্থক্য রয়েছে। মাইক্রোসফ্ট CLR.NET ফ্রেমওয়ার্কের সাথে ধারণাটি প্রবর্তন করে যা .NET ফ্রেমওয়ার্কের কোনও সমর্থিত ল্যানুগ থেকে কোড সংকলন করে এবং memory mangement, garbage collectionইত্যাদির মতো অতিরিক্ত কার্যকারিতা সরবরাহ করে তবে এ জাতীয় সিএলআর বৈশিষ্ট্যগুলি সরাসরি আগে উপলভ্য ছিল না।

সুতরাং যদি আপনি .NET ফ্রেমওয়ার্কে লাইব্রেরি / কোড তৈরি করে থাকেন (সিএলআরের সাথে সংকলিত) তবে তাকে বলা হয় Managed code। আপনি এই লাইব্রেরিটি আরও NET অ্যাপ্লিকেশন / প্রকল্পে আরও ব্যবহার করতে পারেন এবং সেখানেও, সিএলআর বুঝতে পারে এটি কীভাবে আগে সংকলিত হয়েছিল এবং সে কারণেই এটি আপনার পরিচালিত কোড হিসাবে রয়ে গেছে।

OTOH আপনি যদি .NET কাঠামোর আগে লেখা লাইব্রেরিগুলি ব্যবহার করতে চান তবে আপনি নির্দিষ্ট সীমাবদ্ধতাগুলি সহ করতে পারেন তবে মনে রাখবেন যেহেতু সে সময় সিএলআর সেখানে ছিল না, এখন, সিএলআর আবার এই কোডটি বুঝতে এবং সংকলন করবে না । এবং এই বলা হবে unmanaged code। দয়া করে নোট করুন, কিছু বৈশিষ্ট্য / সরঞ্জাম সরবরাহ করতে কিছু তৃতীয় পক্ষ দ্বারা নির্মিত লাইব্রেরি / অ্যাসেমবিলিগুলি সিএলআর কম্পটিব্লি না হলে পরিচালনা ব্যবস্থা হিসাবে বিবেচিত হতে পারে।

সাধারণ শর্তে, ম্যানেজ কোড হ'ল এমন একটি জিনিস যা আপনার সিএলআর বুঝতে পারে এবং আরও কার্যকর করার জন্য এটি নিজেই এটি সংকলন করতে পারে। .NET ফ্রেমওয়ার্কে (কোনও ভাষা থেকে এটি .NET ফ্রেমওয়ার্কে কাজ করে) কোড সিএলআর এ যায় তখন কোড কিছু মেটা ডেটা তথ্য সরবরাহ করে, যাতে সিএলআর আপনাকে এখানে নির্দিষ্ট বৈশিষ্ট্য সরবরাহ করতে পারে । এর মধ্যে কয়েকটি হ'ল Garbage collection, Performance improvements, cross-language integration, memory managementইত্যাদি are

OTOH , পরিচালনাবিহীন কোডটি মেশিনের সাথে নির্দিষ্ট কিছু এবং ব্যবহারের জন্য প্রস্তুত, এটি আরও প্রক্রিয়া করার প্রয়োজন নেই।


প্রচুর এবং প্রচুর অজানা মতামত, আমি ভয় করি। এটি একটি আশ্চর্য হিসাবে আসতে পারে, তবে সিএলআর নিয়ন্ত্রণহীন কোড (সাধারণত সি ++ / সিএমআইতে লেখা) চালিয়ে দিতে পারে। আইএল হিসাবে ম্যানেজড কোডটি উপলভ্য হওয়ার জন্য কোনও প্রয়োজন নেই। .NET নেটিভ কিছু সময়ের জন্য প্রায় হয়েছে, এবং এটি প্রাক-সংকলিত সমাবেশগুলির সাথে আসে। আপনি "সিএলআর সামঞ্জস্যপূর্ণ" বলেছিলেন সম্ভবত এটি "সিএলএস অনুবর্তী" হতে পারে । সিএলএস সম্মতি পূরণে ব্যর্থতা হঠাৎ হঠাৎ পরিচালিত কোডটিকে নিয়ন্ত্রণহীন করে তোলে না। আপনার বিবরণ সত্ত্বেও - পরিচালনা না করা কোড গ্রহণ করাও বেশ সহজ (সিওএম, পি / ইনভোক, সি ++ / সিএলআই ইত্যাদির উপর আরসিডাব্লু)।
IInspectable

0

প্রো সি # 5 এবং .NET 4.5 ফ্রেমওয়ার্ক থেকে:

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

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