এটা শর্টহ্যান্ড নয়।
+=
প্রতীক 1970 সালে সি ল্যাঙ্গুয়েজ হাজির, এবং - "স্মার্ট প্রতীকী ভাষান্তর" র পরিষ্কারভাবে বিভিন্ন মেশিন শিক্ষা ও adressing মোডে মিলা সি ধারণা নিয়ে:
" i=i+1
", "i+=1
"এবং" ++i
"এর মতো জিনিসগুলি যদিও বিমূর্ত স্তরে একই প্রভাব তৈরি করে, নিম্ন স্তরে প্রসেসরের কাজ করার ভিন্ন পদ্ধতির সাথে মিল থাকে।
বিশেষত এই তিনটি এক্সপ্রেশন, i
পরিবর্তনশীল ধরে ধরে সিপিইউ রেজিস্টারে সংরক্ষিত মেমরি ঠিকানার মধ্যে থাকে (আসুন এটির নাম দিন D
- এটি একটি "পয়েন্টার হিসাবে বিবেচনা করুন") এবং প্রসেসরের ALU একটি প্যারামিটার নেয় এবং ফলাফলটি ফিরে আসে "সংগ্রহকারী" (আসুন একে এটিকে ডাকুন - এটি একটি অন্তর্নিহিত হিসাবে ভাবেন)।
এই সীমাবদ্ধতার সাথে (সেই সময়ের সমস্ত মাইক্রোপ্রসেসরের মধ্যে খুব সাধারণ), অনুবাদটি সম্ভবত হবে
;i = i+1;
MOV A,(D); //Move in A the content of the memory whose address is in D
ADD A, 1; //The addition of an inlined constant
MOV (D) A; //Move the result back to i (this is the '=' of the expression)
;i+=1;
ADD (D),1; //Add an inlined constant to a memory address stored value
;++i;
INC (D); //Just "tick" a memory located counter
এটি করার প্রথম উপায়টি অযৌক্তিক, তবে ধ্রুবক ( ADD A, B
বা ADD A, (D+x)
) পরিবর্তে ভেরিয়েবলের সাথে অপারেট করার সময় বা আরও জটিল এক্সপ্রেশনগুলি অনুবাদ করার সময় (তারা সকলেই একটি স্ট্যাকের মধ্যে নিম্ন অগ্রাধিকারের ক্রিয়াকলাপে চাপে নামিয়ে আনে, উচ্চ অগ্রাধিকার কল করুন, পপ করুন এবং সমস্ত যুক্তি অপসারণ না হওয়া পর্যন্ত পুনরাবৃত্তি করুন)।
দ্বিতীয়টি "স্টেট মেশিন" এর আরও সাধারণ: আমরা আর "এক্সপ্রেশনকে মূল্যায়ন করি না", "" একটি মান পরিচালনা করে ": আমরা এখনও ALU ব্যবহার করি, তবে পরামিতিটি প্রতিস্থাপনের ফলে ফলাফল হওয়ার আশেপাশে চলমান মানগুলি এড়িয়ে চলি। আরও জটিল অভিব্যক্তি প্রয়োজন যেখানে এই ধরণের নির্দেশাবলী ব্যবহার করা i = 3*i + i-2
যাবে না : স্থানে কাজ করা যায় না, যেহেতু i
আরও বেশি বার প্রয়োজন হয়।
তৃতীয়-সরল সরল- এমনকি "সংযোজন" ধারণাটিও বিবেচনা করে না, তবে কাউন্টারের জন্য আরও একটি "আদিম" (গণনামূলক অর্থে) সার্কিটারি ব্যবহার করে। নির্দেশটি সংক্ষিপ্ত করা হয়, দ্রুত লোড হয় এবং তত্ক্ষণাত্ কার্যকর করা হয়, যেহেতু সংযোজক নেটওয়ার্ককে কাউন্টার তৈরির জন্য একটি রেজিস্টার পুনঃনির্মাণ করা প্রয়োজন, এবং সুতরাং এটি একটি পূর্ণ সংযোজনকারীর তুলনায় দ্রুত।
সমসাময়িক সংকলক (এখনই সি দেখুন, সংকলক অপ্টিমাইজেশন সক্ষম করে) সুবিধার ভিত্তিতে চিঠিপত্রটি অদলবদল করা যেতে পারে, তবে শব্দার্থবিজ্ঞানের মধ্যে এখনও একটি ধারণাগত পার্থক্য রয়েছে।
x += 5
মানে
- X দ্বারা চিহ্নিত স্থানটি সন্ধান করুন
- এটিতে 5 যোগ করুন
তবে x = x + 5
অর্থ:
- এক্স + 5 মূল্যায়ন করুন
- X দ্বারা চিহ্নিত স্থানটি সন্ধান করুন
- এক্স জমাকারীতে এক্স অনুলিপি করুন
- সঞ্চয়ের জন্য 5 যোগ করুন
- এক্স মধ্যে ফলাফল সংরক্ষণ করুন
- X দ্বারা চিহ্নিত স্থানটি সন্ধান করুন
- এটিতে সঞ্চয়ী অনুলিপি করুন
অবশ্যই, অপ্টিমাইজেশন পারে
- যদি "সন্ধানকারী এক্স" এর কোনও পার্শ্ব প্রতিক্রিয়া না থাকে তবে দুটি "সন্ধান" একবারে করা যেতে পারে (এবং এক্স পয়েন্টার রেজিস্টারে সংরক্ষিত ঠিকানা হয়ে যায়)
- সংস্থাপকের
&x
পরিবর্তে যদি ADD প্রয়োগ করা হয় তবে দুটি অনুলিপি যথাযথভাবে যুক্ত হতে পারে
এইভাবে একত্রিত করার জন্য অনুকূলিত কোড তৈরি করা x += 5
।
তবে এটি তখনই করা সম্ভব যদি "সন্ধানকারী এক্স" এর কোনও পার্শ্ব প্রতিক্রিয়া না থাকে, অন্যথায়
*(x()) = *(x()) + 5;
এবং
*(x()) += 5;
শব্দার্থগতভাবে পৃথক, যেহেতু x()
পার্শ্ব প্রতিক্রিয়াগুলি (স্বীকার করা x()
এমন একটি ফাংশন যা চারপাশে অদ্ভুত কাজ করা এবং ফিরে আসা int*
) দু'বার বা একবার উত্পাদিত হবে।
মধ্যে সমানতা x = x + y
এবং x += y
কারণে নির্দিষ্ট ক্ষেত্রে যেখানে অত: পর হয় +=
এবং =
সরাসরি L-মান প্রয়োগ করা হয়েছে।
পাইথনে যাওয়ার জন্য, এটি সি থেকে বাক্য গঠনটি উত্তরাধিকার সূত্রে প্রাপ্ত হয়েছে, তবে যেহেতু ব্যাখ্যাযোগ্য ভাষাগুলিতে মৃত্যুদন্ড কার্যকর করার আগে কোনও অনুবাদ / অপ্টিমাইজেশন নেই, সুতরাং বিষয়গুলি এতটা ঘনিষ্ঠভাবে সম্পর্কিত নয় (যেহেতু একটি কম বিশ্লেষণের পদক্ষেপ কম রয়েছে)। যাইহোক, কোনও দোভাষী যে তিনটি ধরণের অভিব্যক্তির জন্য বিভিন্ন নির্বাহের রুটিনগুলিকে উল্লেখ করতে পারেন, কীভাবে অভিব্যক্তিটি গঠিত হয় এবং মূল্যায়নের প্রেক্ষাপটে নির্ভর করে বিভিন্ন মেশিন কোডের সুবিধা গ্রহণ করে।
যারা আরও বিস্তারিত পছন্দ করেন তাদের জন্য ...
প্রতিটি সিপিইউতে একটি ALU (পাটিগণিত-লজিক্যাল ইউনিট) থাকে যা একেবারে সংক্ষেপে, একটি সংযোজক নেটওয়ার্ক যার ইনপুট এবং আউটপুট নির্দেশকের অপকোডের উপর নির্ভর করে রেজিস্টারগুলিতে এবং / অথবা মেমরিতে "প্লাগড" থাকে।
বাইনারি অপারেশনগুলি সাধারণত "কোথাও" নেওয়া কোনও ইনপুট দিয়ে একটি সংস্থাপক নিবন্ধকের সংশোধক হিসাবে প্রয়োগ করা হয়, যেখানে কোথাও হতে পারে - নির্দেশ প্রবাহের অভ্যন্তরে নিজেই (ম্যানিফেস্ট কনটেন্টের জন্য আদর্শ: এডিডি এ 5) - অন্য রেজিস্ট্রিটির অভ্যন্তরে (এক্সপ্রেশন গণনার সাথে আদর্শ) অস্থায়ী: যেমন এডিডি এ বি) - মেমরির ভিতরে, একটি রেজিস্টার প্রদত্ত ঠিকানায় (ডেটা আনার সাধারন উদাহরণ: এডিডি এ (এইচ)) - এইচ, এই ক্ষেত্রে, একটি অবচয় পয়েন্টারের মতো কাজ করুন।
এই সিউডোকোড সহ, x += 5
হয়
ADD (X) 5
যখন x = x+5
হয়
MOVE A (X)
ADD A 5
MOVE (X) A
অর্থাৎ, এক্স + 5 একটি অস্থায়ী দেয় যা পরে নির্ধারিত হয়। x += 5
এক্স উপর সরাসরি পরিচালনা করে।
প্রকৃত বাস্তবায়ন প্রসেসরের আসল নির্দেশের সেটের উপর নির্ভর করে: যদি কোনও ADD (.) c
অপকোড না থাকে তবে প্রথম কোডটি দ্বিতীয় হয়ে যায়: কোনও উপায় নেই।
যদি এই জাতীয় একটি অপকোড থাকে এবং অপ্টিমাইজেশন সক্ষম হয় তবে দ্বিতীয় এক্সপ্রেশনটি বিপরীত চালগুলি মুছে ফেলার পরে এবং রেজিস্ট্রারদের অপকোড সামঞ্জস্য করার পরে প্রথম হয়ে যায়।
x += 5
চেয়ে বেশি দক্ষ বলা যায়x = x + 5
? বা আপনার পরামর্শ অনুসারে এটি কি কেবল সিনট্যাকটিক চিনি?