ওহ, জটিল প্রশ্ন ...
এই প্রথম অংশটি, সি ++ সি ++ এর সাথে মেলে কিনা তা সম্পর্কে
এই সমস্ত একই চিপ / আবী ধরে। আমাদের যদি সেই ম্যাচ না হয় তবে আমরা কোনওভাবেই সামঞ্জস্যপূর্ণ হব না। আমাদের 32 বিট x86 কোডের 32 বিট x86 কোডের সাথে বা AMD64 কোডের সাথে 64 বিট এএমডি 64 কোডের মিল রয়েছে need
1) সি এর জন্য (আমরা সহজ শুরু করি, সি ++ পরে আলোচনা করব) বিভিন্ন সংকলকগুলির আউটপুট অন্যান্য সংকলকগুলির সাথে সামঞ্জস্যপূর্ণ। চিপ এবিআই নামে একটি জিনিস রয়েছে যা জিনিসগুলিকে সামঞ্জস্য রাখে। আমরা কীভাবে স্ট্যাকটি সেট আপ করি, কীভাবে রেজিস্টারগুলি সেটআপ করি ইত্যাদি আমাদের সাথে মিল আছে খুব প্রথম দিকে, প্রতীক দৈর্ঘ্যের কারণে কিছুটা অসঙ্গতি ছিল, তবে এটি বহু বছর ধরে নিষ্পত্তি হয়েছে।
এটি কাজ করে কারণ সি তুলনামূলকভাবে সহজ। আমাদের কী সমন্বয় করতে হবে? ফাংশন নাম এবং ফাংশন কল। এবিআইয়ের মধ্যেই এটিই
2) সি ++ এর জন্য, আমাদের অনেকগুলি নোবস সমন্বিত করতে হবে। কীভাবে আমরা একটি বস্তু রাখি? কিভাবে / কখন আমরা স্থিতিশীল নির্মাণকারী / ধ্বংসকারীদের কল করব? উত্তরাধিকারের জন্য আমরা কীভাবে কোনও জিনিস রাখি? নাকি একাধিক উত্তরাধিকার? ভার্চুয়াল ফাংশন? এমনকি "সাধারণ" জিনিসগুলি যেমন আমরা কীভাবে ফাংশন নামগুলি "ম্যাঙ্গেল" করি (প্রতীক নামের মধ্যে যুক্তিগুলির ধরণের জন্য আমরা কীভাবে প্রতীকটির নাম পরিবর্তন করব)। আমাদের এখানে সিদ্ধান্ত নেওয়ার প্রচুর সিদ্ধান্ত নিয়েছে, আমরা নেমে যেতে পারব different
শুরুতে, সি ++ সংকলক বিক্রেতারা তারা এখানে সবচেয়ে ভাল বলে মনে করেছিল did এটি পড়তে পারে: তারা যা চেয়েছিল তা করেছে এবং সামঞ্জস্যের জন্য নাদাকে যত্ন করেছে, তাই কিছুই ছিল না। পরে তারা বুঝতে পেরেছিল যে এটি সহজে গ্রন্থাগারগুলি বিক্রয় করা অসম্ভব করে তোলে - আপনার প্রতিটি সংকলক সংস্করণ (বা কমপক্ষে সংস্করণগুলির একটি বড় উপসেট) জন্য একটি সি ++ লাইব্রেরি তৈরি করা দরকার।
শেষ পর্যন্ত তারা স্ট্যান্ডার্ড সি ++ এবিআই নিয়ে আসে । এটি একাধিক সংকলকগুলির কোড একসাথে আসার অনুমতি দেয়। কোডটি একে অপরকে যথাযথভাবে কল করতে পারে তা নিশ্চিত করার জন্য এটি লেআউট এবং নামগুলির একটি শক্ত তালিকা।
হ্যাঁ! স্ট্যান্ডার্ডে সমস্ত আধুনিক সংকলক! সবই হয়ে গেল! রাইট?
আসলেই নয় ... প্রথমত, আপনি যদি নতুন এবিআইতে চলে যান তবে এর অর্থ আপনি পুরানো এবিআইয়ের সাথে সামঞ্জস্যপূর্ণ নন। দ্বিতীয়ত, আপনি একটি অনুমানের কোডিং করছেন তবে কোনও গ্যারান্টি নেই যে আপনি এটি সঠিকভাবে পেয়েছেন। জি ++ এর শুরুতে অনুমানটির সাথে মেলে চেষ্টা করার চেষ্টা করে, তারা এটি কয়েকবার ভুল করে ফেলেছিল।
সুতরাং, সি ++ এর সংক্ষিপ্তসার:
একটি অনুমান রয়েছে যা এটি তৈরি করা উচিত যা সংযোজকগুলিতে সি ++ কোডটি সুসংগত করে। তবে এটি নির্ভর করে যে সংকলকগুলি স্পিকে কোড করেছিল কিনা এবং তারা চশমাটি সঠিকভাবে পেয়েছিল কিনা। আধুনিক সংকলকগুলির জন্য (গত ৫ বছরে কিছু) এটি সত্য হওয়া উচিত।
এখন, সি ++ এবং সি # ... সম্পর্কে
সি ++ বলতে বোঝায় চিপ চালানো। সরাসরি এক্স 86 বা এএমডি 64 এ যাই থাকুক না কেন। যেমন, এটি এই নির্দিষ্ট চিপগুলির জন্য অপকডস রয়েছে। চিপ একটি সংখ্যা পড়ে, বুঝতে পারে এটি কোন আদেশটি উপস্থাপন করে এবং এটি যা জিজ্ঞাসা করে তা করে।
সি # এর অর্থ ভার্চুয়াল মেশিনে চালানো, যার নাম সিএলআই। যেমন, এটির বিভিন্ন কমান্ড রয়েছে এবং সংখ্যাগুলি একই নয়। এটি এমন কোনও ব্যক্তিকে তৈরি করার মতো যা ফরাসী ভাষায় কেবল ইংরেজী পড়ার জন্য গাড়ির টিউন-আপের জন্য নির্দেশিকা পড়তে পারে। এটা ঠিক কাজ করবে না।