সি ++ এর প্রতিবিম্ব কেন হয় না?


337

এটি কিছুটা উদ্ভট প্রশ্ন। আমার উদ্দেশ্যগুলি ভাষা নকশা সিদ্ধান্ত বোঝা এবং সি ++ তে প্রতিবিম্বের সম্ভাবনাগুলি চিহ্নিত করা।

  1. সি ++ ভাষা কমিটি ভাষার প্রতিবিম্ব বাস্তবায়নের দিকে কেন গেল না? ভার্চুয়াল মেশিনে (জাভা এর মতো) চলমান না এমন ভাষায় প্রতিচ্ছবি কি খুব কঠিন?

  2. যদি কেউ সি ++ এর প্রতিচ্ছবি বাস্তবায়ন করেন তবে চ্যালেঞ্জগুলি কী হবে?

আমি অনুমান করি যে প্রতিবিম্বের ব্যবহারগুলি সুপরিচিত: সম্পাদকরা আরও সহজেই লিখিত হতে পারে, প্রোগ্রাম কোডটি আরও ছোট হবে, ইউনিট পরীক্ষার জন্য মক জেনারেট করা যেতে পারে। আপনি যদি প্রতিবিম্বের ব্যবহারের বিষয়েও মন্তব্য করতে পারেন তবে তা দুর্দান্ত হবে।

উত্তর:


631

