সি ++ এর সাথে অনেকগুলি বহনযোগ্য সমস্যা রয়েছে, যা কেবল বাইনারি স্তরে মানককরণের অভাবের কারণে।
আমি মনে করি না এটি বেশ সহজ। প্রদত্ত উত্তরগুলি ইতিমধ্যে মানকতার উপর দৃষ্টি নিবদ্ধ করার অভাব সম্পর্কে দুর্দান্ত যুক্তি সরবরাহ করে তবে সি ++ খুব সমৃদ্ধ হতে পারে একটি ভাষার যা এবিআই মান হিসাবে সিটির সাথে যথাযথভাবে প্রতিযোগিতা করার উপযুক্ত হতে পারে।
ফাংশন ওভারলোডিং, ভেটেবল অসম্পূর্ণতা, ব্যতিক্রমগুলি সহ মডিউল সীমানা জুড়ে ফেলে দেওয়া ইত্যাদির ফলে আমরা ম্যানলিংয়ে যেতে পারি etc. এগুলি সবই একটি ব্যথা, এবং আমি আশা করি তারা কমপক্ষে ভিটিবেল লেআউটগুলিকে মানিক করে তুলতে পারে।
তবে একটি এবিআই স্ট্যান্ডার্ড কেবলমাত্র একটি সংকলকটিতে উত্পাদিত সি ++ ডাইলিব তৈরি করার বিষয়ে নয় যা অন্য কোনও বাইনারি দ্বারা তৈরি করা অন্য বাইনারি দ্বারা তৈরি করতে সক্ষম different এবিআই ক্রস-ভাষা ব্যবহার করা হয় used । তারা যদি কমপক্ষে প্রথম অংশটি কভার করতে পারে তবে এটি দুর্দান্ত হবে তবে আমি দেখি এমন কোন উপায় নেই যে আমি সর্বদা বিস্তৃতভাবে সামঞ্জস্যপূর্ণ ডায়ালিবগুলি তৈরির জন্য ইউনিভার্সাল এবিআই স্তরের ক্রমানুসারে সি ++ এর সাথে সত্যিই প্রতিদ্বন্দ্বিতা করছি।
এই জাতীয় রফতানি করা একটি সাধারণ জুড়ি কল্পনা করুন:
void f(Foo foo);
void f(Bar bar, int val);
... এবং কল্পনা করুন Foo
এবং Bar
প্যারামিটারাইজড কন্সট্রাক্টর, কপি কনস্ট্রাক্টর, মুভ কনস্ট্রাক্টর এবং অ-ট্রিভিয়াল ডেস্ট্রাক্টর সহ ক্লাস ছিলেন।
তারপরে একটি পাইথন / লুয়া / সি # / জাভা / হাস্কেল / ইত্যাদির দৃশ্য দেখুন। বিকাশকারী এই মডিউলটি আমদানি করতে এবং তাদের ভাষায় এটি ব্যবহার করার চেষ্টা করছেন।
ফাংশন ওভারলোডিং ব্যবহার করে কীভাবে প্রতীকগুলি রফতানি করতে হয় তার জন্য প্রথমে আমাদের একটি নাম ম্যাঙ্গেলিং মান প্রয়োজন need এটি একটি সহজ অংশ। তবুও এটির নাম "ম্যাংলিং" হওয়া উচিত নয়। যেহেতু ডাইলিবের ব্যবহারকারীরা নাম অনুসারে প্রতীকগুলি সন্ধান করতে হয়, তাই এখানে ওভারলোডগুলি এমন নামগুলিতে নিয়ে যায় যা সম্পূর্ণ গণ্ডগোলের মতো দেখায় না। প্রতীক নামগুলি হতে পারে"f_Foo"
"f_Bar_int"
বা সেই জাতীয় কিছু । আমাদের নিশ্চিত হতে হবে যে তারা আসলে বিকাশকারী দ্বারা সংজ্ঞায়িত একটি নামের সাথে সংঘর্ষ করতে পারে না, সম্ভবত এবিআই ব্যবহারের জন্য কিছু চিহ্ন / অক্ষর / সম্মেলন সংরক্ষণ করে reser
তবে এখন আরও শক্ত পরিস্থিতি। পাইথন বিকাশকারী কীভাবে উদাহরণস্বরূপ মুভ কনস্ট্রাক্টর, কপি কনস্ট্রাক্টর এবং ডেস্ট্রাক্টরদের অনুরোধ করেন? হতে পারে আমরা সেগুলি ডিলিবের অংশ হিসাবে রফতানি করতে পারি। তবে কী Foo
এবং যদি Bar
বিভিন্ন মডিউল রফতানি হয়? আমাদের এই ডিলিবের সাথে সম্পর্কিত প্রতীক এবং বাস্তবায়নগুলি নকল করা উচিত নাকি? আমি প্রস্তাব দিই যে আমরা করবো, যেহেতু এটি সত্যিই খুব বিরক্তিকর হতে পারে অন্যথায় একাধিক ডায়ালিব ইন্টারফেসে জড়িয়ে পড়া শুরু করতে কেবল এখানে একটি অবজেক্ট তৈরি করতে, এটি এখানে পাস করতে, সেখানে একটি অনুলিপি করতে, এটি এখানে ধ্বংস করতে হবে। একই বুনিয়াদি উদ্বেগটি কিছুটা সিতে প্রয়োগ করা যেতে পারে (কেবল আরও ম্যানুয়ালি / স্পষ্টভাবে), সি এটির সাথে লোকেরা কীভাবে প্রোগ্রাম করে তা প্রকৃতির দ্বারা এড়াতে ঝোঁক।
এটি বিশ্রীতার একটি ছোট্ট নমুনা। f
উপরের ফাংশনগুলির মধ্যে একটি যখন BazException
জাভাস্ক্রিপ্টে একটি (একটি কনস্ট্রাক্টর এবং ডেস্ট্রাক্টর সহ একটি সি ++ ক্লাস এবং স্ট্রাইড :: ব্যতিক্রম) নিক্ষেপ করবে তখন কী হবে ?
সর্বোপরি আমি মনে করি আমরা কেবলমাত্র একটি এবিআইকে মানদণ্ডের আশা করতে পারি যা একটি সি ++ কম্পাইলার দ্বারা উত্পাদিত একটি বাইনারি থেকে অন্য উত্পাদিত অন্য বাইনারিতে কাজ করে। অবশ্যই এটি দুর্দান্ত হবে, তবে আমি কেবল এটি উল্লেখ করতে চেয়েছিলাম। সাধারণত ক্রস-সংকলক কাজ করে এমন একটি সাধারণ লাইব্রেরি বিতরণ করার জন্য এই জাতীয় উদ্বেগের সাথে এটি প্রায়শই সত্যই সাধারণীকরণ এবং সামঞ্জস্যপূর্ণ ক্রস-ল্যাঙ্গুয়েজগুলি তৈরি করার ইচ্ছা হয়।
প্রস্তাবিত সমাধান
COM- শৈলীর ইন্টারফেসগুলির সাথে কয়েক বছর ধরে APIs / ABIs এর জন্য সি ++ ইন্টারফেস ব্যবহার করার উপায়গুলি সন্ধান করার জন্য আমার প্রস্তাবিত সমাধানটি কেবলমাত্র "সি / সি ++" (শ্লেষ) বিকাশকারী হয়ে উঠতে হবে।
বাস্তবায়নের জন্য সি ++ সহ সেই সর্বজনীন এবিআই তৈরি করতে সি ব্যবহার করুন। আমরা এখনও রফতানি ফাংশনগুলির মতো জিনিসগুলি করতে পারি যা গাদাতে এ জাতীয় অবজেক্ট তৈরি এবং ধ্বংস করতে সুস্পষ্ট ফাংশন সহ অস্বচ্ছ সি ++ শ্রেণিতে পয়েন্টার ফেরত দেয়। আমরা বাস্তবায়নের জন্য সি ++ পুরোপুরি ব্যবহার করছি এমন কি, এ বি আই দৃষ্টিভঙ্গি থেকে সেই সি নান্দনিকতার প্রেমে পড়ার চেষ্টা করুন। বিমূর্ত ইন্টারফেসগুলি ফাংশন পয়েন্টারগুলির সারণী ব্যবহার করে মডেল করা যায়। এই স্টাফটিকে একটি সি এপিআইতে আবদ্ধ করা বিরক্তিকর, তবে এর সাথে আসা বন্টনের সুবিধাগুলি এবং সামঞ্জস্যতা এটিকে খুব সার্থক করে তুলবে।
তারপরে যদি আমরা এই ইন্টারফেসটি এত বেশি সরাসরি ব্যবহার করতে পছন্দ না করি (আমাদের সম্ভবত কমপক্ষে RAII কারণে নয়) তবে আমরা এসডিকে দিয়ে যে স্ট্যাটিকালি লিঙ্কযুক্ত সি ++ লাইব্রেরিতে পাঠাতে চাইছি এটি সব গুছিয়ে রাখতে পারি। সি ++ ক্লায়েন্টরা এটি ব্যবহার করতে পারেন।
পাইথন ক্লায়েন্টরা সি বা সি ++ ইন্টারফেসটি সরাসরি ব্যবহার করতে চাইবে না কারণ এই অজগরটিকে তৈরি করার কোনও উপায় নেই। তারা এটিকে তাদের নিজস্ব পাইথোনিক ইন্টারফেসগুলিতে গুটিয়ে রাখতে চাইবে, সুতরাং এটি আসলে খুব ভাল বিষয় যে এটি সম্ভব হিসাবে সহজ করার জন্য আমরা কেবল একটি খালি ন্যূনতম সিপিআই / এবিআই রফতানি করি।
আমি মনে করি যে অনেক সি ++ শিল্প জেদ করে সিএম স্টাইলের ইন্টারফেসগুলি চালিয়ে যাওয়ার চেষ্টা করার চেয়ে আরও বেশি করে এটির দ্বারা উপকৃত হবে। এই ডায়লিবগুলির ব্যবহারকারীকে বিশ্রী এবিআইয়ের সাথে ঝগড়া করতে হবে না বলে এটি আমাদের সমস্ত জীবনকে আরও সহজ করে তুলবে। সি এটিকে সহজ করে তোলে এবং এবিআই দৃষ্টিকোণ থেকে এর সরলতা আমাদের এমন এপিআই / এবিআই তৈরি করতে দেয় যা প্রাকৃতিকভাবে এবং সমস্ত ধরণের এফএফআইয়ের জন্য ন্যূনতমতা সহ কার্যকরভাবে কাজ করে।