NET- এ সিআইএল এবং সিএলআর কেন দরকার?


11

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

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


3
কারণ সিআইএল-এ সংকলকগুলি লেখা আরও সহজ। এবং প্রতিটি ভাষাতে প্রতিটি ভাষার সংকলকের চেয়ে দেশীয় সংকলকটিতে একটি সিআইএল লেখা সহজ।
ওডে

9
@ratchetfreak: এটি অন্য প্ল্যাটফর্মগুলিতে সিএলআর পোর্ট না করার জন্য এমএসের একটি কারণ হতে পারে, তবে এটি প্রথম স্থানে সিএলআর থাকার কারণ নয় (যা আসলে কোনও বন্দরকে সহজ করে তোলে , তাই আপনার যুক্তিটি এমএসকে বাশ দেওয়ার মতো শোনাচ্ছে, দুঃখিত)
ডক ব্রাউন

12
'এম $' এর জন্য ডাউনওয়েট করুন, এটি কী, 1998?
অ্যালান বি

3
এরিক লিপার্ট এটি নিয়ে আলোচনা করেছেন (তৃতীয় অনুচ্ছেদে শুরু; প্রথম 2 অনুচ্ছেদটি রোজলিন সম্পর্কে)। সংক্ষিপ্ত উত্তরটি হ'ল ওজেদের মন্তব্য এবং তেলস্তিনের উত্তর সঠিক; আপনাকে কেবল <অপারেটিং সিস্টেমের সংখ্যা> + <অপারেটিং সিস্টেমের সংখ্যা> * <ভাষা সংখ্যা> সংকলকগুলির পরিবর্তে সংকলক কোডিং করতে হবে।
ব্রায়ান

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

উত্তর:


29

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

