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