ব্যতিক্রম ব্যতীত সি ++ এর জন্য কি কোনও বাস্তব-বিশ্বের মামলা রয়েছে? [বন্ধ]


40

ইন সি ওভার সি ++ ব্যবহার করতে হলে, এবং সি ++ উপর সি? একটি বিবৃতি কব্জি আছে। কোড আকারে / সি ++ ব্যতিক্রম:

জেরির উত্তর (অন্যান্য বিষয়গুলির মধ্যে):

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

যার প্রতি আমি জিজ্ঞাসা করলাম কেন এমন হবে, যার জেরির প্রতিক্রিয়া:

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

প্রযুক্তিগত বাস্তব বিশ্ব স্তরে যা আমি সত্যিই সন্দেহ করি না।


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


সংযোজন: তাদের উত্তরগুলি বিশদভাবে জানাতে ইচ্ছুকদের জন্য, কীভাবে কোনও ব্যাতিক্রম বাদ দেওয়া যায় তা বোঝানো ভাল লাগবে:

  • এসটিএল সংগ্রহ ( vector, ...) সঠিকভাবে কাজ করে না (বরাদ্দ ব্যর্থতার খবর দেওয়া যায় না)
  • new ফেলতে পারি না
  • নির্মাণকারীরা ব্যর্থ হতে পারে না

1
জেএসএফ সি ++। জেটস এবং ব্যতিক্রমগুলি মিশ্রিত হয় না।
কোডার

1
ব্যতিক্রম (এবং সি ++ সাধারণভাবে) নিয়ে সমস্যা সম্পর্কে কিছু আলোকিত তথ্য 250bpm.com/blog:4
অম্ব

1
@ আমরোজবিজাক - আমি আপনার সাথে লিঙ্ক করেছেন এমন পোস্টের একটি মন্তব্য থেকে ডেডজিমিকে উদ্ধৃত করব: উদ্ধৃতি: "আমার কাছে মনে হচ্ছে আপনি ব্যতিক্রমগুলি বুঝতে পারেন না।" আমি রাজী. লেখক স্পষ্টভাবে ব্যতিক্রম হ্যান্ডলিংয়ের একটি জগাখিচুড়ি করেছেন, সেই পোস্টে তিনি যে উদাহরণগুলি দিয়েছেন তা দেখে।
মার্টিন বা

উত্তর:


35

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


এছাড়াও, এর আরেকটি উদাহরণ হ'ল আরডিনো হার্ডওয়্যার এসডিকে ইউএসনিগ জিসিসি ব্যতীত সি ++ এ সক্রিয় করা হয়নি, এবং এসটিএল সরবরাহ করা হয়নি এমন অন্যান্য জিনিস


কিছু প্রযুক্তিগত কারণ রয়েছে, ভাল বা খারাপ যাই হোক না কেন, এটি আমার পরামর্শ নয়, কারণ শুনেছি:

  1. বেশিরভাগ কনসোলগুলি সীমিত মেমরি এবং প্রক্রিয়াকরণের সময় সহ সত্যই এম্বেড করা সিস্টেম। ভবিষ্যতের কনসোলগুলিতে এটি এতটা সত্য হবে না তবে পিসির তুলনায় বর্তমানগুলি এখনও প্রিটি সীমাবদ্ধ। কিছু পোর্টেবল কনসোলগুলি যেকোন স্মার্টফোনের চেয়ে প্রোগ্রামের জন্য কার্যকরভাবে শক্ত, উদাহরণস্বরূপ এনডিএস। ব্যতিক্রম বৈশিষ্ট্যটি মেমোরি এবং কিছুটা গতির ব্যয় যুক্ত করে, আপনি এটি ব্যবহার না করলেও। আপনি নিজে যাচাই করতে পারেন, এটি পিসিতেও সত্য।
  2. কনসোলে থাকা ভিডিও গেমগুলি ক্রাশ করতে পারে না। তাদের এমনভাবে পরীক্ষা করতে হবে যাতে কোনও ক্রাশ বা কোনও মৃত-শেষ, কোনও শোস্টোপার এড়ানো যায় না। এজন্য কনসোল নির্মাতারা প্রকাশনার আগে গেমগুলিকে ভারী পরীক্ষা করতে বলেছেন। এর অর্থ এটিও হ'ল ব্যতিক্রমী ব্যয় পরিচালনা ব্যয় যুক্ত কনসোল গেমের ক্ষেত্রে সত্যই কার্যকর নয়। উদাহরণস্বরূপ এটি স্মার্টফোনে আরও ভাল কারণ পুনরুদ্ধার করার কিছু উপায় থাকতে পারে বা সমস্যাটি ইমেল করার জন্য কিছু কোড যুক্ত করতে পারে। বেশিরভাগ কনসোলের মতো বন্ধ প্ল্যাটফর্মগুলি এটির অনুমতি দেয় না। সুতরাং একটি ব্যতিক্রম সিস্টেম সর্বোপরি সত্যিই প্রয়োজনীয় নয়। আপনার "এটি সঠিকভাবে কাজ করতে হবে"। ;)
  3. ব্যতিক্রম পরিচালনা, যখন আপনি ত্রুটি এবং ক্র্যাশগুলিকে অনুমতি দেয় না, তার অর্থ আপনাকে একটি ত্রুটি পরিচালনার কৌশলটি প্রয়োগ করতে হবে। এ জাতীয় সিস্টেমটি যথেষ্ট জটিল হতে পারে যাতে কারও কাজে লাগাতে অনেক সময় কাজ করা যায়। গেম ডেভেলপারদের এমন বৈশিষ্ট্যগুলিতে কাজ করার বিলাসিতা নেই যা ক্র্যাশগুলিতে দরকারী বলে মনে করা হয় ...
  4. সংকলক এটি (এখনও) অনুমতি দেয় না। হ্যাঁ, এটা ঘটে।

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