এর বাইরে, রানটাইম সিআইএলকে সংকলিত যে কোনও কিছুই পরিচালনা করতে পারে। আপনি যদি একটি নতুন ভাষা চান (যেমন F #) তবে আপনাকে কেবল এটির জন্য একটি সংকলক লিখতে হবে এবং আপনি স্বয়ংক্রিয়ভাবে যাদুতে সমস্ত জিনিসের জন্য প্ল্যাটফর্ম সমর্থন পাবেন N নেট সমর্থন করে।

ওহ, এবং আমি একটি নেট ডেল নিতে পারি এবং উইন্ডোতে বা লিনাক্সে মনো এর মাধ্যমে পুনঃসংশোধন ছাড়াই চালাতে পারি (আমার সমস্ত নির্ভরতা সন্তুষ্ট বলে ধরে নিই)।

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


"অনুবাদক" `? আমি ভেবেছিলাম সবসময় এমএস কেবল একটি জিটটার সরবরাহ করে?
ডক ব্রাউন

1
@ ডকব্রাউন - হ্যাঁ, হ্যাঁ - আমার পক্ষ থেকে ভুল ব্যবহারকারী। স্থাপন করা.
টেলাস্টিন

+1, আপনি আমার সম্পাদনার জন্য কিছুটা ব্যাখ্যা যোগ করতে পারেন যাতে আমি এই উত্তরটি গ্রহণ করতে পারি
বিকিকহ্যাকস

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

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

14

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

সুবিধাগুলি, যদিও .NET কেবল উইন্ডোজ প্ল্যাটফর্মগুলিতে সমর্থিত (বা অন্যান্য ওএসে, যার মধ্যে মনো / লিনাক্সের মতো .NET ওয়ার্কালাইক রয়েছে) জাভা সমান:

  • পরিচালিত মেমোরি রানটাইম - নিয়ন্ত্রণহীন সি / সি ++ এর বিপরীতে সি # / ভিবি.এনইটি বিকাশকারীদের অবজেক্টের আজীবন কঠোরভাবে নিয়ন্ত্রণ করার বিষয়ে চিন্তা করতে হবে না। জাভা এর মতো, সিএলআরতে একটি আবর্জনা সংগ্রহকারী রয়েছে যা স্বয়ংক্রিয়ভাবে ফাঁকা ফাঁকা বস্তুগুলিকে মুক্ত করে যে সুযোগ ছেড়ে দেয়। যদিও এটি পরিচালনাহীন রানটাইমগুলির জন্য ব্যবহৃত কারও কাছে অপ্রাপ্তবয়স্ক বলে মনে হতে পারে তবে সি / সি ++ তে প্রচলিত পয়েন্টার গাণিতিকের "কালো যাদু" কে নিরুৎসাহিত করার চূড়ান্ত গৌণ সুবিধা রয়েছে।
  • প্ল্যাটফর্মের স্বাধীনতা - উইন্ডোজ এক্সপি থেকে উইন্ডোজ ভিস্তা এবং উইন্ডোজ 7 আলাদাভাবে কাজ করে। উইন্ডোজ 8 এখনও আলাদাভাবে কাজ করে। উইন্ডোজ 8 মোবাইল সহ উইন্ডোজ মোবাইল সংস্করণগুলি আবার আলাদাভাবে কাজ করে। বিভিন্ন হার্ডওয়্যার, বিভিন্ন আর্কিটেকচার, বিভিন্ন ক্ষমতা। যদিও লক্ষ্য পরিবেশটি এখনও একটি নেট বিকাশকারীকে বিবেচনা করে তবে এই সমস্ত ওএসের জন্য সামঞ্জস্যপূর্ণ সি / সি ++ প্রোগ্রাম তৈরি করার জন্য যা জানা থাকতে হবে তার তুলনায় বিশেষ জ্ঞানের পরিমাণ অনেক হ্রাস পেয়েছে। এসি # দেব নিখরচায় আরও অনেক কিছু পান।
  • ওয়েব অ্যাপ্লিকেশন সমর্থন - আমি এখনও গ্রাহক-মুখী, সার্ভার-স্ক্রিপ্টযুক্ত ওয়েব অ্যাপ্লিকেশনটি সি ++ এ গ্রাউন্ড থেকে লেখা নেই। ওয়েব সার্ভার , অবশ্যই, অ্যাপাচি, আইএসএস, এগুলি সমস্তই সাধারণত গতি / দক্ষতার কারণে একটি পরিচালনা না করা রানটাইমটির বিরুদ্ধে চালায়। তবে, সি অ্যাপ্লিকেশন ওয়েব অ্যাপ্লিকেশন তৈরিতে ব্যবহৃত একটি ভাষা নয়। সি # হ'ল (জাভা হিসাবে)। এটি মাইক্রোসফ্টের এএসপি দৃষ্টান্তের পরবর্তী প্রজন্মকে সমর্থন করার জন্য গ্রাউন্ড থেকে তৈরি করা হয়েছিল। এটি একটি স্যান্ডবক্সে চালানোর জন্য ডিজাইন করা কোড; কোন স্যান্ডবক্স (আইএসএস বা "ডেস্কটপ" সিএলআর এএসপি.এনইটি প্লাগইন) তুলনামূলক গুরুত্বহীন।
  • ভাষা / রানটাইম স্বাধীনতা - একটি সি ++ সংকলক সি ++ উত্স কোড নেয় এবং একটি মেশিনের ভাষা ব্যবহার করে একটি প্রসেসরের আর্কিটেকচারের জন্য এসেম্বলি কোড তৈরি করে। একটি ভিন্ন আর্কিটেকচার এবং / অথবা মেশিনের ভাষা সমর্থন করার জন্য, একটি সম্পূর্ণ নতুন সংকলক লিখতে হবে (এবং রানটাইম লাইব্রেরির একটি সম্পূর্ণ নতুন সেট সংকলন করতে হবে)। এসি # সংকলক সি # উত্স কোড নেয় এবং সিআইএল উত্পাদন করে, যা হার্ডওয়্যার-নির্দিষ্ট জেআইটিআর মেশিন কোডে অনুবাদ করে। উত্স ভাষাটি (এবং সেখানে বেশ কয়েকটি; সি #, ভিবি.এনইটি, এফ #, এবং "আয়রন হ্যাস্কেল, আয়রণরবি, আয়রনলিস্প, ইত্যাদি) যেমন" আয়রন "ভাষা বন্দরগুলির একটি হোস্ট আছে তা বিবেচনা না করেই একই জিআইআরটি কোনও সিআইএল প্রোগ্রাম অনুবাদ করতে পারে। একই সংকলকটি একটি ভাষা সিআইএল রূপান্তর করতে পারে যা কোনও জিতার চালাতে পারে, হার্ডওয়ারের কোনও ব্যাপার না।
  • "সঠিক" কোডটিতে ফোকাস করুন - সি ++ ডিভসের জন্য, সবচেয়ে গুরুত্বপূর্ণ কী তার উপর নির্ভর করে কিছু করার জন্য অনেকগুলি "ডান" উপায় রয়েছে; মেমরি দক্ষতা, সিপিইউ দক্ষতা, হার্ডওয়্যার স্বাধীনতা, ওএস স্বাধীনতা, ইত্যাদি কোড যখন একে একে অগ্রাধিকার হয় তখন কিছুটা আলাদা দেখা যায়। সি # এমন একটি গোষ্ঠী দ্বারা ডিজাইন করা হয়েছিল যা ফোলার এবং তার সহকর্মীদের (যারা সি ++ সম্প্রদায়ের মধ্যে কোড ডিজাইনের সংস্কারের উদ্দেশ্যে একটি সম্প্রদায়কে অবজেক্ট-ভিত্তিক নীতিগুলি পাঠিয়েছিল যা মূলত এটি সি থেকে উত্থিত হয়েছিল) দ্বারা ডিজাইন করেছিল was সেই সাথে যে ভাষাগুলি আগে এসেছিল (যা জাভা সহ এবং এর সর্বশক্তিমান অবজেক্টের নিকট-অনুরাগী আনুগত্য সহ, যখন একটি ভাল পুরানো সি ++ - স্টাইলের ফাংশন পয়েন্টারটি কাজটি আরও পরিষ্কারভাবে করত এবং কোনও কম অবজেক্ট না হয়ে শিখত ব্যবহারিক পাঠগুলিও - ভিত্তিক).

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


1
"আমি এখনও গ্রাহক-মুখী, সার্ভার-স্ক্রিপ্টেড ওয়েব অ্যাপ্লিকেশনটি সি ++ এ গ্রাউন্ড থেকে লেখা দেখিনি" " - আপনি পুরানো দিনের সিজিআইগুলি কোথায় রাখবেন? আমার প্রথম ওয়েব অ্যাপ্লিকেশনগুলি (যেমন ছিল তত তুচ্ছ) 100% সি ছিল। তারপরে (90s এর দশকের মাঝামাঝি) সিজি তে স্ট্যান্ডার্ড কাজ করার জন্য .c এবং .h লেখা সহজ ছিল ('স্ক্রিপ্টিং' ভাষাগুলি কেবল ছিল দৃশ্যেও উদীয়মান)।

এইচএম ... সিজিআই, সিজিআই ... আমি মনে করি আমি এটি শুনেছি, তবে আমি কিথসের সাথে রয়েছি, আমি এখনও আসলে দেখতে পাচ্ছি না :)
DXM

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

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

1
তবে এমএসআইএল এবং নেটিভ কোডের মধ্যে ইন্টারপ যথাযথভাবে সংজ্ঞায়িত এবং কেবল কার্যকর। এবং দৃশ্যত কেবল নকশা দ্বারা এবং ব্যবহারকারী সম্প্রদায়ের মনোভাব দ্বারা কাজ করার আশা করা হয়েছিল।
আরবার্তেগ

12

উইন্ডোজ ওএস বিভিন্ন সিপিইউ প্রকারের জন্য উপলভ্য, বর্তমানে বেশিরভাগ x64, x86, ইন্টেল, এআরএম।

সিআইএল / সিএলআর সেই হার্ডওয়্যার প্ল্যাটফর্ম থেকে স্বতন্ত্র - এই পার্থক্যগুলি আইএল সম্পাদন পরিবেশের দ্বারা "বিমূর্ত দূরে" are উদাহরণস্বরূপ, "যে কোনও সিপিইউ" এর জন্য সংকলিত .NET অ্যাসেম্বলি সাধারণত উইন 64 এ একটি 64 বিট প্রক্রিয়া হিসাবে এবং উইন 32 একটি 32 বিট প্রক্রিয়া হিসাবে বিভিন্ন এক্সিকিউটেবল সরবরাহ না করে চালানো যেতে পারে।

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


কেবল এটিতে কিছুটা যুক্ত করার জন্য, তারা কেবল একই সিপিইউ টাইপের মধ্যে বিভিন্ন সিপিইউ প্রকারের নয় এমনকি বিভিন্ন সংস্করণ (কোর আই 3 / আই 5 / আই 7) এবং বিক্রেতাদের (ইন্টেল বনাম এএমডি) বিভিন্ন উদাহরণ থাকতে পারে (উদাহরণস্বরূপ সমস্ত এক্স 64) আলাদা থাকতে পারে জেআইটি সংকলক সুবিধা গ্রহণ করতে সক্ষম হবেন এমন সমাবেশের নির্দেশাবলীর সেট
DXM

2
@ ডিএক্সএম: এবং আপনি জানেন যে জেআইটি আসলে কী করে? না এটি কি আরও অনুমানের বিষয়?
ডক ব্রাউন

কমপক্ষে একটি এমএসডিএন ব্লগ দাবি করেছে যে জেআইটি সংকলক তা করে (বা করেছিল, 8 বছর আগে)।

@ ডকব্রাউন: স্পষ্টতই আমার হাতে কোনও রেফারেন্স উপাদান নেই তবে আমি ভেবেছিলাম এই দীর্ঘকাল আগে আমার কিছু পড়ার কথা মনে আছে। লিঙ্কটি সন্ধানের জন্য ধন্যবাদ দেলানান। এটি অর্থবহ হয়ে উঠবে যেহেতু আমরা জানি যে চিপ নির্মাতারা তাদের নিজস্ব নির্দেশাবলী স্ট্যান্ডার্ড x86-x64 এর উপরে যুক্ত করতে চান তাই যদি মেশিনটি সুবিধা নিতে পারে তবে তা কেন হবে না?
ডিএক্সএম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.