[Powered by Google Translate] Rob BOWDEN: ধরা যাক এর কম্পাইলার সম্পর্কে কথা বলুন.
এই পয়েন্ট পর্যন্ত, আপনি শুধু টাইপ করেছি আপনার সোর্স কোড আপ মধ্যে
কিছু ফাইল, এই বড় কালো বাক্স যা মাধ্যমে তাদের পাঠানো হয়েছে
ঝনঝন, আউট এবং আপনার এক্সিকিউটেবল ফাইল আছে যা আসে
আপনি ঠিক কি কি আপনার সোর্স কোড লেখেন.
যে ছিল হিসাবে ঐন্দ্রজালিক হিসাবে, আমরা একটি ঘনিষ্ঠ নিতে যাচ্ছেন
আসলে কি ঘটছে এর তাকান
যখন আমরা একটি ফাইল কম্পাইল.
তাই এটি কিছু কম্পাইল মানে?
>> সবচেয়ে সাধারণ অর্থে ভাল,,, শুধু অর্থ
রূপান্তর কোড এক লিখিত
অন্য প্রোগ্রামিং ভাষা.
কিন্তু সাধারণত যখন মানুষ বলে তারা কিছু, কম্পাইল তারা
মানে তারা একটি উচ্চ স্তরের প্রোগ্রামিং থেকে এটি গ্রহণ করছেন
একটি নিম্ন স্তরের প্রোগ্রামিং ভাষা ভাষা.
এই অত্যন্ত বিষয়ী পদ মত মনে হতে পারে.
উদাহরণস্বরূপ, সম্ভবত আপনি C-এর একটি উচ্চ হিসাবে মনে করি না
স্তরের প্রোগ্রামিং ভাষা, কিন্তু আপনি তা সঙ্কলন.
কিন্তু সব আপেক্ষিক.
হিসাবে আমরা দেখতে পাবেন, সমাবেশ কোড এবং ঘটনাক্রমে মেশিন
কোড যে আমরা নিচে কম্পাইল হয় undeniably একটি নিম্ন স্তর
তুলনায় সি
যদিও আমরা আজকের বিক্ষোভের মধ্যে ঝনঝন শব্দ ব্যবহার করা হবে, একটি
এখানে ধারণা অনেক অন্যান্য কম্পাইলার বহন উপর.
>> ঝনঝন জন্য, চার সামগ্রিক প্রধান ধাপ আছে
সংকলন.
এগুলি এক, preprocessing preprocessor দ্বারা সম্পন্ন; দুই,
সংকলন কম্পাইলার দ্বারা কৃত, তিনটি একত্রিতকরনের
সম্পন্ন প্রতীকী ভাষান্তর দ্বারা; এবং চার,
লিঙ্ক linker দ্বারা সম্পন্ন.
এটা বিভ্রান্তিকর হতে পারে যে সামগ্রিকভাবে substeps এক
ঝনঝন কম্পাইলার কম্পাইলার বলা হয়, কিন্তু হয়
আমরা যে পাবেন.
আমরা আমাদের উদাহরণ হিসাবে একটি সহজ হ্যালো ওয়ার্ল্ড প্রোগ্রাম ব্যবহার করা হবে
সর্বত্র এই ভিডিও.
চলুন কটাক্ষপাত.
>> প্রথম ধাপ হল preprocessing.
কি preprocessor করবেন?
ইন কাছাকাছি প্রতি সি প্রোগ্রাম আপনি কি কখনও করেছি পড়া বা লিখিত,
আপনি লাইন কোড একটি হ্যাশ সঙ্গে যে ব্যবহার করা শুরু করেছি.
আমি এটি হ্যাশ, কল কিন্তু আপনাকে কল এটি পাউন্ড, সংখ্যা হতে পারে করব
, সাইন বা ধারালো.
যেমন কোন একটি লাইন preprocessor ডিরেক্টিভের.
আপনি সম্ভবত করেছি দেখা এবং সংজ্ঞায়িত # # আগে অন্তর্ভুক্ত, কিন্তু সেখানে
বিভিন্ন আরো যে preprocessor স্বীকার করে.
চলুন একটি # আমাদের হ্যালো দুনিয়া উদাহরণ সংজ্ঞায়িত যোগ করুন.
এখন আসুন এই ফাইলটি মাত্র preprocessor চালানো.
Clage-ই পতাকা পাশ দিয়ে, আপনি এটি চালানো অধ্যাপনা করছেন
শুধু preprocessor.
এর কি চলুন দেখা যাক.
মনে হয় ঠিক ঝনঝন spits সবকিছু আউট
কমান্ড লাইন.
যাতে একটি নতুন ফাইল নামক এই ফলাফলের সব সংরক্ষণ করুন
hello2.c, আমরা আমাদের কমান্ড> hello2.c সংযুক্ত করব.
এখন আসুন আমাদের preprocessed ফাইল কটাক্ষপাত করা.
>> দাঁড়ান, একটু কি আমাদের ছোট প্রোগ্রাম কি?
যদি আমরা এই ফাইলটি নীচে সমস্ত উপায় যান, আমরা দেখতে পাবেন
কোড যে আসলে আমরা কিছু লিখেছে.
যে # define সর্বস্বান্ত হয় বিজ্ঞপ্তি এবং নামের সমস্ত উদাহরণ
ঠিক আছে কি আমরা নির্দিষ্ট সঙ্গে প্রতিস্থাপন করা হয়েছে
# লাইন নির্ধারণ করুন.
তাই কি হয় এই সব typedefs এবং ফাংশন ঘোষণা
এ ফাইলটি উপরের?
উল্লেখ্য, # define শুধুমাত্র preprocessor ছিল না
ডিরেক্টিভের যে আমরা নির্দিষ্ট.
আমরা # stdio.h এছাড়াও আছে অন্তর্ভুক্ত.
তাই ছবি লাইনের সব আসলে ঠিক stdio.h কপি
এই ফাইলটি উপরের মধ্যে এবং আটকানো.
এটা কেন হয় হেডার ফাইল ফাংশন জন্য দরকারী
ঘোষণা.
বদলে যাও এবং কপি ফাংশন সব প্রতিলেপন প্রয়োজন
ঘোষণা আপনি আপনার ফাইল শীর্ষে ব্যবহার করার পরিকল্পনা,
preprocessor এবং হেডার থেকে কপি পেস্ট করা
আপনার জন্য ফাইল.
>> এখন যে আমরা preprocessing সম্পন্ন হলে, আমরা সম্মুখের দিকে সরানো
সংকলন.
কারণ আমরা এই পদক্ষেপ সংকলন ডাকা হয় কারণ এটি
ধাপ যেখানে আসলে ঝনঝন সি থেকে তার জন্য কম্পাইল করার প্রণালী
সমাবেশ কোড.
যাতে ঝনঝন একটি ফাইল কম্পাইল সমাবেশ যাও নিচে আছে, কিন্তু
কোন অতিরিক্ত অবিরত, এটি পাস-S পতাকা
কমান্ড লাইন.
চলুন শুরু করা যাক সমাবেশ কটাক্ষপাত করা
যে ফাইলটি outputted ছিল.
এটি পুরোপুরি একটি ভিন্ন ভাষা মত দেখাচ্ছে.
অ্যাসেম্বলি কোড খুবই প্রসেসর নির্দিষ্ট.
এই ক্ষেত্রে, CS50 প্রয়োগ একটি চলমান হয়
ভার্চুয়াল x86 প্রসেসর, এই x86-সমাবেশ কোড.
খুব কম সংখ্যক মানুষ সমবেত কোড সরাসরি লিখুন এই দিন,
কিন্তু প্রত্যেক সি প্রোগ্রাম আপনাকে কখনও লিখে রুপান্তরিত পরার
মধ্যে সমাবেশ.
আবার, আমরা এই পদক্ষেপ সমাবেশ মধ্যে সি কম্পাইল কল
যেহেতু আমরা থেকে একটি উচ্চ পর্যায়ের একটি নিম্ন স্তরের যাচ্ছে
প্রোগ্রামিং ভাষা.
>> তোলে কি সি তুলনায় সমাবেশ নিম্ন স্তরের?
সমাবেশ ভাল,, খুব আমরা কি আমরা করতে পারি মধ্যে সীমাবদ্ধ রাখা হয়.
যদি এর কোন, যখন এর, এর জন্য, কোনো ধরনের বা loops আছে.
কিন্তু আপনি একই জিনিস খতম করা যেতে পারে যে এই নিয়ন্ত্রণ
কাঠামোর প্রস্তাব সীমিত অপারেশন ব্যবহার করে যে
সমাবেশ আছে প্রদান.
কিন্তু শুধু কি সত্যিই নিম্ন স্তরের সমাবেশ দেখুন, কি সাহায্য করতে পারি
আমাদের এক সংকলন পদার্পণ আরও, একত্রিতকরনের.
এটা প্রতীকী ভাষান্তর এর কাজ সমাবেশ কোড রুপান্তর
বস্তুর মধ্যে অথবা মেশিন কোড.
মনে রাখবেন যে প্রতীকী ভাষান্তর আছে আউটপুট সমাবেশ না;
বরং সমাবেশ এবং আউটপুট মেশিন কোড লাগে.
মেশিন কোড প্রকৃত এর 1 এবং 0 এর যে একটি CPU-র পারেন
বুঝতে যদিও আমরা একটি কাজ অতি ক্ষুদ্র অংশ অবশিষ্ট আছে
আগে আমরা আমাদের প্রোগ্রাম চালাতে পারেন.
এর পাশ দিয়ে যাক আমাদের সমাবেশ কোড জুটা
ঝনঝন-c ফ্ল্যাগ লিখে.
এখন আসুন একত্র ফাইলে কি দেখতে.
>> ভাল, যে আমাদের অনেক সাহায্য করবে না.
মনে রাখবেন যে মেশিন কোড বেশী হয় এবং যে zeros
আপনার কম্পিউটার বুঝতে পারেন.
এটাই সহজ জন্য আমাদের বুঝতে মানে এই নয়.
তাই ঠিক কিভাবে কম মাত্রা সমাবেশ?
এটি অবজেক্ট কোড প্রায় অভিন্ন.
যাওয়া থেকে সমাবেশ অবজেক্ট কোড একটি অনেক আরো
একটি রূপান্তর তুলনায় অনুবাদ, যা কেন
এক প্রতীকী ভাষান্তর না বিবেচনা করতে পারেন
কোনো প্রকৃত কম্পাইল না.
বস্তুত, এটা বেশ সহজ নিজে থেকে অনুবাদ
মেশিন কোড সমাবেশ.
দেখার জন্যে একটি প্রধান ফাংশন এ জন্য সমাবেশ, যে প্রথম লাইন
হেক্সাডেসিমেল 0x55 যাও মিলা ঘটবে.
বাইনারি ইন, এটা 1010101.
দ্বিতীয় লাইনে হেক্সাডেসিমেল 0x895 মিলা ঘটবে.
এবং পরের, 0x56.
একটি অপেক্ষাকৃত সহজ টেবিল দেওয়া, আপনি অনুবাদ করতে পারে
কোড মধ্যে সমাবেশ যে খুব মেশিন বুঝতে পারেন.
>> তাই এক ধাপ অবশিষ্ট আছে
সংকলন, যা লিঙ্ক করা হয়.
লিঙ্কিং এক বড় ফাইল বস্তুর মধ্যে ফাইলের একটি গুচ্ছ সম্মিলন
আসলে আপনি নির্বাহ করতে পারেন.
লিঙ্কিং সিস্টেম খুবই নির্ভরশীল.
তাই সহজ উপায় ঝনঝন শুধু বস্তু লিঙ্ক পেতে
ফাইল একসাথে ফাইল যে সমস্ত ঝনঝন কল হয়
আপনি একসাথে লিঙ্ক করতে চান.
আপনি যদি ণ ফাইল উল্লেখ করুন. তারপর, এটি পুনরায় প্রক্রিয়া প্রয়োজন হবে না,
, কম্পাইল এবং আপনি সোর্স কোড সব জড় করা.
এর একটি আমাদের ফাইলে গণিত ফাংশন নিক্ষেপ করা যাক, যাতে আমরা আছে
কিছু ইন লিঙ্ক
এখন এর তা বস্তু ফিরে কোড কম্পাইল হতাশ এবং
এটা ঝনঝন কল.
ওহো.
যেহেতু আমরা একটি ফাংশন গণিত অন্তর্ভুক্ত, আমরা এ লিঙ্ক প্রয়োজন
গণিত গ্রন্থাগারের সঙ্গে-lm.
>> যদি আমরা এক গুচ্ছ লিঙ্ক একসঙ্গে চেয়েছিলেন. ণ ফাইল যে আমরা
আমাদের নিজস্ব লিখেছেন, আমরা শুধু তাদের সমস্ত নির্দিষ্ট চাই
কমান্ড লাইন থেকে.
সীমাবদ্ধতা হল এই ফাইলের মধ্যে শুধুমাত্র একটি আবশ্যক
আসলে একটি প্রধান ফাংশন, বা নির্দিষ্ট অন্য
ফলে এক্সিকিউটেবল যেখানে শুরু জানি না
আপনার কোড চালনাকারী.
একটি ফাইলের মধ্যে লিঙ্ক উল্লেখ মধ্যে পার্থক্য কি
সঙ্গে-l এবং শুধুমাত্র একটি ফাইল সরাসরি উল্লেখ?
কিছুই নেই.
এটা ঠিক যে ঝনঝন যাও ঠিক কি জানি এরকম ফাইল
কিছু নির্দেশ মত-lm ঘটবে.
আপনি যদি জানত যে নিজেকে ফাইল, আপনি এটি নির্দিষ্ট পারে
স্পষ্টভাবে.
শুধু মনে রাখবেন, যে সমস্ত-l পতাকা শেষে আসতে হবে
আপনার ক্লায়েন্টের চাহিদা.
>> এবং যে সব তা আছে.
যখন আপনি কিছু ফাইল ঝনঝন চালানো, এই কি এটা
আসলে করছেন.
আমার নাম Rob Bowden, এবং এই CS50.