হালনাগাদ:

আমি এখানে আরও একটি বিস্ময়কর উদাহরণ যুক্ত করছি: অনুসরণীয় কারণে এলএলভিএম / ক্লাং ব্যতিক্রম বা আরটিটিআই ব্যবহার করবেন না :

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

এটি বলেছিল, এলটিভিএম আরটিটিআইয়ের একটি হ্যান্ড-রোলড ফর্মের ব্যাপক ব্যবহার করে যা আইএসএ <>, castালাই <> এবং ডিন_কাস্ট <> এর মতো টেম্পলেট ব্যবহার করে। আরটিটিআইয়ের এই ফর্মটি অপ্ট-ইন এবং কোনও শ্রেণিতে যোগ করা যেতে পারে। এটি ডায়নামিক_কাস্ট <> এর চেয়ে যথেষ্ট কার্যকর।

ক্লাং তার গতির অফ সংকলন এবং স্পষ্ট ত্রুটিগুলির জন্য সুপরিচিত, তবে এটির একটি বিরল সংকলক যা সত্যই অনুসরণ করার সহজ কোড রয়েছে have


9
(3): আপনার (2) সাথে চলতে থাকলে আপনার ত্রুটি পরিচালনার কৌশল দরকার what সমস্যাগুলি উপস্থিত হবে এবং আপনার কনসোল সফ্টওয়্যারটির নরম এবং করুণভাবে ব্যর্থ হওয়া দরকার to আমার কাছে এটা স্পষ্ট নয় যে ব্যতিক্রমগুলি সম্পূর্ণ এড়ানো এটিকে যে কোনও সহজ করে তোলে।
ডেভিড থর্নলি

6
শক্তভাবে নিয়ন্ত্রিত রানটাইম পরিবেশের সমস্ত দুর্দান্ত উদাহরণ যেখানে ত্রুটিগুলি সঠিকভাবে পরিচালনা করা হয় এবং সেখানে কোনও "ব্যতিক্রমী" ইভেন্ট নেই are
প্যাট্রিক হিউজেস

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

2
এটি একটি ভাল উত্তর, আমি এটি যুক্ত করতে চাই এমনকি যদি কোনও ব্যতিক্রম বুবল্ড হয়ে যায় এবং ব্যবহারকারীকে ত্রুটির সাথে উপস্থাপন করে তবে ডি-প্যাড দিয়ে সে কী করবে? শেষ ব্যবহারকারীর একমাত্র আসল সমাধান একটি পুনঃসূচনা।
আনন

2
আমি মূর্খ উদাহরণটি অপসারণ করলাম কারণ তাদের দলের কেউ না ছাড় ছাড়াকে বোঝাতে বলেছিলেন "ব্যতিক্রম না করা" বোঝাতে নয় "নিয়মের ব্যতিক্রম"। দেখুন permalink.gmane.org/gmane.comp.lib.boost.devel/231377
Klaim

9

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

এগুলি অক্ষম করার জন্য আমার প্রাথমিক কারণগুলি এখানে:

বাইনারি সামঞ্জস্য

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

এক্সিকিউটেবল আকার

