কিউটি-সি ++ বনাম জেনেরিক সি ++ এবং এসটিএল [বন্ধ]


19

উবুন্টু কিউকিউতে ইদানীং আমার সি ++ এ ব্রাশ করা হয়েছে। আমি প্রতিটি কিউটির কাঠামো পছন্দ করি, বিশেষত জিইউআই তৈরি করি। গত কয়েক বছর ধরে পাইকিউটি ব্যবহার করার সময় আমি এর সাথে বেশ পরিচিত হয়েছি।

পাইকিউটি ব্যবহার করার সময়, আমার কাছে এমন কিছু সমস্যা ছিল যা Qt সহ সি ++ ব্যবহার করার সময় এখন আরও স্পষ্ট হয়: Qt এর C ++ এর অনেকগুলি এক্সটেনশন রয়েছে যা Qt নির্দিষ্ট - QString কেবলমাত্র একটি সাধারণ উদাহরণ, স্বয়ংক্রিয় আবর্জনা সংগ্রহের উল্লেখ না করে। সি ++ এবং এসটিএল সম্পর্কে কিছু না জেনে C ++ ব্যবহার করে কিউটি অ্যাপ্লিকেশনগুলি লেখা সম্ভব।

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

আমার কিউটি এড়ানো উচিত? আমি জিইউআই তৈরির জন্য ডাব্লুএক্সউজেটস বা জিটিকে ++ ব্যবহার করা আরও ভাল হতে পারি?

জেনেরিক সি ++ এবং এসটিএল সর্বাধিক ব্যবহারের প্রয়োজন / ব্যবহারের জন্য সেরা জিইউআই ফ্রেমওয়ার্কটি কী? জিইআইআই ফ্রেমওয়ার্ক ইত্যাদির ক্ষেত্রে আমি কীভাবে নিজেকে সি ++ প্রোগ্রামার হিসাবে সবচেয়ে বেশি বাজারজাত করতে পারি?

উত্তর:


15

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

আমার মতে, এসটিএল এর সাথে কাজ করা অন্তর্নিহিত ডেটা স্ট্রাকচারগুলি কী কী ব্যবহৃত হয় এবং তার জটিলতাগুলি বোঝার বিষয়ে এবং ফলস্বরূপ কোন সময় আপনার প্রতিটি ধারক ব্যবহার করা উচিত about এবং যখন এটি সি ++ প্রোগ্রামিংয়ের কথা আসে তখন এটি বিশেষত খুব প্রয়োজনীয় <অ্যালগরিদম> শিরোনাম কীভাবে ব্যবহার করতে হয় তা জেনে রাখা সম্পর্কে, যা QT এর পাত্রেও কাজ করা উচিত, যেহেতু তারা STL- সামঞ্জস্যপূর্ণ।

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

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

আপনি যদি চাকরির বাজারটি সি ++ নিয়ে কাজ করে থাকেন তবে সম্ভাবনা রয়েছে আপনি কিউটি বা অন্য একটি কাঠামোর সাথে কাজ করছেন যা এর অনুরূপ, এর নিজস্ব ইউটিলিটি ক্লাস রয়েছে যা সি ++ আরও সহজ করার চেষ্টা করে।


4
"আপনার প্রোগ্রামের বাকী অংশের জন্য আপনি সর্বদা একচেটিয়া জেনেরিক সি ++ ব্যবহার করতে পারেন এবং কেবল জিইউআইয়ের জন্য কিউটি ব্যবহার করতে পারেন for"
মোঃ মাহবুবুর রহমান

@ মাহবুবুরআরমন - হ্যাঁ - এটি দুর্দান্ত পরামর্শ - শুধুমাত্র জিইউআইয়ের জন্য কিউটি ব্যবহার করুন এবং পিছনে হুক করার জন্য প্রয়োজনীয় what's জেনেরিক সি ++, এসটিএল, বুস্ট ব্যবহার করে বাকীটি লিখুন - যে সরঞ্জামগুলি সর্বজনীনভাবে ব্যবহৃত হয়।
ভেক্টর

5

আমি কিউটির বেশিরভাগ উচ্চ প্রশংসার সাথে একমত, তবে প্রশ্নটি ছিল সবচেয়ে ভাল জিইউআই কাঠামো যা ব্যবহার করতে দেয় / জেনেরিক সি ++ এবং এসটিএল সর্বাধিক ব্যবহারের প্রয়োজন? এই ক্ষেত্রে কিউটিটি একটি সামান্য স্কিজোফ্রেনিক: এটি এসটিএল পাত্রে এবং অ্যালগরিদমগুলিকে তার নিজস্ব পাক দিয়ে নকল করে। এটি পাত্রেও সরবরাহ করে, যা এসটিএল থেকে পৃথক। কিউটি এবং এসটিএল এর মধ্যে আন্তঃক্রিয়াশীলতা সর্বদা মসৃণ নৌযান নয়। কিছু কিছু ক্ষেত্রে তা থেকে পাওয়ার জন্য কয়েকটি ফাংশান কল লাগে std::stringকরার QStringএবং ফিরে।

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

