আমি সি ++ তে সিস্টেমেটিক ত্রুটি হ্যান্ডলিংটি দেখছিলাম - আন্দ্রেই আলেকজান্দ্রেস্কু তিনি দাবি করেছেন যে সি ++ এ ব্যতিক্রমগুলি খুব ধীর।
এটি কি এখনও সি ++ 98 এর জন্য সত্য?
আমি সি ++ তে সিস্টেমেটিক ত্রুটি হ্যান্ডলিংটি দেখছিলাম - আন্দ্রেই আলেকজান্দ্রেস্কু তিনি দাবি করেছেন যে সি ++ এ ব্যতিক্রমগুলি খুব ধীর।
এটি কি এখনও সি ++ 98 এর জন্য সত্য?
উত্তর:
ব্যতিক্রমগুলির জন্য আজ ব্যবহৃত প্রধান মডেল (Itanium ABI, VC ++ 64 বিট) হ'ল জিরো-কস্ট মডেলের ব্যতিক্রম।
ধারণাটি হ'ল গার্ড স্থাপনের মাধ্যমে সময় হারাবার পরিবর্তে এবং স্পষ্টভাবে সর্বত্র ব্যতিক্রমগুলির উপস্থিতি যাচাইয়ের পরিবর্তে, সংকলকটি একটি সাইড টেবিল তৈরি করে যা হ্যান্ডলারের তালিকায় একটি ব্যতিক্রম (প্রোগ্রাম কাউন্টার) ফেলে দিতে পারে এমন কোনও পয়েন্টকে মানচিত্র করে। যখন একটি ব্যতিক্রম নিক্ষেপ করা হয়, তখন এই তালিকাটি ডান হ্যান্ডলার বাছাই করার জন্য পরামর্শ নেওয়া হয় (যদি থাকে) এবং স্ট্যাকটি অযাচিত।
সাধারণ if (error)কৌশলটির তুলনায় :
ifযখন ব্যতিক্রম ঘটে তখন প্রায় 10x / 20x এ ব্যয় হয়ব্যয়টি অবশ্য পরিমাপের জন্য তুচ্ছ নয়:
dynamic_castপ্রতিটি হ্যান্ডলারের মূলত একটি পরীক্ষা)সুতরাং, বেশিরভাগ ক্যাশে মিস হয় এবং খাঁটি সিপিইউ কোডের তুলনায় তুচ্ছ নয়।
দ্রষ্টব্য: আরও তথ্যের জন্য, TR18015 রিপোর্ট পড়ুন, অধ্যায় 5.4 ব্যতিক্রম হ্যান্ডলিং (পিডিএফ)
সুতরাং, হ্যাঁ, ব্যতিক্রমগুলি ব্যতিক্রমী পথে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে তারা এগুলি ifসাধারণভাবে স্পষ্টত চেক ( কৌশল) এর চেয়ে আরও দ্রুত er
দ্রষ্টব্য: আন্ড্রেই আলেকজান্দ্রেস্কু এই "তাত্পর্য" নিয়ে প্রশ্ন করেছেন বলে মনে হচ্ছে। আমি ব্যক্তিগতভাবে উভয় উপায়ে জিনিসগুলি দুলতে দেখেছি, কিছু প্রোগ্রাম ব্যতিক্রমগুলির সাথে দ্রুততর হয় এবং অন্যগুলি শাখাগুলি দিয়ে দ্রুত হয়, তাই কিছু পরিস্থিতিতে অবশ্যই অপ্টিমাইজিবলাইটের ক্ষতি হতে পারে বলে মনে হয়।
এটা কোন ব্যাপার ?
আমি দাবি করব না এটি হয় না। একটি প্রোগ্রাম পাঠযোগ্যতার কথা মাথায় রেখেই লেখা উচিত , পারফরম্যান্স নয় (কমপক্ষে, প্রথম মানদণ্ড হিসাবে নয়)। যখন কেউ প্রত্যাশা করে যে কলার ঘটনাস্থলে ব্যর্থতাটি পরিচালনা করতে বা করতে চান না এবং এটি স্ট্যাকটি পাস করেন তখন ব্যতিক্রমগুলি ব্যবহার করতে হবে। বোনাস: সি ++ এ 11 টি ব্যতিক্রম স্ট্যান্ডার্ড লাইব্রেরি ব্যবহার করে থ্রেডের মধ্যে মার্শাল করা যেতে পারে।
যদিও এটি সূক্ষ্ম, আমি দাবি করি যে এটি map::findনিক্ষেপ করা উচিত নয় তবে আমি map::findফেরত দিয়ে ঠিক করছি checked_ptrযা ছুঁড়ে মারার চেষ্টা করা যদি এটির অবজ্ঞার প্রচেষ্টা ব্যর্থ হয় কারণ এটি নাল: পরবর্তী ক্ষেত্রে যেমন আলেকজান্দ্রেস্কু প্রবর্তিত শ্রেণীর ক্ষেত্রে, আহ্বানকারী বেছে নেয় সুস্পষ্ট চেক এবং ব্যতিক্রমগুলির উপর নির্ভর করার মধ্যে। ফোনকারীকে তাকে আরও দায়িত্ব না দিয়ে ক্ষমতা দেওয়া সাধারণত ভাল ডিজাইনের লক্ষণ।
abortকরলে আপনাকে বাইনারি-আকারের পদচিহ্নগুলি পরিমাপ করতে এবং লোড-টাইম / আই-ক্যাশে একইরকম আচরণ করে তা পরীক্ষা করে। অবশ্যই, abort
যখন প্রশ্ন পোস্ট করা হয়েছিল আমি ট্যাক্সি অপেক্ষায় ডাক্তারের কাছে যাচ্ছিলাম, সুতরাং আমার তখন কেবল একটি সংক্ষিপ্ত মন্তব্যের জন্য সময় ছিল। তবে এখন মন্তব্য এবং উত্সাহিত এবং নিম্নরূপ দেওয়া আমার নিজের উত্তরটি আরও ভাল করে যুক্ত করব। এমনকি ম্যাথিউয়ের উত্তর ইতিমধ্যে বেশ ভাল।
দাবি পুনরায়
"আমি সি ++ তে সিস্টেমেটিক ত্রুটি হ্যান্ডলিং দেখছিলাম - আন্দ্রে আলেকজান্দ্রেস্কু তিনি দাবি করেছেন যে সি ++ এ ব্যতিক্রমগুলি খুব ধীর গতিতে।"
যদি আন্ড্রেই আক্ষরিকভাবে এটি দাবি করেন, তবে একবারের জন্য তিনি খুব বিভ্রান্তিকর, যদি পুরোপুরি ভুল না হয়। উত্থাপিত / নিক্ষিপ্ত ব্যতিক্রমগুলির জন্য প্রোগ্রামিং ভাষা নির্বিশেষে ভাষার অন্যান্য মৌলিক ক্রিয়াকলাপের তুলনায় সর্বদা ধীর । বর্ণিত দাবির সূত্র অনুসারে কেবল অন্য ভাষাগুলির তুলনায় কেবল সি ++ বা অন্যান্য ক্ষেত্রে সি ++ তে নয়।
সাধারণভাবে, বেশিরভাগ ভাষা নির্বিশেষে, দুটি মূল ভাষার বৈশিষ্ট্য যা বিশদের চেয়ে ধীরে ধীরে মাত্রার অর্ডার হয়, কারণ তারা রুটিনগুলির কলগুলিতে অনুবাদ করে যা জটিল ডেটা কাঠামো পরিচালনা করে,
ব্যতিক্রম নিক্ষেপ, এবং
গতিশীল মেমরি বরাদ্দ।
আনন্দের সাথে সি ++ এ সময়-সমালোচনামূলক কোড উভয়ই এড়ানো যায় avoid
দুর্ভাগ্যক্রমে C ++ এর ডিফল্ট দক্ষতাটি খুব কাছাকাছি চলে আসার পরেও নিখরচায় দুপুরের খাবারের মতো জিনিস নেই । :: এবং নিম্ন বিমূর্ততা মানে বৃহত্তর "জটিলতা"।
বৃহত্তর জটিলতা মানে রক্ষণাবেক্ষণে বেশি সময় ব্যয় করা এবং কোড পুনরায় ব্যবহার থেকে সামান্য বা কোনও লাভ নয়, যা আসল আর্থিক ব্যয়, এমনকি অনুমান করা বা পরিমাপ করা কঠিন হলেও। অর্থাত, সি ++ সহ কেউ, যদি ইচ্ছা হয় তবে এক্সিকিউশন দক্ষতার জন্য কিছু প্রোগ্রামার দক্ষতার বাণিজ্য করতে পারেন। এটি করা মূলত একটি প্রকৌশল এবং অন্ত্র-অনুভূতির সিদ্ধান্ত, কারণ বাস্তবে কেবল লাভ নয়, ব্যয়টি সহজেই অনুমান এবং পরিমাপ করা যায়।
হ্যাঁ, আন্তর্জাতিক সি ++ প্রমিতকরণ কমিটি সি ++ পারফরম্যান্স, টিআর ১80০১৫ এর একটি প্রযুক্তিগত প্রতিবেদন প্রকাশ করেছে ।
মূলত এর অর্থ হ্যান্ডলারের সন্ধানের কারণে throwএকটি intঅ্যাসাইনমেন্টের সাথে তুলনা করে খুব বেশি সময় লাগতে পারে।
যেমন TR18015 এর 5.5 বিভাগে "ব্যতিক্রমগুলি" আলোচনা করেছে সেখানে দুটি মূল ব্যতিক্রম হ্যান্ডলিং বাস্তবায়ন কৌশলগুলি রয়েছে,
প্রতিটি tryব্লক গতিশীলভাবে ব্যতিক্রমী ক্যাপচার সেটআপ করার পদ্ধতিটি এমন একটি ব্যতিক্রম ছোঁড়ার সময় হ্যান্ডলারের গতিশীল শৃঙ্খলা অনুসন্ধান করা হয় এবং
পদ্ধতির যেখানে সংকলক স্থির বর্ণন আপ টেবিলগুলি উত্পন্ন করে যা কোনও ছোঁড়া ব্যতিক্রমের জন্য হ্যান্ডলারটি নির্ধারণ করতে ব্যবহৃত হয়।
প্রথম খুব নমনীয় এবং সাধারণ পদ্ধতির প্রায় 32-বিট উইন্ডোতে বাধ্য করা হয়, যখন 64৪-বিট জমিতে এবং * নিক্স-জমিতে দ্বিতীয়টি আরও কার্যকর দক্ষতা সাধারণত ব্যবহৃত হয়।
সেই প্রতিবেদনটি যেমন আলোচনা করেছে, প্রতিটি পদ্ধতির জন্য তিনটি প্রধান ক্ষেত্র রয়েছে যেখানে ব্যতিক্রম দক্ষতার উপর প্রভাবগুলি পরিচালনা করে:
try-ব্লকস,
নিয়মিত ফাংশন (অনুকূলিতকরণের সুযোগ), এবং
throw-প্রকাশ।
মূলত, ডায়নামিক হ্যান্ডলার পদ্ধতির (32-বিট উইন্ডোজ) ব্যতিক্রম হ্যান্ডলিংয়ের প্রভাবগুলি tryবেশিরভাগ ভাষা নির্বিশেষে (কারণ এটি উইন্ডোজের স্ট্রাকচার্ড এক্সসেপশন হ্যান্ডলিং স্কিম দ্বারা বাধ্য করা হয় ), ব্লকগুলির উপর প্রভাব ফেলে , যখন স্থির টেবিল পদ্ধতির জন্য প্রায় শূন্য ব্যয় হয় try- ব্লক এটি নিয়ে আলোচনা করা কোনও এসও উত্তরের জন্য ব্যবহারিক চেয়ে অনেক বেশি জায়গা এবং গবেষণা নেবে। সুতরাং, বিশদ জন্য রিপোর্ট দেখুন।
দুর্ভাগ্যক্রমে ২০০ 2006 সালের রিপোর্টটি ২০১২ সালের শেষের দিকে ইতোমধ্যে কিছুটা তারিখ পেয়েছে এবং যতদূর আমি জানি যে এর চেয়ে নতুন তুলনামূলক কিছু নেই।
আরেকটি গুরুত্বপূর্ণ দৃষ্টিভঙ্গি হ'ল পারফরম্যান্সে ব্যতিক্রমগুলির ব্যবহারের প্রভাবটি সমর্থনকারী ভাষার বৈশিষ্ট্যগুলির বিচ্ছিন্ন দক্ষতার চেয়ে খুব আলাদা, কারণ প্রতিবেদনে উল্লেখ করা হয়েছে যে,
"ব্যতিক্রম হ্যান্ডলিংয়ের বিষয়টি বিবেচনা করার সময়, এটি ত্রুটিগুলি মোকাবেলার বিকল্প পদ্ধতির সাথে বিপরীত হতে হবে।"
উদাহরণ স্বরূপ:
বিভিন্ন প্রোগ্রামিং শৈলীর কারণে রক্ষণাবেক্ষণ ব্যয় (সঠিকতা)
অপ্রয়োজনীয় কল সাইট ifব্যর্থতা বনাম কেন্দ্রীভূতtry
ক্যাশিংয়ের সমস্যাগুলি (যেমন সংক্ষিপ্ত কোডটি ক্যাশে ফিট করতে পারে)
প্রতিবেদনে বিবেচনা করার দিকগুলির ভিন্ন তালিকা রয়েছে, তবে যাইহোক মৃত্যুদন্ড কার্যকর করার দক্ষতা সম্পর্কে কঠোর তথ্য অর্জনের একমাত্র ব্যবহারিক উপায় সম্ভবত ব্যতিক্রম ব্যবহার করে এবং ব্যতিক্রমগুলি ব্যবহার না করা, বিকাশের সময় একটি নির্ধারিত ক্যাপের মধ্যে এবং বিকাশকারীদের সাথে একই প্রোগ্রাম প্রয়োগ করা to প্রতিটি উপায়ের সাথে পরিচিত, এবং তারপরে পরিমাপ করুন ।
সঠিকতা প্রায় সবসময় দক্ষতা ট্রাম্প।
ব্যতিক্রম ছাড়া, নিম্নলিখিতগুলি সহজেই ঘটতে পারে:
কিছু কোড পি বোঝানো হয় কোনও সংস্থান অর্জন করতে বা কিছু তথ্য গণনা করা।
কলিং কোড সিটির সাফল্য / ব্যর্থতার জন্য পরীক্ষা করা উচিত ছিল, তবে তা নয়।
সি-র অনুসরণের পরে একটি অস্তিত্বের সংস্থান বা অবৈধ তথ্য ব্যবহৃত হয়, ফলে সাধারণ বিপর্যয় ঘটে।
মূল সমস্যাটি হচ্ছে পয়েন্ট (2), যেখানে সাধারণ রিটার্ন কোড স্কিম সহ কলিং কোড সি চেক করতে বাধ্য হয় না।
দুটি প্রধান পন্থা যা এই ধরণের চেক করতে বাধ্য করে:
যেখানে পি ব্যর্থ হয় তখন সরাসরি একটি ব্যতিক্রম ছুঁড়ে দেয়।
যেখানে পি এমন কোনও বস্তু প্রদান করে যা সি এর প্রধান মান (অন্যথায় ব্যতিক্রম বা সমাপ্তি) ব্যবহারের আগে পরিদর্শন করতে হবে ।
দ্বিতীয় পন্থাটি ছিল, এএফএআইকি, বার্টন এবং ন্যাকম্যান দ্বারা প্রথম তাদের গ্রন্থ * বৈজ্ঞানিক ও প্রকৌশল সি ++ এ বর্ণনা করা হয়েছিল: উন্নত প্রযুক্তি এবং উদাহরণ সহ একটি ভূমিকা , যেখানে তারা Fallowএকটি " ক্লাস " সম্ভাব্য ফাংশন ফলাফলের জন্য ডাকা একটি ক্লাস চালু করেছিল । অনুরূপ একটি ক্লাস বলা optionalহয় এখন বুস্ট লাইব্রেরি দ্বারা অফার করা হয়। এবং আপনি নন-পিওডি ফলাফলের ক্ষেত্রে মান হিসাবে ক্যারিয়ার Optionalব্যবহার করে সহজেই একটি শ্রেণি প্রয়োগ করতে পারেন std::vector।
প্রথম পদ্ধতির সাথে কলিং কোড সি এর ব্যতিক্রম হ্যান্ডলিং কৌশলগুলি ব্যবহার করার বিকল্প নেই। তবে দ্বিতীয় পদ্ধতির সাথে, কলিং কোড সি নিজেই সিদ্ধান্ত নিতে পারে যে ifভিত্তিক চেকিং করা উচিত, বা সাধারণ ব্যতিক্রম হ্যান্ডলিং করা উচিত। সুতরাং, দ্বিতীয় পদ্ধতির প্রোগ্রামার বনাম এক্সিকিউশন সময় দক্ষতা ট্রেড অফকে সমর্থন করে।
"আমি জানতে চাই যে এটি এখনও সি ++ 98 এর জন্য সত্য?"
সি ++ 98 প্রথম সি ++ স্ট্যান্ডার্ড ছিল। ব্যতিক্রমগুলির জন্য এটি ব্যতিক্রম শ্রেণির একটি স্ট্যান্ডার্ড হায়ারার্কি চালু করেছে (দুর্ভাগ্যক্রমে বরং অসম্পূর্ণ)। পারফরম্যান্সের মূল প্রভাবটি ব্যতিক্রমের স্পেসিফিকেশন (সি ++ 11-এ সরানো) এর সম্ভাবনা ছিল , যা মূল উইন্ডোজ সি ++ কম্পাইলার দ্বারা পুরোপুরি কখনও প্রয়োগ করা হয়নি ভিজ্যুয়াল সি ++: ভিজ্যুয়াল সি ++ সি ++ 98 ব্যতিক্রম স্পেসিফিকেশন সিনট্যাক্স গ্রহণ করে তবে কেবল উপেক্ষা করে ব্যতিক্রম স্পেসিফিকেশন।
সি ++ 03 কেবলমাত্র সি ++ 98 এর একটি প্রযুক্তিগত করিয়েনডাম ছিল। সি ++ 03-এ কেবলমাত্র নতুনটি ছিল মান শুরুর দিকে । যার ব্যতিক্রম কিছু করার নেই।
সি ++ 11 স্ট্যান্ডার্ড সাধারণ ব্যতিক্রমের স্পেসিফিকেশনগুলি মুছে ফেলা হয়েছে এবং noexceptকীওয়ার্ডের সাথে প্রতিস্থাপন করা হয়েছে ।
সি ++ 11 স্ট্যান্ডার্ড ব্যতিক্রমগুলি সংরক্ষণ এবং পুনর্বিবেচনার জন্য সমর্থন যোগ করেছে, যা সি ভাষা কলব্যাকগুলিতে সি ++ ব্যতিক্রম প্রচারের জন্য দুর্দান্ত। এই সমর্থনটি কীভাবে বর্তমান ব্যতিক্রম সংরক্ষণ করা যায় তা কার্যকরভাবে সীমাবদ্ধ করে। তবে, যতদূর আমি জানি যে পারফরম্যান্সের উপর প্রভাব ফেলবে না, নতুন কোড ব্যতিক্রম হ্যান্ডলিংয়ে আরও সহজেই সি ল্যাঙ্গুয়েজ কলব্যাকের উভয় পাশে ব্যবহার করা যেতে পারে except
longjmpহ্যান্ডলারের কাছে to
try..finallyকনস্ট্রাক্ট স্ট্যাক unwinding ছাড়া বাস্তবায়িত করা যাবে না। এফ #, সি # এবং জাভা সমস্ত try..finallyস্ট্যাক আনওয়াইন্ডিং ব্যবহার না করে বাস্তবায়ন করে। আপনি কেবল longjmpহ্যান্ডলারের কাছে (যেমন আমি ইতিমধ্যে ব্যাখ্যা করেছি)।
আপনি কোডটি অ্যাসেমব্লিতে রূপান্তর না করে বা এটির মাপকাঠি না করা পর্যন্ত আপনি কখনও কর্মক্ষমতা সম্পর্কে দাবি করতে পারবেন না।
আপনি যা দেখেন তা এখানে: (কুইক-বেঞ্চ)
ত্রুটি কোড সংঘটনটির শতাংশের সংবেদনশীল নয়। ব্যতিক্রমগুলি যতক্ষণ না তাদের ফেলে দেওয়া হয় ততক্ষণ কিছুটা ওভারহেড থাকে। একবার এগুলি ছুঁড়ে ফেলার পরে, দুর্দশা শুরু হয়। এই উদাহরণে, এটি 0%, 1%, 10%, 50% এবং 90% ক্ষেত্রে ছুঁড়ে ফেলা হয়। ব্যতিক্রমগুলি যখন 90% সময় নিক্ষেপ করা হয়, তখন কোডগুলি 10% সময় ব্যতিক্রম হয় এমন ক্ষেত্রেের চেয়ে 8 গুণ ধীর হয়। আপনি যেমন দেখেন, ব্যতিক্রমগুলি সত্যই ধীর। যদি ঘন ঘন নিক্ষেপ করা হয় তবে সেগুলি ব্যবহার করবেন না। যদি আপনার অ্যাপ্লিকেশনটির কোনও রিয়েল-টাইম প্রয়োজনীয়তা না থাকে তবে এগুলি খুব কমই ঘটে যদি সেগুলি নির্দ্বিধায় ফেলে দিন।
সেগুলি সম্পর্কে আপনি অনেকগুলি পরস্পরবিরোধী মতামত দেখেন। তবে শেষ পর্যন্ত, ব্যতিক্রমগুলি কি ধীর? আমি বিচার করি না। শুধু মানদণ্ড দেখুন।
এটি সংকলকের উপর নির্ভর করে।
উদাহরণস্বরূপ, জিসিসি ব্যতিক্রমগুলি পরিচালনা করার সময় খুব খারাপ অভিনয় করার জন্য পরিচিত ছিল, তবে এটি গত কয়েক বছরে যথেষ্ট উন্নত হয়েছে better
তবে নোট করুন যে হ্যান্ডলিং ব্যতিক্রমগুলি - যেমন নামটি বলেছে - আপনার সফ্টওয়্যার ডিজাইনের নিয়মের চেয়ে ব্যতিক্রম হওয়া উচিত। যখন আপনার কাছে এমন অ্যাপ্লিকেশন রয়েছে যা প্রতি সেকেন্ডে এতগুলি ব্যতিক্রম ছুঁড়ে ফেলেছে যা এটি কার্য সম্পাদনকে প্রভাবিত করে এবং এটি এখনও স্বাভাবিক ক্রিয়াকলাপ হিসাবে বিবেচিত হয়, তখন আপনার বরং জিনিসগুলি আলাদাভাবে করার বিষয়ে চিন্তা করা উচিত।
ব্যতিক্রমগুলি হ'ল সমস্ত আড়ষ্ট ত্রুটি হ্যান্ডলিংয়ের কোডটি বাইরে না পেয়ে কোডটিকে আরও পঠনযোগ্য করার এক দুর্দান্ত উপায়, তবে তারা সাধারণ প্রোগ্রাম প্রবাহের অংশ হওয়ার সাথে সাথে এগুলি অনুসরণ করা সত্যই শক্ত হয়ে যায়। মনে রাখবেন যে একটি ছদ্মবেশে throwবেশ goto catch।
throw new Exceptionএকটি জাভা-আইএসএম। একটি নিয়ম হিসাবে কখনও পয়েন্টার নিক্ষেপ করা উচিত ।
হ্যাঁ, তবে তাতে কিছু যায় আসে না। কেন?
এটি পড়ুন:
https://blogs.msdn.com/b/ericlippert/archive/2008/09/10/vexing-exception.aspx
মূলত এটি বলে যে আলেকজান্দ্রেস্কুর বর্ণিত ব্যতিক্রমগুলি ব্যবহার করা (50x ধীরগতির কারণ তারা catchযেমন ব্যবহার করে else) ঠিক ততই ভুল। পিপিএল যারা এই কাজটি করতে চান তাদের জন্য বলা হচ্ছে আমি সি ++ 22 :) এর মতো কিছু যুক্ত করব:
(দ্রষ্টব্য এটি মূল ভাষা হতে হবে যেহেতু এটি মূলত বিদ্যমানটি থেকে কোড তৈরির কোড সংকলক)
result = attempt<lexical_cast<int>>("12345"); //lexical_cast is boost function, 'attempt'
//... is the language construct that pretty much generates function from lexical_cast, generated function is the same as the original one except that fact that throws are replaced by return(and exception type that was in place of the return is placed in a result, but NO exception is thrown)...
//... By default std::exception is replaced, ofc precise configuration is possible
if (result)
{
int x = result.get(); // or result.result;
}
else
{
// even possible to see what is the exception that would have happened in original function
switch (result.exception_type())
//...
}
পিএস এছাড়াও নোট করুন যে ব্যাতিক্রমগুলি যদি ধীর হয় তবে ... কার্যকর করার সময় আপনি কোডের সেই অংশটিতে প্রচুর সময় ব্যয় করবেন না এমন সমস্যা নেই ... উদাহরণস্বরূপ যদি ফ্লোট বিভাগটি ধীর হয় এবং আপনি এটি 4x করেন আপনি যদি এফপি বিভাগে আপনার 0.3% সময় ব্যয় করেন তবে তা দ্রুতই তত গুরুত্বপূর্ণ নয় ...
সিলিকোতে এর প্রয়োগটি নির্ভর করে বলেছে, তবে সাধারণ ব্যতিক্রমগুলি কোনও বাস্তবায়নের জন্য ধীর বলে বিবেচিত হয় এবং পারফরম্যান্স নিবিড় কোডে ব্যবহার করা উচিত নয়।
সম্পাদনা: আমি বলছি না যে এগুলি মোটেই ব্যবহার করবেন না তবে পারফরম্যান্স নিবিড় কোডের জন্য এগুলি এড়ানো ভাল।