অবচয়কে ক্ষতিকারক বলে মনে করা হয়? [বন্ধ]


27

আমি জিসিসিতে -std=c++0xপতাকা সহ আমার নিজের কিছু কোড সংকলন করছি , কারণ আমি সমস্ত তরুণ লোকেরা যা করছে তা অস্পষ্টভাবে রাখতে চাই (তারা যদি আমার লনের কাছে থাকে) তবে আমি অনেক সাবধানবাণী দিয়ে শেষ করেছি auto_ptrঅবচয় করা হচ্ছে সম্পর্কে । অবশ্যই, আমি জানতাম যে auto_ptrসি ++ 0x এ অবমূল্যায়ন করা হয়েছিল, কিন্তু ...

অবচয় কি সময় ও শ্রমের অপচয় নয়? অবচয় না করার কারণ (উদাহরণ হিসাবে অটো_পটার সহ):

  • কোডের একটি সমুদ্র আছে যা এখনও সমর্থন করা দরকার, লক্ষ লক্ষ সতর্কতা তৈরি করে মানুষ কেবল সতর্কতা বন্ধ করতে প্ররোচিত করবে।

  • auto_ptr কিছুটা নাফ, তবে এটি টিনে যা বলে তা আসলে তা করে।

  • আমরা যদি সত্যই জিনিসগুলি হ্রাস করতে চাই, আমি মনোনীত করি printf()। তবে কেবল অনুমান করা স্কেলালগুলি কল্পনা করুন। auto_ptrখুব বেশি বন্ধু নেই, তবে কমপক্ষে আমার সি ++ কোডে এটি এর চেয়ে বেশি printfব্যবহৃত হয়, যা মোটেই ব্যবহৃত হয় না।

  • কমিটির এই অধিকার পাওয়ার খারাপ রেকর্ড রয়েছে - তারা নামস্থলের সুযোগে স্থিতিশীল অবমূল্যায়ন করেছিল এবং এখন মনে হয় এটিকে অবমূল্যায়ন করা হয়েছে - auto_ptrঅনুরূপ ফিরে আসা হলে আমি অবাক হব না

  • শেষ অবধি, কমিটি যাই বলুক না কেন, সংকলক প্রয়োগকারীরা এগুলি উপেক্ষা করে - তারা কেবল তাদের গ্রাহকদের কোড ভঙ্গ করার ঝুঁকি নিতে পারে না, তারা যা করতে পারে তা বিরক্তিকর সতর্কতা জারি করে।

সুতরাং আমার প্রশ্ন - আপনি অবচয়কে বিবেচনা করেন (যে কোনও কিছুর জন্য, কেবল অটো_পিটার নয়, এবং কেবল সি ++ তেও নয়) একটি ভাল ধারণা, এবং যদি তাই হয় তবে কেন?


2
@ দ্য এলকিউ - আমি এটি "কেন কোনও কিছুর অবমূল্যায়ন করি" auto_ptrহিসাবে উদাহরণ হিসাবে ব্যবহার করে পড়েছি ।
ক্রিসএফ

4
এটি কি টিনে বলে "যদি কোনও ধরণের পাত্রে ব্যবহৃত হয় তবে আপনার হৃদয় ভেঙে যাবে"? ব্যবহার করুন unique_ptrএবং আরও সুখী হন।
কেট গ্রেগরি

13
@ নীল - আপনার ভাষাটি কিছুটা প্রদাহজনক এবং (প্রতিচ্ছবিতে) এটি একটি গুরুতর প্রশ্নের চেয়ে ছোঁয়াচে হিসাবে আসে। আপনি যদি এটি উন্মুক্ত থাকতে চান তবে আপনি "এটিকে নীচে নামিয়ে" দিতে চান।
ক্রিসএফ

4
@ নীল - আমি প্রশংসা করি যে আপনি এটি হাস্যকর হিসাবে লক্ষ্য করেছিলেন, তবে যেমনটি আমি বলেছিলাম, প্রতিচ্ছবিতে এটি আপনার ধারণা বলে মনে হয় তার চেয়ে বেশি "রেন্টি" পেয়েছে।
ক্রিসএফ

10
যদি আপনি কখনও অবমূল্যায়ন থেকে মুক্তি পাওয়ার পরিকল্পনা করেন তবে আপনার প্রথমে এটি সত্যই অবমূল্যায়ন করা উচিত। প্রচুর বিদ্যমান ভাষা / API গুলি অন্যথায় ভেঙে যায়। অবচয় সহ আপনি তাদের অবহেলিত অবমূল্যায়ন থেকে মুক্তি পেতে কিছু সময় দিতে পারেন।
জোচিম সৌর

