c++ - উনল - সি++ বই




কেন সি++ প্রতিফলন আছে না? (10)

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

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

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

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


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

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

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

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

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


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


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


প্রতিফলন ঐচ্ছিক হতে পারে, একটি preprocessor নির্দেশিকা মত। কিছুটা এইরকম

#pragma enable reflection

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


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

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

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


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

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

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

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

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


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

N3340 সি ++ প্রতিফলন পরিচয় করানোর উপায় হিসাবে সমৃদ্ধ পয়েন্টার প্রস্তাব। অন্যান্য জিনিসের মধ্যে এটি আপনি এটি ব্যবহার না করা পর্যন্ত একটি বৈশিষ্ট্য জন্য পরিশোধ না সমস্যা ঠিকানা।



অ্যালিসটায়ার ককবার্নের মতে, উপপরিচালনাটি প্রতিফলিত পরিবেশে নিশ্চিত করা যাবে না

প্রতিফলন অপেক্ষাকৃত টাইপ সিস্টেমের জন্য আরো প্রাসঙ্গিক। সি ++ এ, আপনি জানেন কী ধরনের আপনি পেয়েছেন এবং আপনি এটির সাথে কী করতে পারেন তা জানেন।


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

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

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





reflection