সি ++ তে প্রতিবিম্ব নিয়ে বেশ কয়েকটি সমস্যা রয়েছে।

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

  • আপনি যা ব্যবহার করেন না তার জন্য আপনি অর্থ প্রদান করবেন না। এটি সি ++ এর অন্তর্নিহিত মৌলিক নকশার দর্শনগুলির মধ্যে অন্যতম। আমার কোডটি মেটাডেটা ঘিরে যদি আমার প্রয়োজন না হয় তবে কেন? তদুপরি, মেটাডাটা যুক্ত করা সংযোজকটিকে অনুকূলকরণ থেকে বাধা দিতে পারে। আমার কোডে যদি সেই মেটাটাটা দরকার না হয় তবে আমার কেন সেই মূল্য দিতে হবে?

  • যা আমাদের আরও একটি বড় পয়েন্টে নিয়ে যায়: সি ++ সংকলিত কোড সম্পর্কে খুব কম গ্যারান্টি দেয়। সংকলকটিকে তার পছন্দসই পরিমাণে বেশ কিছু করার অনুমতি দেওয়া হয়, যতক্ষণ না ফলস্বরূপ কার্যকারিতাটি প্রত্যাশিত। উদাহরণস্বরূপ, আপনার ক্লাসগুলি আসলে সেখানে থাকার প্রয়োজন নেই । সংকলক এগুলি তাদের অপ্টিমাইজ করতে পারে, তারা যা কিছু করে তা ইনলাইন করে এবং এটি প্রায়শই তা করে, কারণ সাধারণ টেম্পলেট কোডটি বেশ কয়েকটি টেম্পলেট ইনস্ট্যান্টেশন তৈরি করে। সি ++ স্ট্যান্ডার্ড লাইব্রেরি এই আক্রমণাত্মক অপ্টিমাইজেশানের উপর নির্ভর করে। ফ্যান্টরস কেবলমাত্র পারফরম্যান্স যদি অবজেক্টটি ইনস্ট্যান্টিয়েটিং এবং ডেস্ট্রাক্ট করার ওভারহেড দূরে অনুকূলিত করা যায়। operator[]কোনও ভেক্টরটিতে পারফরম্যান্সে কাঁচা অ্যারে সূচকের সাথে তুলনীয় কারণ পুরো অপারেটরটিকে ইনলাইন করা যায় এবং এভাবে সংকলিত কোড থেকে সম্পূর্ণ অপসারণ করা যায়। সি # এবং জাভা সংকলকটির আউটপুট সম্পর্কে অনেক গ্যারান্টি দেয়। যদি আমি সি # তে একটি শ্রেণি সংজ্ঞায়িত করি তবে ফলাফলটি সমাবেশে সেই শ্রেণিটি উপস্থিত থাকবে । এমনকি যদি আমি এটি ব্যবহার না করি। এমনকি এর সদস্য ফাংশনে সমস্ত কল অন্তর্ভুক্ত করা যেতে পারে। ক্লাসটি সেখানে থাকতে হবে, যাতে প্রতিচ্ছবি এটি খুঁজে পেতে পারে। এর একটি অংশ সি # দ্বারা বাইটকোডে সংকলন দ্বারা হ্রাস করা হয়েছে, যার অর্থ জেআইটি সংকলক করতে পারেপ্রাথমিক সি # সংকলক না পারলেও শ্রেণি সংজ্ঞা এবং ইনলাইন ফাংশনগুলি পছন্দ করে তা সরিয়ে ফেলুন। সি ++ এ আপনার কেবলমাত্র একটি সংকলক রয়েছে এবং এতে দক্ষ কোড আউটপুট করতে হয়। যদি আপনাকে সি ++ এক্সিকিউটেবলের মেটাডেটা পরিদর্শন করার অনুমতি দেওয়া হয় তবে আপনি এটি নির্ধারিত প্রতিটি শ্রেণীর দেখতে আশা করতে পারেন, যার অর্থ এই সংকলকটি প্রয়োজনীয় না হলেও এমনকি সমস্ত সংজ্ঞায়িত শ্রেণি সংরক্ষণ করতে হবে।

  • এবং তারপর টেমপ্লেট আছে। সি ++ তে টেম্পলেটগুলি অন্য ভাষায় জেনেরিকের মতো কিছুই নয়। প্রতিটি টেম্পলেট ইনস্ট্যান্টেশন একটি নতুন ধরণের তৈরি করে । std::vector<int>থেকে সম্পূর্ণ পৃথক শ্রেণি std::vector<float>। এটি একটি সম্পূর্ণ প্রোগ্রামে বিভিন্ন ধরণের যোগ করে। আমাদের প্রতিবিম্বটি কী দেখতে হবে? টেমপ্লেট std::vector ? তবে এটি কীভাবে সম্ভব, যেহেতু এটি একটি সোর্স-কোড কনস্ট্রাক্ট, যার রানটাইমে কোনও অর্থ নেই? এটি পৃথক ক্লাস std::vector<int>এবং দেখতে হবে std::vector<float>। আর std::vector<int>::iteratorstd::vector<float>::iteratorএকই জন্যconst_iteratorইত্যাদি। এবং একবার আপনি টেম্পলেট বিপণন পদক্ষেপে পদক্ষেপ নিলে, আপনি দ্রুত শত শত টেম্পলেট ইনস্ট্যান্টিয়েট করে শেষ করবেন, যার সমস্তগুলি ইনপাইলার দ্বারা অন্তর্ভুক্ত এবং আবার সরানো হবে। একটি সংকলন-সময় রূপক অংশ ব্যতীত তাদের কোনও অর্থ নেই। এই শত শত শ্রেণীর প্রতিফলনের জন্য দৃশ্যমান হওয়া উচিত? তারা আছে চাই, কারণ অন্যথায় আমাদের প্রতিফলন বেহুদা হবে, যদি এটা এমনকি নিশ্চয়তা শ্রেণীর আমি সংজ্ঞায়িত আসলে হবে না সেখানে । এবং একটি পার্শ্ব সমস্যাটি হ'ল এটি ইনস্ট্যান্ট না হওয়া পর্যন্ত টেম্পলেট শ্রেণীর অস্তিত্ব নেই। যে প্রোগ্রাম ব্যবহার করে তা কল্পনা করুন std::vector<int>। আমাদের প্রতিবিম্ব সিস্টেমটি দেখতে সক্ষম হওয়া উচিত std::vector<int>::iterator? একদিকে আপনি অবশ্যই এমনটি আশা করতেন। এটি একটি গুরুত্বপূর্ণ শ্রেণি, এবং এটি এর পরিপ্রেক্ষিতে সংজ্ঞায়িত হয় std::vector<int>, যা করেমেটাডেটাতে বিদ্যমান। অন্যদিকে, প্রোগ্রামটি যদি কখনও কখনও এই পুনরাবৃত্তকারী শ্রেণীর টেম্পলেটটি ব্যবহার না করে তবে এর ধরণটি কখনও তাত্ক্ষণিকভাবে করা যায়নি এবং তাই সংকলকটি প্রথম স্থানে শ্রেণি তৈরি করতে পারে না। এবং রানটাইম এ এটি তৈরি করতে খুব দেরি হয়েছে, যেহেতু এটি উত্স কোডে অ্যাক্সেস প্রয়োজন।

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