আমি ব্যতিক্রমী মুক্ত প্রোগ্রামের বাইনারি মাপগুলি এখানে লিখেছি, ব্যতীত এবং ব্যতিক্রমগুলি সক্ষম করে দিয়েছি:

ব্যতিক্রম ছাড়া:

  • এক্সিকিউটেবল + নির্ভরতা: 330
  • চূড়ান্ত কার্যকর এক্সিকিউটেবল (বিল্ড বিল্ড): 37

ব্যতিক্রম সহ:

  • এক্সিকিউটেবল + নির্ভরতা: 380
  • চূড়ান্ত স্ট্রিপড এক্সিকিউটেবল (রিলিজ বিল্ড): 44

অনুস্মারক: এটি গ্রন্থাগার এবং প্রোগ্রামগুলির একটি সংগ্রহ যা শূন্য নিক্ষেপ / ক্যাচ ধারণ করে। সংকলক পতাকা সি ++ স্ট্যান্ডার্ড লাইব্রেরিতে ব্যতিক্রম সক্ষম করে । সুতরাং, প্রকৃত বিশ্বে ব্যয় এই উদাহরণে দেখা যায় 19% এরও বেশি।

সংকলক: আপেল জিসিসি 4.2 + এলএলভিএম। এমবি আকারে।

দ্রুততা

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

প্রোগ্রামের সঠিকতা

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

সরলতা

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

ইতিহাস / বিদ্যমান কোড

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

downsides

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


+1 দুর্দান্ত তথ্য! (যদিও আমি সরলতার অনুচ্ছেদের সাথে একমত নই)
মার্টিন বা

এটি আকর্ষণীয় হবে যদি আপনার কাছে কেবলমাত্র কোনও ব্যর্থ নির্মাণকারী থাকে এবং কীভাবে আপনি বরাদ্দটি হ্যান্ডেল করেন (- ব্যর্থতা)।
মার্টিন বা

@ মার্টিন ১) মতবিরোধ করা বেশ ঠিক আছে। আমি বুঝতে পারি যে বেশিরভাগ ডিভস একাধিক কারণে ব্যতিক্রম অক্ষম করার সাথে একমত নয়। সরলতার জন্য, এটি প্রোগ্রামের যথার্থতার সাথে চলে। সমস্যা / অবৈধ রাজ্যগুলিকে কেবল বেশি বেশি ভ্রমণ করার অনুমতি নেই। এর অর্থ তারা ব্যর্থতাগুলি পরীক্ষা করে এবং নিখুঁতভাবে প্রস্থান করে। ঝেরিকোর পোস্টে এটি প্রতিধ্বনিত হয়।
জাস্টিন

1
@ মার্টিন 2 বি) বরাদ্দ কিছুটা জটিল। প্রথমত, গাদা বরাদ্দ সংখ্যা সংখ্যায় হ্রাস এবং আকারে বৃদ্ধি করা হয় - সেখানে অপেক্ষাকৃত কম গাদা বরাদ্দ শুরু হয়। দ্বিতীয়ত, বরাদ্দগুলি কাস্টম বরাদ্দকারীদের মধ্য দিয়ে যায়। যদি প্রাথমিকভাবে বরাদ্দকারীর জন্য বরাদ্দ সরবরাহ না করা হয় (উদাহরণস্বরূপ mallocরিটার্ন 0), বরাদ্দকারী while (1)একটি প্রাসঙ্গিক সুইচ রয়েছে এমন একটি প্রবেশ করে, তার পরে বরাদ্দের অন্য প্রচেষ্টা করা হয়। এই কোডবেসে, এটি ব্যবহৃত হত যে বরাদ্দকারীর মাধ্যমে নতুন 0 ফিরে আসতে পারে, তবে নতুন বাস্তবায়ন সূক্ষ্মভাবে কাজ করছে। (চলমান)
জাস্টিন

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

7

গুগল তাদের সি ++ স্টাইল গাইড ব্যতিক্রমগুলি অনুমোদন করে না , বেশিরভাগ historicalতিহাসিক কারণে:

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

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

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

উইন্ডোজ কোডের জন্য এই নিয়মটির কোনও ব্যতিক্রম (কোনও পাং উদ্দেশ্যে নয়) রয়েছে।

(সম্পাদকের জোর)


5

কিউটি প্রায় কখনও ব্যতিক্রম ব্যবহার করে না। Qt এ ত্রুটিগুলি ত্রুটি কোডগুলি এবং সিগন্যালের সাহায্যে স্বাক্ষরিত হয়। সরকারীভাবে বলা কারণ:

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

