সাধারণত আমি "অকাল অপ্টিমাইজেশন" শব্দটি ঘৃণা করি তবে এটি এর পুনরুদ্ধার করে। উল্লেখ্য যে, Knuth ব্যবহার করতে ঠেলাঠেলি প্রেক্ষাপটে এই বিখ্যাত উদ্ধৃতি ব্যবহার করা মূল্য goto
অনুক্রমে কোড গতি বাড়াতে মধ্যে বিবৃতির সমালোচনা এলাকায়। এটিই মূল বিষয়: সমালোচনামূলক পথ।
তিনি goto
কোডটি দ্রুততর করার জন্য ব্যবহার করার পরামর্শ দিচ্ছিলেন কিন্তু সেই প্রোগ্রামারদের বিরুদ্ধে সতর্কবাণী রেখেছিলেন যারা কোডের জন্য শিকার এবং কুসংস্কারের ভিত্তিতে এই ধরণের কাজ করতে চান যা এমনকি সমালোচনাও নয়।
পক্ষপাতী switch
যতটা সম্ভব বিবৃতি অবিশেষে একটি কোডবেস সর্বত্র (থাকুক বা না থাকুক কোন ভারী লোড পরিচালিত হয়) কি Knuth "পেনি ভিত্তিক এবং পাউন্ড-নির্বোধ" প্রোগ্রামার যারা সারাদিন বজায় রাখার জন্য তাদের "অপ্টিমাইজ সংগ্রাম ব্যয় কল ধ্রুপদী উদাহরণ "কোড যা পাউন্ডের উপর পেনিগুলি সংরক্ষণ করার চেষ্টা করার ফলে একটি ডিবাগিং দুঃস্বপ্নে পরিণত হয়েছে। এই জাতীয় কোড খুব কমই প্রথম স্থানে কার্যকর রাখার জন্য খুব কমই রক্ষণাবেক্ষণযোগ্য।
সে ঠিক আছে?
তিনি খুব বেসিক দক্ষতার দৃষ্টিকোণ থেকে সঠিক। আমার জ্ঞানের কোনও সংকলক পলিমারফিক কোডটি অবজেক্টস এবং ডায়নামিক প্রেরণের সাথে জড়িত কোনও সুইচ স্টেটমেন্টের চেয়ে ভাল করতে পারে না। পলিমারফিক কোড থেকে ইনলাইনড কোডে আপনি কখনই এলইউটি বা লাফ টেবিলটি শেষ করতে পারবেন না, যেহেতু এই জাতীয় কোডটি সংকলকটির জন্য একটি অপ্টিমাইজার বাধা হিসাবে পরিবেশন করে (গতিশীল প্রেরণের সময় পর্যন্ত কোন ফাংশনটি কল করতে হবে তা তা জানতে পারে না) পড়ে)।
জাম্প টেবিলের ক্ষেত্রে এই ব্যয়টি না ভাবা বরং আরও অনুকূলিতকরণ বাধার ক্ষেত্রে আরও কার্যকর useful পলিমারফিজমের জন্য, কলিংটি Base.method()
কম্পাইলারকে এটি জানার অনুমতি দেয় না method
যে ভার্চুয়াল, সিল না করে থাকলে এবং কোনটি ওভাররাইড করা যেতে পারে কোন ফাংশনটি আসলে শেষ হবে । যেহেতু এটি জানে না যে কোন ফাংশনটি আসলে আগাম ডাকা হবে, তাই এটি ফাংশন কলটি অপ্টিমাইজ করতে পারে না এবং অপ্টিমাইজেশান সিদ্ধান্ত নিতে আরও তথ্য ব্যবহার করতে পারে না, যেহেতু এটি আসলে জানে না যে কোন ফাংশনটিতে ডাকা হবে কোডটি সংকলিত হওয়ার সময়।
অপ্টিমাইজারগুলি তখন সর্বোত্তম হয় যখন তারা কোনও ফাংশন কলের দিকে নজর রাখতে পারে এবং অনুকূলিতকরণ করতে পারে যা কলার এবং কলিকে পুরোপুরি সমতল করে দেয় বা কমপক্ষে কলারের সাথে সবচেয়ে দক্ষতার সাথে কাজ করার জন্য কলরটিকে অনুকূলিত করে। কোন ফাংশনটি আগে থেকেই ডাকা হবে তা যদি তারা না জানে তবে তারা তা করতে পারে না।
সে কি কেবল তার পাছার কথা বলছে?
এই ব্যয়টি, যা প্রায়শই পেনিগুলির পরিমাণ হিসাবে ব্যবহার করা হয়, এটিকে একইভাবে প্রয়োগ করা কোডিং স্ট্যান্ডার্ডে পরিণত করার ন্যায্যতা প্রমাণ করার জন্য সাধারণত খুব বোকামি, বিশেষত যে জায়গাগুলির এক্সটেনসিবিলিটি প্রয়োজন হয় for খাঁটি অকালীন অপটিমাইজারের সাহায্যে আপনি যে মুখ্য বিষয়টি লক্ষ্য করতে চান তা হ'ল: তারা সামান্য পারফরম্যান্সের উদ্বেগকে কোডড স্ট্যান্ডার্ডগুলিতে রূপান্তর করতে চান যা কোনও রক্ষণাবেক্ষণের জন্য কোনও বিবেচনা ছাড়াই কোডবেজ জুড়ে সমানভাবে প্রয়োগ করা হয়।
আমি গ্রহণযোগ্য উত্তরে ব্যবহৃত "ওল্ড সি হ্যাকার" উক্তিটির প্রতি একটু অপরাধ করি, কারণ আমি তাদের মধ্যে অন্যতম one খুব সীমিত হার্ডওয়্যার থেকে শুরু করে কয়েক দশক ধরে কোডিং করা প্রত্যেকেই অকালে অপ্টিমাইজারে পরিণত হয়নি। তবুও আমি তাদের সাথেও মুখোমুখি হয়েছি এবং কাজ করেছি। তবে এই ধরণের শাখাগুলি ভুল ধারণা বা ক্যাশে মিস করার মতো জিনিসগুলি কখনই পরিমাপ করে না, তারা মনে করে যে তারা আরও ভাল করে জানে এবং কুসংস্কারের ভিত্তিতে একটি জটিল উত্পাদন কোডবেসে তাদের অদক্ষতার ধারণাটিকে ভিত্তি করে তোলে যা আজ সত্য নয় এবং কখনও কখনও সত্যও হয় না। প্রকৃতপক্ষে পারফরম্যান্স-সমালোচনামূলক ক্ষেত্রে কাজ করা লোকেরা প্রায়শই বুঝতে পারে যে কার্যকর অপ্টিমাইজেশন কার্যকর অগ্রাধিকার, এবং পেনিগুলি সংরক্ষণের জন্য একটি রক্ষণাবেক্ষণ-অবনমিত কোডিং মানকে সাধারণ করার চেষ্টা করা খুব অকার্যকর অগ্রাধিকার।
পেনিগুলি গুরুত্বপূর্ণ যখন আপনার একটি সস্তার ফাংশন থাকে যা এত বেশি কাজ করে না যা খুব শক্ত, কর্মক্ষমতা-সমালোচনামূলক লুপে এক বিলিয়ন বার বলা হয়। সেক্ষেত্রে আমরা ১ কোটি ডলার সাশ্রয় করেছি। আপনার যখন দুবার ডাকা একটি ফাংশন হয় যার জন্য দেহের একা একা হাজার হাজার ডলার লাগে তখন পেনিগুলি শেভ করা not গাড়ি কেনার সময় আপনার পেনিসের উপর ঝাঁকুনি দিয়ে সময় কাটানো বুদ্ধিমানের কাজ নয়। আপনি যদি কোনও প্রস্তুতকারকের কাছ থেকে মিলিয়ন ক্যান সোডা কিনে থাকেন তবে এটি পেনিগুলির তুলনায় হাগল। কার্যকর অপ্টিমাইজেশনের মূল চাবিকাঠি হ'ল এই ব্যয়গুলি তাদের যথাযথ প্রসঙ্গে বোঝা understand যে কেউ প্রতিটি একক ক্রয়ের জন্য পেনিগুলি সংরক্ষণ করার চেষ্টা করে এবং পরামর্শ দেয় যে প্রত্যেকে প্রত্যেকে পেনির উপর নজরদারি করার চেষ্টা করে সে যাই হোক না কেন তারা কিনে নিচ্ছে তা দক্ষ অপ্টিমাইজার নয়।