সম্পাদনা: মন্তব্যের জবাবে:

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

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

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

তবে আমি যেমন বলেছিলাম, সংকলন মডেলটিতে পরিবর্তনের জন্য একটি প্রস্তাব রয়েছে, স্ব-অন্তর্ভুক্ত মডিউল যুক্ত করা, নির্বাচিত প্রকারের জন্য মেটাডেটা সংরক্ষণ করা, অন্যান্য মডিউলগুলি এসগুলির সাথে ঝামেলা না করে সেগুলি রেফারেন্স করার অনুমতি দেয় #include। এটি একটি ভাল শুরু, এবং সত্যি কথা বলতে, আমি আশ্চর্য হয়েছি যে স্ট্যান্ডার্ড কমিটি খুব বড় একটি পরিবর্তন হওয়ার জন্য প্রস্তাবটি ফেলে দেয়নি। তাহলে সম্ভবত 5-10 বছরে? :)


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

2
আপনার প্রথম বিষয় সম্পর্কে অন্য একটি বিষয়: যতদূর আমি জানি কারও সি ​​++ বাস্তবায়নে প্রতিচ্ছবি যুক্ত করার চেষ্টা করা হয়নি। এটির সাথে কোনও ভাল অভিজ্ঞতা নেই। কমিটি সম্ভবত নেতৃত্ব নিতে বিশেষত অনিচ্ছুক হতে চলেছে, বিশেষত পরে exportএবং পরে vector<bool>
ডেভিড থর্নলি

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

15
আপনার তৃতীয় পয়েন্টটি অনেক দিক থেকে সর্বাধিক গুরুত্বপূর্ণ: সি ++ এর জন্য প্ল্যাটফর্মগুলিতে স্ট্যান্ডেলোন কোড লেখার জন্য উপযুক্ত হতে হবে যেখানে মেমরির জন্য অর্থ ব্যয় হয়; যদি কিছু অব্যবহৃত কোড অপসারণ করা হয় এমন একটি প্রোগ্রামকে এমন একটি মাইক্রোকন্ট্রোলারের মধ্যে ফিট করতে দেয় যার দাম $ ২.৫০, তার পরিবর্তে costs ২.৫০ এবং যদি কোডটি ১,০০,০০০ ইউনিটে চলে যায় তবে সেই কোডটি সরিয়ে ফেললে $ 500,000 ডলার সাশ্রয় হয়। প্রতিবিম্ব ছাড়াই, স্থির বিশ্লেষণ প্রায়শই 90 %+ অ্যাক্সেসযোগ্য কোড সনাক্ত করতে পারে; যদি প্রতিবিম্বের অনুমতি দেওয়া হয় তবে প্রতিবিম্বের মাধ্যমে যে কোনও কিছু পৌঁছতে পারে তা অবশ্যই পৌঁছনীয় বলে ধরে নেওয়া উচিত, এমনকি এর 90% না হলেও।
সুপারক্যাট

2
সেখানে স্পষ্টভাবে কিছু যে comitee সহজেই উন্নত করা যায়, এটা অবশেষে হোয়াইট নেভিগেশন কালো বলতে যে typeinfo'র name()হবে ফাংশন নাম প্রোগ্রামার এবং কিছু undefined দ্বারা টাইপ করা হয় ফিরে যান। এবং আমাদের গণকের জন্য একটি স্ট্রিংফায়ারও দিন। সিরিয়ালাইজেশন / deserialization, কারখানা ইত্যাদি তৈরিতে সহায়তা করার জন্য এটি আসলেই গুরুত্বপূর্ণ
v.oddou