উত্তর:


32

অবমূল্যায়নের কারণগুলি (সাধারণভাবে):

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

আমিও শেষ বিষয়টির সাথে একমত নই। সংকলকগণ কমিটিটিকে অগ্রাহ্য করেন না এবং অবশেষে অবহেলা করা জিনিসগুলি তারা মুছে ফেলেন (যেমন >?=এবং <?=জিসিসিতে - সেগুলি অবহেলা করা হয়েছিল এবং তারপর অপসারণ করা হয়েছে))

আমি মনে করি যে গুরুত্বপূর্ণ বিষয়টি হ'ল: বিভিন্ন কারণে কিছু কিছু অপসারণ করা উচিত এবং আমি মনে করি যে এটি করার একমাত্র বুদ্ধিমান অবহেলা। এই নির্দিষ্ট ক্ষেত্রে auto_ptrএটি অপসারণ করা উচিত হিসাবে এটি সরানো উচিত unique_ptr। ওভার পরিবর্তন করা যথেষ্ট সহজ, এবং লোকেরা এটি করার জন্য প্রচুর সময় পাবে।

(*) হ্যাঁ আমি জানি তারা এক্সটেনশান এবং মান নয়, তবে মূল বিষয়টি হ'ল সংকলক বিক্রেতারা অবশেষে জিনিসগুলি অপসারণের পরে তাদের কোডগুলি সরিয়ে ফেলবে, কোড এখনও তাদের উপর নির্ভর করে কি না।


6
অফটোপিকের জন্য দুঃখিত, তবে আমি প্রতিরোধ করতে পারি না: তারা >?=এবং <?=অপারেটরগুলি কী ছিল ?
ব্র্যান্ডিজি

7
পুরাতন জিসিসি আপনি লিখতে পারেন a >?= b;, যার জন্য সাধারণভাবে সংক্ষেপে ছিল if (a > b) a = b;এবং অনুরূপভাবে জন্য <?=
পিটার আলেকজান্ডার

2
উঃ ... আমি দেখতে পাচ্ছি কেন তারা এটি যুক্ত করেছে। এবং তারপরে তারা এটিকে কেন সরিয়ে ফেলল। "ঝরঝরে" বৈশিষ্ট্যগুলির জন্য হ্রাস করা প্রয়োজনীয় হতে পারে যা কেবলমাত্র জনসমক্ষে প্রকাশ করার পরে তারা কতটা সমস্যাযুক্ত তা প্রকাশ করে।
ফিল

25

যে কোনও জটিল জটিল এপিআইতে সম্ভবত এমন কিছু ত্রুটি থাকতে পারে যা কিছুক্ষণ ব্যবহার করার পরে এটি আবিষ্কার করা যায় না। আমাদের বিকল্পগুলি:

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

অবচয় হ'ল এই বিকল্পগুলির সানেষ্ট।


12

নাহ। অবমূল্যায়ন সত্যিই ভাল জিনিস হতে পারে। এটি পুরানো অকেজো ব্যাগেজগুলির সাথে আটকে যাওয়া থেকে প্রযুক্তিগুলিকে আটকে রাখে।

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

আরও সাধারণভাবে, 80 এর দশক থেকেই অ্যাপলটির অভ্যাস ছিল যে দীর্ঘস্থায়ী পুরানো এপিআইগুলিকে ইয়াঙ্কিংয়ের আগে 5-7 বছর ধরে "অবচয়" হিসাবে চিহ্নিত করা হয়। আমি কেবলমাত্র ডব্লিউডব্লিউডিসিতে একটি অ্যাপল ইঞ্জিনিয়ারের সাথে প্রাচীন কুইটটাইম সি এপিআইয়ের কিছু অবমাননার বিষয়ে কথা বলছিলাম এবং তারা এটি করছে শুনে সত্যিই আনন্দিত হয়েছিল, কারণ 1990 সালের আশেপাশে বিকশিত একটি মডেলের পক্ষে অব্যাহত সমর্থন পুরোপুরি বাধাগ্রস্ত করেছিল যে কোনওটি কী প্রত্যাশার আশা করবে? আধুনিক -৪-বিট মাল্টিকোর সিপিইউতে করতে।