কিউটি কেন এত ব্যতিক্রম ব্যবহার করে?

আজ কিউটিটির একটি সাধারণ সমালোচনা হ'ল এর ব্যতিক্রম সুরক্ষাটি সম্পূর্ণ নয়।


1
ধন্যবাদ। ভাল তথ্য, যদিও আমি ভাবছি যে বেশিরভাগ কিউটি কোড ঘাঁটি সম্ভবত সংকলকটিতে ব্যতিক্রমগুলি সক্ষম করেছে কিনা ...
মার্টিন বা

4

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


1
এটি সিম্বিয়ার আধুনিক সংস্করণগুলির জন্য ধারণ করে না। সিম্বিয়ান টিআরপস এবং পাতাগুলি বাস্তব সি ++ ব্যতিক্রম হিসাবে বাস্তবায়িত হয় , তবে ইপোকস 32 এবং সিম্বিয়ার পুরানো সংস্করণগুলি অন্য উপায়ের উপর নির্ভর করে না (যদি আমি সঠিকভাবে স্মরণ করি তবে সেটজ্যাম্প / লংজ্যাম্প)।
অটো

1
@ অট্টোহার্জু: "অন্তত সরাসরি নয়" বলতে আমি এটাই বুঝি।
কিথ থম্পসন

3

আমি / কখনই / ব্যতিক্রম ব্যবহার করি না। এর জন্য বেশ কয়েকটি কারণ রয়েছে তবে দুটি প্রধান কারণ হ'ল দৃ rob় কোড উত্পাদন করার জন্য আমার কখনই তাদের প্রয়োজন হয়নি এবং তারা রানটাইমের সময় পারফরম্যান্স হ্রাস করে।

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

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

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


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

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

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

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

3

ইন যুগ্ম স্ট্রাইক ফাইটার C ++ স্ট্যান্ডার্ডের কোডিং বিয়ারনে এবং দ্বারা। আল।, যুদ্ধবিমানের হার্ড রিয়েল-টাইম প্রয়োজনীয়তার কারণে ব্যতিক্রমগুলি নিষিদ্ধ করা হয়েছে।

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

বার্জার্নের সি ++ এফএকিউ থেকে উদ্ধৃত ।

মনে রাখবেন, সি ++ সম্ভবত সমস্ত ভাষার বিস্তৃত বিভিন্ন সফ্টওয়্যার চালায় ...


জেএসএফ ++ "নতুন" (প্লেসমেন্ট নতুন ব্যতীত) এবং "মুছুন" ব্যবহার নিষিদ্ধ করে। "কীভাবে আপনি ব্যতিক্রম ছাড়াই নতুন ব্যর্থতা পরিচালনা করবেন" এর একটি উত্তর যা ...
আর্মব

@ আর্ম্ব: হ্যাঁ "দেখুন সেই প্রসঙ্গে, এমনকি বিনামূল্যে স্টোর বরাদ্দও নিষিদ্ধ!" উপরে।
ম্যাক

2

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

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


1

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

ইসি ++ নতুন হওয়ার সময় কিছুটা স্প্ল্যাশ তৈরি করার সময় আমার এটিকে যুক্ত করা উচিত, তারা বেশিরভাগই মোটামুটি শান্ত হয়ে গেছে বলে মনে হয়। আমি নিশ্চিত নই যে লোকেরা আগ্রহ হারিয়ে ফেলেছে, বা তাদের প্রথম প্রচেষ্টাটি এতটাই নিখুঁত ছিল যে এক দশক বা তারও বেশি সময় ধরে কারও সাথে এ নিয়ে বিভ্রান্ত হওয়ার কোনও কারণ দেখেনি।<closed captioning for the humor impaired>Yeah, right!</closed captioning>


একটি প্রশ্নোত্তর খুঁজছেন - caravan.net/ec2plus/question.html - আমি বলতে পারি যে এটি বেশ মারা গেছে।
মার্টিন বা

1

একটি ভাল উদাহরণ কার্নেল মোড প্রোগ্রামিং।

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

সাধারণত আপনি নিজের newএবং deleteঅপারেটরগুলি সংজ্ঞায়িত করেন । এছাড়াও আমি বেশ কার্যকর placement newএবং a + c ++ 11 টি মূল্যের উল্লেখ খুঁজে পেয়েছি। ব্যতিক্রমগুলির উপর নির্ভর করে এমন কোনও এসটিএল বা অন্যান্য সি ++ ব্যবহারকারী-মোড লাইব্রেরি ব্যবহার করা যাবে না।


0

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

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