38

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


15
আরটিটিআই সি ++ স্ট্যান্ডার্ডে রয়েছে।
ড্যানিয়েল আরউইকার

1
তবে সমস্ত সি ++ বাস্তবায়ন মানসম্মত নয়। আমি এমন বাস্তবায়ন দেখেছি যা আরটিটিআই সমর্থন করে না।
মেহরদাদ আফশারি

3
এবং বেশিরভাগ বাস্তবায়নগুলি যা আরটিটিআই সমর্থন করে এটি সংকলক বিকল্পগুলির মাধ্যমে এটিকে বন্ধ করার পক্ষেও সমর্থন করে।
মাইকেল কোহনে

21

সমস্ত ভাষার প্রতিটি অন্যান্য ভাষার প্রতিটি বৈশিষ্ট্য একত্রিত করার চেষ্টা করা উচিত নয়।

সি ++ মূলত একটি খুব, অত্যন্ত পরিশীলিত ম্যাক্রো এসেইম্বেলার। এটি (প্রচলিত অর্থে) একটি উচ্চ-স্তরের ভাষা যেমন সি #, জাভা, অবজেক্টিভ-সি, স্মলটাক ইত্যাদি নয় is

বিভিন্ন কাজের জন্য বিভিন্ন সরঞ্জাম থাকা ভাল। আমাদের যদি কেবল হাতুড়ি থাকে তবে সমস্ত জিনিস নখের মতো দেখাবে etc. মেশিনের নিকটতম হাড়-দক্ষ ভাষা এখনও অন্য শ্রেণির কাজের জন্য (সি ++, সি, এসেমব্লার) দরকারী।

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

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

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

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

সংযোজন: সি ++ 11/14 উচ্চ স্তরের বিমূর্ততা এবং সিস্টেমগুলিকে সমর্থন করার জন্য সি ++ ক্ষমতাটি প্রসারিত করে চলেছে। থ্রেডিং, সিঙ্ক্রোনাইজেশন, সুনির্দিষ্ট মেমরি মডেল, আরও সুনির্দিষ্ট বিমূর্ত মেশিন সংজ্ঞাগুলি সি ++ বিকাশকারীদের অনেকগুলি উচ্চ-স্তরের বিমূর্তি অর্জন করতে সক্ষম করছে যে এই উচ্চ স্তরের কিছু ভাষায় কেবল একচেটিয়া ডোমেন ব্যবহার করতে ব্যবহৃত হয়েছিল, যখন ঘনিষ্ঠভাবে সরবরাহ অব্যাহত রাখছে while ধাতু কর্মক্ষমতা এবং দুর্দান্ত পূর্বাভাসযোগ্যতা (যেমন ন্যূনতম রানটাইম সাবসিস্টেমগুলি)। সম্ভবত প্রতিচ্ছবি সুবিধাগুলি ভবিষ্যতে সি ++ এর পুনর্বিবেচনায় সক্রিয়ভাবে সক্ষম হবে, যারা এটি চান তাদের জন্য - বা সম্ভবত কোনও গ্রন্থাগার এ জাতীয় রানটাইম পরিষেবাগুলি সরবরাহ করবে (সম্ভবত এখন একটি রয়েছে, বা উত্সাহে কোনওটির সূচনা?)


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

এটি কোনও পার্থক্য ছাড়াই পার্থক্য। এটির কী পার্থক্য রয়েছে, শেষ অবধি, রানটাইম সাবসিস্টেম যা ওজেক্টিভ-সি ব্যবহার করে তা বাস্তবে-সিতে লেখা হয় না, বরং সি-তে লেখা হয়?
মোরদাচাই