আপনি দেখতে একটি জিটিকেএম মিমিও দেখতে পারেন, এটি জিটিকে + এর আশেপাশের একটি সি ++ র‌্যাপার। এটি Qt এর চেয়ে আপনার প্রথম প্রয়োজনীয়তা পূরণের কাছাকাছি।


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

2

আমি স্ট্যান্ড :: স্ট্রিং বা এসটিডি :: আইওস্ট্রিম বা এসটিডি :: ভেক্টরের মতো নির্দিষ্ট এসটিএল লাইব্রেরি ব্যবহার না করার বিষয়ে খুব বেশি চিন্তা করব না। কিউটি-সমতুল্যগুলি অন্যরকম স্বাদে আসে তবে তারা কোনও সমস্যা করতে এতদূর যায় না।

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


1
আমি যে বিষয়টিটি তৈরির চেষ্টা করছিলাম সেটি হ'ল জাল বরাদ্দ সাধারণত খারাপ হয় না, এটি স্থানীয় ভেরিয়েবলের পক্ষে সবচেয়ে ভাল জিনিস নয়। জিইউআই ক্লাসগুলি দীর্ঘ জীবনযাপন করার প্রবণতা রয়েছে এবং সর্বোত্তমভাবে গাদা, স্থানীয় ভেরিয়েবলগুলিতে বরাদ্দ করা হয় যা কেবলমাত্র অস্থায়ীভাবে স্ট্যাকের উপর ভালভাবে বাঁচতে প্রয়োজন। সি # তে গারবেস সংগ্রহ সহ তারা শীঘ্রই ধ্বংস হয়ে যাবে, সুতরাং গাদাও ঠিক আছে। তবে ম্যানুয়াল new/deleteকলগুলির সাথে এটি এত সহজ এবং ত্রুটিযুক্ত নয়। সমালোচনা বিভাগে (বড় ডেটা পরিচালনা করা) এটি একটি পার্থক্য deleteআনতে পারে , বিশেষত কলগুলি বেশ ধীর হতে পারে।
ভাইরবল

1
এটি 10000 ইউআই অবজেক্টগুলির সমস্যা নয় তবে এক মিলিয়ন এন্ট্রি ইত্যাদির সাথে জটিল ট্রি ডেটাস্ট্রাকচারের ক্ষেত্রে যেখানে একবার জিনিস বরাদ্দের স্মার্ট পদ্ধতিগুলি ব্যবহার করতে পারে (বাল্ক বরাদ্দ বা স্মার্টলিখিত প্রচুর পরিমাণে বর্ধিত ক্লাস ইত্যাদি)। উপসংহার: গাদাটি খারাপ নয়, এটি স্মার্টলি ব্যবহার করতে হবে। Qt উপায় কখনও কখনও অন্যান্য জিনিসগুলির জন্য স্কেল করে না। এটি এখনও আমার মতে একটি চমত্কার সরঞ্জামকিট।
ভাইরবল

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

2
আমি মনে করি আপনি আমার পয়েন্টটি পেয়েছেন: সি ++ এর সাথে আপনার কাছে প্রচুর বিকল্প রয়েছে, সি ++ সহ আপনার অবশ্যই বুদ্ধিমানের সাথে বেছে নিতে হবে। স্মার্ট পয়েন্টার ইত্যাদিরও সমস্যা আছে। সি # দিয়ে বিরক্ত হয়ে আপনি dlang.orgএকবার দেখে নিতে পারেন যা অনেক বেশি ভাল কাজ করে (জিসিড)।
ভাইরবল

এদিকে আমাকে একটি সরঞ্জাম চেইন একসাথে রাখতে হবে যা সি ++ ১১ সমর্থন করে আমি এখনই কোডেলাইট ব্যবহার করি - খুব সুন্দর আইডিই - তবে বাক্সের বাইরে (জিএনইউ সংকলক) এটি 11 সমর্থন করে না, যেমন আমি সন্ধান করেছি ... সম্ভবত আমি এটিতে 11 টি কমপ্লায়েন্ট সংকলক প্লাগ করতে পারেন। ডি বা বু ইত্যাদি ইত্যাদি দিয়ে শুরু করতে যাচ্ছি না - যেমনটা আমি প্রশ্নে বলেছি, আমাকে আবারও চাকরির বাজারে বেশ দ্রুতই আঘাত করতে হতে পারে এবং আমি বাজারের জন্য মূলধারার ভাষা পেতে চাই, 'অফস' নয়। পাইথন প্রচুর চাকরি আছে - খুব খারাপ আমি আর পাইথন আর দাঁড়াতে পারি না!
ভেক্টর
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.