অনুশীলনে, এটি সংকলক লেখকদের অটো_পিটিআর ডাম্প করতে দীর্ঘ সময় নিবে এবং তারা সম্ভবত এক-দু' দশক ধরে কিছু পিছনের-সামঞ্জস্যতা মোডকে সমর্থন করবে তবে এটি একটি ভাল জিনিস o


11

যদি আমরা সত্যিই জিনিসগুলি হ্রাস করতে চাই তবে আমি প্রিন্টফকে মনোনীত করি ()

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

সুতরাং, অন্য কেউ কি একটি বিরোধী অবমূল্যায়নের ক্রুসেডের জন্য প্রস্তুত?

কমিটি হ্রাসের বর্তমান অনুমিত অর্থের কিছু সমস্যা সম্পর্কে অবগত। অবমূল্যায়নের অর্থ দেখুন ।


5

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

অবমূল্যায়ন হুঁশিয়ারিও দেয় যে ভবিষ্যতে, বৈশিষ্ট্যটি সরানো হবে। এটি বিকাশকারীদের যদি নতুন এপিআইয়ের সাথে তাল মিলিয়ে থাকে তবে তাদের কোড আপডেট করার সময় দেয়। এটি বিকল্পের তুলনায় অনেক ভাল: সম্পূর্ণ অপসারণ। মনে রাখবেন অবমূল্যায়ন একটি ত্রুটি নয়, একটি সতর্কতা।

এবং যদি এটি কোনও পুরানো প্রোগ্রাম যা আপনি আপডেট করতে চান না, তবে আপনাকে পুরানো এপিআই (বা এই ক্ষেত্রে সংকলক) ব্যবহার করতে কোনও কিছুই থামছে না।


1

যেমনটি দাঁড়িয়েছে, অবমূল্যায়নের কমপক্ষে দুটি অর্থ রয়েছে।

  • এটি ভবিষ্যতের সংস্করণে সরানো হবে
  • আমরা আরও ভাল বিকল্প তৈরি করেছি এবং এখন বৈশিষ্ট্যটি রিডানড্যান্ট (তবে সম্পূর্ণ অকেজো নয়)। ভাষা শিখার সময় নতুনরা এটিকে আরও ভালভাবে এড়িয়ে যাবেন; তবে শীঘ্রই এটি কোনও সময় মুছে ফেলা যাচ্ছে না।

আমি মনে করি স্থিতিশীল পরবর্তী বিভাগে আসে, তবে কেবলমাত্র সময়ই বলবে যে অটো_পিটার সত্যিই অপসারণের যোগ্য কিনা বা এটি ভাষাতে রাখাই ভাল।


0

বিকল্পের দিকে যাওয়া যদি 1 কার্যদিবসে করা যায় তবে অবচয় হ্রাস নয় eg নতুন সাথে পুরানো ফাংশনটির সহজ অনুসন্ধান / প্রতিস্থাপন করুন বা একটি সামঞ্জস্যতা স্তর সেট আপ করা সহজ।

হ্রাসের কারণে আপনার যদি সফ্টওয়্যারটির বড় অংশগুলি আবার লিখতে হয় তবে এটি ক্ষতিকারক।

একটি ভাল উদাহরণ সম্ভবত পিএইচপি এর মাইএসকিএল এপিআই হবে, মূলত আপনাকে কেবল সমস্ত মাইএসকিএল_ * কে মাইএসকিলি_ * দিয়ে প্রতিস্থাপন করতে হবে এবং তাদের একটি লিঙ্ক আইডি সরবরাহ করতে হবে এবং এটি সম্পন্ন হয়েছে।

এর একটি খারাপ উদাহরণ হ'ল ওপেনগেল থেকে অবচয় এবং অপসারণ glBegin, glEnd, এবং সমস্ত ম্যাট্রিক্স গণনা স্টাফ, যদি আপনি ওপেনগ্ল 3 বা তার উপরের কোডটিতে কাজ করতে চান তবে আপনার ভার্টেক্স বাফার ব্যবহারের জন্য পুরো রেন্ডারিং কোডটি পুনরায় লিখতে হবে।


-1

আমি মনে করি এটি আরও ভাল উপায় আছে তা লোকেদের জানানোর এটি একটি ভাল উপায়। আমি কেবল একটি ফাংশনটি অদৃশ্য হয়ে যাওয়ার চেয়ে একটি দুর্দান্ত অবচয়কে পছন্দ করি।

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