3
আমি দুঃখিত; তবে যতক্ষণ আপনি এটি যথাযথভাবে লিঙ্ক করবেন ততক্ষণ আপনি সিতে একটি উদ্দেশ্য-সি প্রোগ্রামটি সংকলন করতে পারবেন, বাস্তবে আমি এটি এখানে করেছি: stackoverflow.com/a/10290255/427309 । আপনার সম্পূর্ণ উপরের বিবৃতিটি মিথ্যা। রানটাইম সি এর মাধ্যমে সম্পূর্ণরূপে অ্যাক্সেসযোগ্য এবং এর মধ্যে এমন একটি বিষয় যা এটিকে একটি শক্তিশালী গতিশীল ভাষা করে।
রিচার্ড জে রস তৃতীয়

1
"সি রানটাইম" হ'ল সি স্ট্যান্ডার্ড লাইব্রেরির কোড সহ একটি গতিশীল লাইব্রেরি। "সি ++ রানটাইম" এর জন্য একই। এটি ওজেক্টিভ-সি এর মতো একটি রানটাইম সিস্টেম থেকে বেশ আলাদা। এছাড়াও ... আমি মনে করি আপনি প্রযুক্তিগতভাবে সি-তে অবজেক্টিভ-সি রানটাইমটি ব্যবহার করতে পারলেন, এটি এখনও একটি সি প্রোগ্রাম যা উদ্দেশ্য-সি রানটাইম ব্যবহার করে - আপনি সিতে একটি আসল উদ্দেশ্য-সি প্রোগ্রাম সংকলন করতে পারবেন না
সেল্টিকিনস্ট্রেল

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

11

আপনি যদি সত্যই সি ++ এর আশেপাশের নকশা সংক্রান্ত সিদ্ধান্তগুলি বুঝতে চান তবে এলিস এবং স্ট্রস্ট্রপ দ্বারা দ্য এনটোটেটেড সি ++ রেফারেন্স ম্যানুয়ালটির একটি অনুলিপি পান । এটি সর্বশেষতম স্ট্যান্ডার্ডের সাথে আপ টু ডেট নয়, তবে এটি মূল স্ট্যান্ডার্ডটির মধ্যে যায় এবং কীভাবে জিনিসগুলি এবং প্রায়শই কীভাবে কাজ করে তা কীভাবে তারা পায় তা ব্যাখ্যা করে।


6
এছাড়াও
স্ট্রস্ট্রপ

9

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

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

তবে আপনি ভাষার বাইরে পা রাখতে পারেন এবং প্রতিবিম্বের সম্পূর্ণ ক্ষমতা অর্জন করতে পারেন। সি এর প্রতিবিম্ব উপর অন্য স্ট্যাক ওভারফ্লো আলোচনার উত্তর এটি নিয়ে আলোচনা করে ।


7

প্রতিচ্ছবি সি ++ এর আগেও হতে পারে এবং প্রয়োগ করা যেতে পারে।

এটি নেটিভ সি ++ বৈশিষ্ট্য নয় কারণ এর একটি ভারী ব্যয় (মেমরি এবং গতি) রয়েছে যা ভাষার দ্বারা ডিফল্টরূপে সেট করা উচিত নয় - ভাষাটি "ডিফল্টরূপে সর্বাধিক কর্মক্ষমতা" ভিত্তিক।

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


3
এবং আপনি প্রতীকগুলি প্রেরণ করেন না কারণ এটি আপনার গ্রাহকদের / প্রতিযোগীদের আপনার কোডটি দেখার অনুমতি দেয় ... এটি প্রায়শই খারাপ জিনিস হিসাবে বিবেচিত হয়।
gbjbaanb

আপনি ঠিক বলেছেন, কোড প্রকাশের সমস্যাটি সম্পর্কে আমি যদিও করি নি :)
ক্লাইম

6

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


1
আমি বুঝতে পারি না যে সংকলকটির আক্রমণাত্মক অনুকূলতা কীভাবে একটি শক্তিশালী পয়েন্ট। তুমি কি বিস্তারিত বলতে পারো? লিঙ্কারটি যদি সদৃশ ইনলাইন-ফাংশন সংজ্ঞাগুলি সরিয়ে ফেলতে পারে, তবে সদৃশ প্রতিবিম্ব তথ্যতে সমস্যা কী? প্রতীক তথ্য কি কোনওভাবে ডিবাগারদের জন্য অবজেক্ট ফাইলগুলিতে যুক্ত করা হয় না?
রব কেনেডি

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

