1 00:00:07,200 --> 00:00:09,100 [Powered by Google Translate] Rob BOWDEN: ধরা যাক এর কম্পাইলার সম্পর্কে কথা বলুন. 2 00:00:09,100 --> 00:00:11,490 এই পয়েন্ট পর্যন্ত, আপনি শুধু টাইপ করেছি আপনার সোর্স কোড আপ মধ্যে 3 00:00:11,490 --> 00:00:14,260 কিছু ফাইল, এই বড় কালো বাক্স যা মাধ্যমে তাদের পাঠানো হয়েছে 4 00:00:14,260 --> 00:00:16,890 ঝনঝন, আউট এবং আপনার এক্সিকিউটেবল ফাইল আছে যা আসে 5 00:00:16,890 --> 00:00:19,430 আপনি ঠিক কি কি আপনার সোর্স কোড লেখেন. 6 00:00:19,430 --> 00:00:22,170 যে ছিল হিসাবে ঐন্দ্রজালিক হিসাবে, আমরা একটি ঘনিষ্ঠ নিতে যাচ্ছেন 7 00:00:22,170 --> 00:00:23,590 আসলে কি ঘটছে এর তাকান 8 00:00:23,590 --> 00:00:25,220 যখন আমরা একটি ফাইল কম্পাইল. 9 00:00:25,220 --> 00:00:28,580 তাই এটি কিছু কম্পাইল মানে? 10 00:00:28,580 --> 00:00:31,150 >> সবচেয়ে সাধারণ অর্থে ভাল,,, শুধু অর্থ 11 00:00:31,150 --> 00:00:32,580 রূপান্তর কোড এক লিখিত 12 00:00:32,580 --> 00:00:34,680 অন্য প্রোগ্রামিং ভাষা. 13 00:00:34,680 --> 00:00:37,550 কিন্তু সাধারণত যখন মানুষ বলে তারা কিছু, কম্পাইল তারা 14 00:00:37,550 --> 00:00:39,660 মানে তারা একটি উচ্চ স্তরের প্রোগ্রামিং থেকে এটি গ্রহণ করছেন 15 00:00:39,660 --> 00:00:42,460 একটি নিম্ন স্তরের প্রোগ্রামিং ভাষা ভাষা. 16 00:00:42,460 --> 00:00:44,960 এই অত্যন্ত বিষয়ী পদ মত মনে হতে পারে. 17 00:00:44,960 --> 00:00:48,090 উদাহরণস্বরূপ, সম্ভবত আপনি C-এর একটি উচ্চ হিসাবে মনে করি না 18 00:00:48,090 --> 00:00:51,440 স্তরের প্রোগ্রামিং ভাষা, কিন্তু আপনি তা সঙ্কলন. 19 00:00:51,440 --> 00:00:52,730 কিন্তু সব আপেক্ষিক. 20 00:00:52,730 --> 00:00:55,790 হিসাবে আমরা দেখতে পাবেন, সমাবেশ কোড এবং ঘটনাক্রমে মেশিন 21 00:00:55,790 --> 00:00:59,270 কোড যে আমরা নিচে কম্পাইল হয় undeniably একটি নিম্ন স্তর 22 00:00:59,270 --> 00:01:00,700 তুলনায় সি 23 00:01:00,700 --> 00:01:03,310 যদিও আমরা আজকের বিক্ষোভের মধ্যে ঝনঝন শব্দ ব্যবহার করা হবে, একটি 24 00:01:03,310 --> 00:01:06,360 এখানে ধারণা অনেক অন্যান্য কম্পাইলার বহন উপর. 25 00:01:06,360 --> 00:01:09,160 >> ঝনঝন জন্য, চার সামগ্রিক প্রধান ধাপ আছে 26 00:01:09,160 --> 00:01:10,200 সংকলন. 27 00:01:10,200 --> 00:01:15,430 এগুলি এক, preprocessing preprocessor দ্বারা সম্পন্ন; দুই, 28 00:01:15,430 --> 00:01:19,530 সংকলন কম্পাইলার দ্বারা কৃত, তিনটি একত্রিতকরনের 29 00:01:19,530 --> 00:01:22,010 সম্পন্ন প্রতীকী ভাষান্তর দ্বারা; এবং চার, 30 00:01:22,010 --> 00:01:24,640 লিঙ্ক linker দ্বারা সম্পন্ন. 31 00:01:24,640 --> 00:01:27,600 এটা বিভ্রান্তিকর হতে পারে যে সামগ্রিকভাবে substeps এক 32 00:01:27,600 --> 00:01:30,980 ঝনঝন কম্পাইলার কম্পাইলার বলা হয়, কিন্তু হয় 33 00:01:30,980 --> 00:01:32,530 আমরা যে পাবেন. 34 00:01:32,530 --> 00:01:35,050 আমরা আমাদের উদাহরণ হিসাবে একটি সহজ হ্যালো ওয়ার্ল্ড প্রোগ্রাম ব্যবহার করা হবে 35 00:01:35,050 --> 00:01:36,270 সর্বত্র এই ভিডিও. 36 00:01:36,270 --> 00:01:38,380 চলুন কটাক্ষপাত. 37 00:01:38,380 --> 00:01:40,330 >> প্রথম ধাপ হল preprocessing. 38 00:01:40,330 --> 00:01:42,520 কি preprocessor করবেন? 39 00:01:42,520 --> 00:01:45,560 ইন কাছাকাছি প্রতি সি প্রোগ্রাম আপনি কি কখনও করেছি পড়া বা লিখিত, 40 00:01:45,560 --> 00:01:48,310 আপনি লাইন কোড একটি হ্যাশ সঙ্গে যে ব্যবহার করা শুরু করেছি. 41 00:01:48,310 --> 00:01:51,730 আমি এটি হ্যাশ, কল কিন্তু আপনাকে কল এটি পাউন্ড, সংখ্যা হতে পারে করব 42 00:01:51,730 --> 00:01:53,280 , সাইন বা ধারালো. 43 00:01:53,280 --> 00:01:56,840 যেমন কোন একটি লাইন preprocessor ডিরেক্টিভের. 44 00:01:56,840 --> 00:02:00,650 আপনি সম্ভবত করেছি দেখা এবং সংজ্ঞায়িত # # আগে অন্তর্ভুক্ত, কিন্তু সেখানে 45 00:02:00,650 --> 00:02:03,690 বিভিন্ন আরো যে preprocessor স্বীকার করে. 46 00:02:03,690 --> 00:02:07,340 চলুন একটি # আমাদের হ্যালো দুনিয়া উদাহরণ সংজ্ঞায়িত যোগ করুন. 47 00:02:07,340 --> 00:02:11,690 এখন আসুন এই ফাইলটি মাত্র preprocessor চালানো. 48 00:02:11,690 --> 00:02:16,150 Clage-ই পতাকা পাশ দিয়ে, আপনি এটি চালানো অধ্যাপনা করছেন 49 00:02:16,150 --> 00:02:17,880 শুধু preprocessor. 50 00:02:17,880 --> 00:02:19,130 এর কি চলুন দেখা যাক. 51 00:02:22,250 --> 00:02:24,020 মনে হয় ঠিক ঝনঝন spits সবকিছু আউট 52 00:02:24,020 --> 00:02:25,200 কমান্ড লাইন. 53 00:02:25,200 --> 00:02:27,800 যাতে একটি নতুন ফাইল নামক এই ফলাফলের সব সংরক্ষণ করুন 54 00:02:27,800 --> 00:02:33,850 hello2.c, আমরা আমাদের কমান্ড> hello2.c সংযুক্ত করব. 55 00:02:33,850 --> 00:02:37,800 এখন আসুন আমাদের preprocessed ফাইল কটাক্ষপাত করা. 56 00:02:37,800 --> 00:02:40,810 >> দাঁড়ান, একটু কি আমাদের ছোট প্রোগ্রাম কি? 57 00:02:40,810 --> 00:02:43,890 যদি আমরা এই ফাইলটি নীচে সমস্ত উপায় যান, আমরা দেখতে পাবেন 58 00:02:43,890 --> 00:02:46,070 কোড যে আসলে আমরা কিছু লিখেছে. 59 00:02:46,070 --> 00:02:49,800 যে # define সর্বস্বান্ত হয় বিজ্ঞপ্তি এবং নামের সমস্ত উদাহরণ 60 00:02:49,800 --> 00:02:51,950 ঠিক আছে কি আমরা নির্দিষ্ট সঙ্গে প্রতিস্থাপন করা হয়েছে 61 00:02:51,950 --> 00:02:53,590 # লাইন নির্ধারণ করুন. 62 00:02:53,590 --> 00:02:56,530 তাই কি হয় এই সব typedefs এবং ফাংশন ঘোষণা 63 00:02:56,530 --> 00:02:58,140 এ ফাইলটি উপরের? 64 00:02:58,140 --> 00:03:00,820 উল্লেখ্য, # define শুধুমাত্র preprocessor ছিল না 65 00:03:00,820 --> 00:03:02,390 ডিরেক্টিভের যে আমরা নির্দিষ্ট. 66 00:03:02,390 --> 00:03:05,280 আমরা # stdio.h এছাড়াও আছে অন্তর্ভুক্ত. 67 00:03:05,280 --> 00:03:09,560 তাই ছবি লাইনের সব আসলে ঠিক stdio.h কপি 68 00:03:09,560 --> 00:03:11,810 এই ফাইলটি উপরের মধ্যে এবং আটকানো. 69 00:03:11,810 --> 00:03:14,110 এটা কেন হয় হেডার ফাইল ফাংশন জন্য দরকারী 70 00:03:14,110 --> 00:03:15,160 ঘোষণা. 71 00:03:15,160 --> 00:03:17,740 বদলে যাও এবং কপি ফাংশন সব প্রতিলেপন প্রয়োজন 72 00:03:17,740 --> 00:03:21,050 ঘোষণা আপনি আপনার ফাইল শীর্ষে ব্যবহার করার পরিকল্পনা, 73 00:03:21,050 --> 00:03:22,990 preprocessor এবং হেডার থেকে কপি পেস্ট করা 74 00:03:22,990 --> 00:03:24,140 আপনার জন্য ফাইল. 75 00:03:24,140 --> 00:03:26,480 >> এখন যে আমরা preprocessing সম্পন্ন হলে, আমরা সম্মুখের দিকে সরানো 76 00:03:26,480 --> 00:03:27,680 সংকলন. 77 00:03:27,680 --> 00:03:30,725 কারণ আমরা এই পদক্ষেপ সংকলন ডাকা হয় কারণ এটি 78 00:03:30,725 --> 00:03:34,130 ধাপ যেখানে আসলে ঝনঝন সি থেকে তার জন্য কম্পাইল করার প্রণালী 79 00:03:34,130 --> 00:03:35,370 সমাবেশ কোড. 80 00:03:35,370 --> 00:03:38,280 যাতে ঝনঝন একটি ফাইল কম্পাইল সমাবেশ যাও নিচে আছে, কিন্তু 81 00:03:38,280 --> 00:03:42,030 কোন অতিরিক্ত অবিরত, এটি পাস-S পতাকা 82 00:03:42,030 --> 00:03:43,560 কমান্ড লাইন. 83 00:03:43,560 --> 00:03:44,790 চলুন শুরু করা যাক সমাবেশ কটাক্ষপাত করা 84 00:03:44,790 --> 00:03:47,390 যে ফাইলটি outputted ছিল. 85 00:03:47,390 --> 00:03:49,740 এটি পুরোপুরি একটি ভিন্ন ভাষা মত দেখাচ্ছে. 86 00:03:49,740 --> 00:03:52,660 অ্যাসেম্বলি কোড খুবই প্রসেসর নির্দিষ্ট. 87 00:03:52,660 --> 00:03:55,440 এই ক্ষেত্রে, CS50 প্রয়োগ একটি চলমান হয় 88 00:03:55,440 --> 00:04:00,470 ভার্চুয়াল x86 প্রসেসর, এই x86-সমাবেশ কোড. 89 00:04:00,470 --> 00:04:03,450 খুব কম সংখ্যক মানুষ সমবেত কোড সরাসরি লিখুন এই দিন, 90 00:04:03,450 --> 00:04:06,490 কিন্তু প্রত্যেক সি প্রোগ্রাম আপনাকে কখনও লিখে রুপান্তরিত পরার 91 00:04:06,490 --> 00:04:07,940 মধ্যে সমাবেশ. 92 00:04:07,940 --> 00:04:11,440 আবার, আমরা এই পদক্ষেপ সমাবেশ মধ্যে সি কম্পাইল কল 93 00:04:11,440 --> 00:04:14,170 যেহেতু আমরা থেকে একটি উচ্চ পর্যায়ের একটি নিম্ন স্তরের যাচ্ছে 94 00:04:14,170 --> 00:04:15,480 প্রোগ্রামিং ভাষা. 95 00:04:15,480 --> 00:04:17,880 >> তোলে কি সি তুলনায় সমাবেশ নিম্ন স্তরের? 96 00:04:17,880 --> 00:04:21,660 সমাবেশ ভাল,, খুব আমরা কি আমরা করতে পারি মধ্যে সীমাবদ্ধ রাখা হয়. 97 00:04:21,660 --> 00:04:25,120 যদি এর কোন, যখন এর, এর জন্য, কোনো ধরনের বা loops আছে. 98 00:04:25,120 --> 00:04:27,560 কিন্তু আপনি একই জিনিস খতম করা যেতে পারে যে এই নিয়ন্ত্রণ 99 00:04:27,560 --> 00:04:30,270 কাঠামোর প্রস্তাব সীমিত অপারেশন ব্যবহার করে যে 100 00:04:30,270 --> 00:04:32,350 সমাবেশ আছে প্রদান. 101 00:04:32,350 --> 00:04:35,960 কিন্তু শুধু কি সত্যিই নিম্ন স্তরের সমাবেশ দেখুন, কি সাহায্য করতে পারি 102 00:04:35,960 --> 00:04:39,320 আমাদের এক সংকলন পদার্পণ আরও, একত্রিতকরনের. 103 00:04:39,320 --> 00:04:41,890 এটা প্রতীকী ভাষান্তর এর কাজ সমাবেশ কোড রুপান্তর 104 00:04:41,890 --> 00:04:44,740 বস্তুর মধ্যে অথবা মেশিন কোড. 105 00:04:44,740 --> 00:04:47,610 মনে রাখবেন যে প্রতীকী ভাষান্তর আছে আউটপুট সমাবেশ না; 106 00:04:47,610 --> 00:04:51,080 বরং সমাবেশ এবং আউটপুট মেশিন কোড লাগে. 107 00:04:51,080 --> 00:04:54,040 মেশিন কোড প্রকৃত এর 1 এবং 0 এর যে একটি CPU-র পারেন 108 00:04:54,040 --> 00:04:57,290 বুঝতে যদিও আমরা একটি কাজ অতি ক্ষুদ্র অংশ অবশিষ্ট আছে 109 00:04:57,290 --> 00:04:59,380 আগে আমরা আমাদের প্রোগ্রাম চালাতে পারেন. 110 00:04:59,380 --> 00:05:01,400 এর পাশ দিয়ে যাক আমাদের সমাবেশ কোড জুটা 111 00:05:01,400 --> 00:05:04,080 ঝনঝন-c ফ্ল্যাগ লিখে. 112 00:05:04,080 --> 00:05:06,410 এখন আসুন একত্র ফাইলে কি দেখতে. 113 00:05:06,410 --> 00:05:09,220 >> ভাল, যে আমাদের অনেক সাহায্য করবে না. 114 00:05:09,220 --> 00:05:11,340 মনে রাখবেন যে মেশিন কোড বেশী হয় এবং যে zeros 115 00:05:11,340 --> 00:05:13,240 আপনার কম্পিউটার বুঝতে পারেন. 116 00:05:13,240 --> 00:05:16,080 এটাই সহজ জন্য আমাদের বুঝতে মানে এই নয়. 117 00:05:16,080 --> 00:05:19,160 তাই ঠিক কিভাবে কম মাত্রা সমাবেশ? 118 00:05:19,160 --> 00:05:21,480 এটি অবজেক্ট কোড প্রায় অভিন্ন. 119 00:05:21,480 --> 00:05:24,300 যাওয়া থেকে সমাবেশ অবজেক্ট কোড একটি অনেক আরো 120 00:05:24,300 --> 00:05:27,540 একটি রূপান্তর তুলনায় অনুবাদ, যা কেন 121 00:05:27,540 --> 00:05:29,310 এক প্রতীকী ভাষান্তর না বিবেচনা করতে পারেন 122 00:05:29,310 --> 00:05:31,400 কোনো প্রকৃত কম্পাইল না. 123 00:05:31,400 --> 00:05:34,110 বস্তুত, এটা বেশ সহজ নিজে থেকে অনুবাদ 124 00:05:34,110 --> 00:05:36,050 মেশিন কোড সমাবেশ. 125 00:05:36,050 --> 00:05:39,040 দেখার জন্যে একটি প্রধান ফাংশন এ জন্য সমাবেশ, যে প্রথম লাইন 126 00:05:39,040 --> 00:05:42,100 হেক্সাডেসিমেল 0x55 যাও মিলা ঘটবে. 127 00:05:42,100 --> 00:05:45,470 বাইনারি ইন, এটা 1010101. 128 00:05:45,470 --> 00:05:49,300 দ্বিতীয় লাইনে হেক্সাডেসিমেল 0x895 মিলা ঘটবে. 129 00:05:49,300 --> 00:05:51,290 এবং পরের, 0x56. 130 00:05:51,290 --> 00:05:53,730 একটি অপেক্ষাকৃত সহজ টেবিল দেওয়া, আপনি অনুবাদ করতে পারে 131 00:05:53,730 --> 00:05:57,130 কোড মধ্যে সমাবেশ যে খুব মেশিন বুঝতে পারেন. 132 00:05:57,130 --> 00:05:58,810 >> তাই এক ধাপ অবশিষ্ট আছে 133 00:05:58,810 --> 00:06:01,150 সংকলন, যা লিঙ্ক করা হয়. 134 00:06:01,150 --> 00:06:04,530 লিঙ্কিং এক বড় ফাইল বস্তুর মধ্যে ফাইলের একটি গুচ্ছ সম্মিলন 135 00:06:04,530 --> 00:06:06,380 আসলে আপনি নির্বাহ করতে পারেন. 136 00:06:06,380 --> 00:06:08,570 লিঙ্কিং সিস্টেম খুবই নির্ভরশীল. 137 00:06:08,570 --> 00:06:11,030 তাই সহজ উপায় ঝনঝন শুধু বস্তু লিঙ্ক পেতে 138 00:06:11,030 --> 00:06:13,920 ফাইল একসাথে ফাইল যে সমস্ত ঝনঝন কল হয় 139 00:06:13,920 --> 00:06:15,190 আপনি একসাথে লিঙ্ক করতে চান. 140 00:06:15,190 --> 00:06:18,740 আপনি যদি ণ ফাইল উল্লেখ করুন. তারপর, এটি পুনরায় প্রক্রিয়া প্রয়োজন হবে না, 141 00:06:18,740 --> 00:06:21,680 , কম্পাইল এবং আপনি সোর্স কোড সব জড় করা. 142 00:06:21,680 --> 00:06:23,960 এর একটি আমাদের ফাইলে গণিত ফাংশন নিক্ষেপ করা যাক, যাতে আমরা আছে 143 00:06:23,960 --> 00:06:25,210 কিছু ইন লিঙ্ক 144 00:06:34,220 --> 00:06:37,010 এখন এর তা বস্তু ফিরে কোড কম্পাইল হতাশ এবং 145 00:06:37,010 --> 00:06:38,260 এটা ঝনঝন কল. 146 00:06:40,560 --> 00:06:41,420 ওহো. 147 00:06:41,420 --> 00:06:43,790 যেহেতু আমরা একটি ফাংশন গণিত অন্তর্ভুক্ত, আমরা এ লিঙ্ক প্রয়োজন 148 00:06:43,790 --> 00:06:46,610 গণিত গ্রন্থাগারের সঙ্গে-lm. 149 00:06:46,610 --> 00:06:48,990 >> যদি আমরা এক গুচ্ছ লিঙ্ক একসঙ্গে চেয়েছিলেন. ণ ফাইল যে আমরা 150 00:06:48,990 --> 00:06:51,420 আমাদের নিজস্ব লিখেছেন, আমরা শুধু তাদের সমস্ত নির্দিষ্ট চাই 151 00:06:51,420 --> 00:06:52,460 কমান্ড লাইন থেকে. 152 00:06:52,460 --> 00:06:55,320 সীমাবদ্ধতা হল এই ফাইলের মধ্যে শুধুমাত্র একটি আবশ্যক 153 00:06:55,320 --> 00:06:57,790 আসলে একটি প্রধান ফাংশন, বা নির্দিষ্ট অন্য 154 00:06:57,790 --> 00:06:59,930 ফলে এক্সিকিউটেবল যেখানে শুরু জানি না 155 00:06:59,930 --> 00:07:00,910 আপনার কোড চালনাকারী. 156 00:07:00,910 --> 00:07:03,360 একটি ফাইলের মধ্যে লিঙ্ক উল্লেখ মধ্যে পার্থক্য কি 157 00:07:03,360 --> 00:07:06,600 সঙ্গে-l এবং শুধুমাত্র একটি ফাইল সরাসরি উল্লেখ? 158 00:07:06,600 --> 00:07:07,440 কিছুই নেই. 159 00:07:07,440 --> 00:07:09,850 এটা ঠিক যে ঝনঝন যাও ঠিক কি জানি এরকম ফাইল 160 00:07:09,850 --> 00:07:12,560 কিছু নির্দেশ মত-lm ঘটবে. 161 00:07:12,560 --> 00:07:14,700 আপনি যদি জানত যে নিজেকে ফাইল, আপনি এটি নির্দিষ্ট পারে 162 00:07:14,700 --> 00:07:15,930 স্পষ্টভাবে. 163 00:07:15,930 --> 00:07:18,990 শুধু মনে রাখবেন, যে সমস্ত-l পতাকা শেষে আসতে হবে 164 00:07:18,990 --> 00:07:20,770 আপনার ক্লায়েন্টের চাহিদা. 165 00:07:20,770 --> 00:07:22,300 >> এবং যে সব তা আছে. 166 00:07:22,300 --> 00:07:24,940 যখন আপনি কিছু ফাইল ঝনঝন চালানো, এই কি এটা 167 00:07:24,940 --> 00:07:26,350 আসলে করছেন. 168 00:07:26,350 --> 00:07:29,490 আমার নাম Rob Bowden, এবং এই CS50.