1
@ রব, অপ্টিমাইজেশানগুলি অন্য একটি বিষয়, একাধিক শ্রেণীর জটিলতায় আবদ্ধ নয়। আমি যা বলতে চাইছিলাম তার জন্য @ জালফের মন্তব্য (এবং তার উত্তর) দেখুন।
জোহানেস স্কাউব - 31:25

4
যদি আমি <T> প্রতিচ্ছবি প্রতিস্থাপন করি তবে টি এর কোনও তথ্য ফেলে দেবেন না। এটি কোনও অবিশ্বাস্য সমস্যার মতো বলে মনে হচ্ছে না।
জোসেফ গারভিন 6

3

সি ++ তে প্রতিবিম্ব ব্যবহার করার জন্য অনেকগুলি কেস রয়েছে যা টেমপ্লেট মেটা-প্রোগ্রামিংয়ের মতো সংকলন টাইম কনস্ট্রাক্ট ব্যবহার করে যথাযথভাবে সম্বোধন করা যায় না।

সি ++ তে প্রতিবিম্ব প্রবর্তনের উপায় হিসাবে N3340 সমৃদ্ধ পয়েন্টারগুলির প্রস্তাব দেয়। অন্যান্য বিষয়গুলির মধ্যে এটি কোনও বৈশিষ্ট্য না দিলে অর্থ প্রদান না করার বিষয়টি বিবেচনা করে।


2

অ্যালিস্টার ককবার্নের মতে, প্রতিবিম্বিত পরিবেশে সাব টাইপিংয়ের গ্যারান্টি দেওয়া যায় না

প্রতিচ্ছবি সুপ্ত টাইপিং সিস্টেমের সাথে আরও প্রাসঙ্গিক। সি ++ এ আপনি কী ধরণের কাজ পেয়েছেন তা জানেন এবং আপনি এটির মাধ্যমে কী করতে পারবেন তাও জানেন।


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

2

প্রতিবিম্ব প্রাক-প্রসেসরের নির্দেশের মতো alচ্ছিক হতে পারে। কিছুটা এইরকম

#pragma enable reflection

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


2

যদি সি ++ থাকতে পারে:

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

আজকের ওয়েব এবং ডেটাবেস অ্যাপ্লিকেশনগুলিতে (সমস্ত orms, বার্তাপ্রেরণ ব্যবস্থা, এক্সএমএল / জেএসন পার্সার, ডেটা সিরিয়ালাইজেশন ইত্যাদি) এতটাই প্রচলিত টাইপলেস ডেটা প্রসেসিংয়ের ক্রুসে গ্রন্থাগারগুলি ব্যবহার করা খুব সহজ enough

উদাহরণস্বরূপ, Q_PROPERTYম্যাক্রো দ্বারা সমর্থিত প্রাথমিক তথ্য (Qt ফ্রেমওয়ার্কের অংশ) http://qt.nokia.com/doc/4.5/properties.html পদ্ধতি এবং কভার প্রসারিত করার জন্য প্রসারিত - সি ++ এবং এর জন্য অসাধারণ উপকারী হবে সাধারণভাবে সফ্টওয়্যার সম্প্রদায়।

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


@ ভ্লাদ: হ্যাঁ, যদি কেউ ভাষার প্রতিবিম্বকে সমর্থন করে এমন বৈশিষ্ট্য যুক্ত করে তবে আপনি ভাষায় প্রতিবিম্ব পাবেন। ভাষা কমিটি এটি ঘোষণা করলেই কেবল এটি ঘটতে পারে এবং আমি মনে করি যে তাদের ২০১১ সালের মতো নেই, এবং আমি সন্দেহ করি যে ২০২০ খ্রিস্টাব্দের আগে আরও একটি সি ++ মানক বেরিয়ে আসবে। সুতরাং, দুর্দান্ত চিন্তা। এর মধ্যে, আপনি যদি অগ্রগতি করতে চান তবে আপনাকে সম্ভবত সি ++ এর বাইরে পা রাখতে হবে।
ইরা বাক্সার

1

0

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

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

আমি একজন ফার্মওয়্যারডিপলবারকে সিরিয়াল বন্দর থেকে ডেটা পড়ার জন্য প্রতিবিম্বের প্রয়োজন নেই - তবে জরিমানা স্যুইচটি ব্যবহার করবেন না। তবে ডেটাবেস বিকাশকারী হিসাবে যিনি সি ++ ব্যবহার চালিয়ে যেতে চান আমি ক্রমাগত একটি ভয়াবহ, কোড বজায় রাখা কঠিন যা ডেটা মেম্বার এবং ডেটাবেস কনস্ট্রাক্টের মধ্যে ডেটা ম্যাপ করে maintain

বুস্ট সিরিয়ালাইজেশন বা অন্য পদ্ধতিগুলি সত্যই প্রতিফলনের সমাধান করছে না - এটি অবশ্যই সংকলক দ্বারা সম্পন্ন করা উচিত - এবং এটি করা হয়ে গেলে সি ++ আবার স্কুলে আবার চেষ্টা করা হবে এবং ডেটা প্রসেসিংয়ের সাথে সম্পর্কিত সফ্টওয়্যারগুলিতে ব্যবহার করা হবে

আমার কাছে এই সমস্যাটি # 1 (এবং নেটিভ থ্রেডিং আদিম সংখ্যা # 2)।


4
কে বলেছে সি ++ হয় বা ডিবি অ্যাক্সেস জন্য একটি ভাষা, ওয়েব অধিবেশন hnadling GUI দেব হিসাবে ব্যবহার করা যেতে কিভাবে? এই ধরণের স্টাফের জন্য প্রচুর আরও ভাল ভাষা ব্যবহার করতে হবে। এবং একটি সংকলন-সময় স্যুইচ সমস্যার সমাধান করবে না। সাধারণত, প্রতিবিম্বের ভিত্তিতে প্রতিচ্ছবি সক্ষম বা অক্ষম করার সিদ্ধান্ত নেওয়া হবে না। এটি স্বতন্ত্র ধরণের ক্ষেত্রে সক্ষম করা সম্ভব হলে এটি কাজ করতে পারে। যদি প্রোগ্রামার কোনও প্রকারের সংজ্ঞা দেওয়ার সময় কোনও অ্যাট্রিবিউট বা অনুরূপের সাথে নির্দিষ্ট করতে পারে তবে এর জন্য প্রতিবিম্ব মেটাডেটা উত্পন্ন করা উচিত কিনা। কিন্তু একটি গ্লোবাল সুইচ? আপনি এর মধ্যে 10% সরল করার জন্য 90% ম্যাগাজিনে পঙ্গু হয়ে যাবেন।
jalf

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

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

ওআরএমের জন্য আপনার প্রতিবিম্বের প্রয়োজন হওয়ার কোনও কারণ নেই। আপনি এটি টেমপ্লেটগুলি দিয়ে সমস্ত অর্জন করতে পারেন। C ++ এর জন্য ওআরএম সরবরাহ করে এমন ফ্রেমওয়ার্কগুলির ক্ষেত্রগুলি রয়েছে।
মিঃফক্স

0

এটি মূলত কারণ এটি একটি "alচ্ছিক অতিরিক্ত"। অনেকে জাভা এবং সি # এর মতো ভাষার চেয়ে সি ++ পছন্দ করেন যাতে তাদের সংকলক আউটপুট যেমন আরও ছোট এবং / অথবা দ্রুত প্রোগ্রামের উপর আরও নিয়ন্ত্রণ থাকে।

আপনি যদি প্রতিচ্ছবি যুক্ত করতে চান তবে বিভিন্ন সমাধান পাওয়া যায়

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