1 00:00:07,200 --> 00:00:09,100 [Powered by Google Translate] روب BOWDEN: چلو، compilers کے بارے میں بات کرتے ہیں. 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 بجنا، اور اپنے executable فائل ہے جو کرتا ہے آتا ہے 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 مثال کے طور پر، آپ سی کے شاید ایک اعلی کے طور پر نہیں کیا سوچتے ہیں 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 C. سے 23 00:01:00,700 --> 00:01:03,310 اگرچہ ہم بجنا آج کے مظاہرے میں استعمال کرتے ہوئے جائے گی، 24 00:01:03,310 --> 00:01:06,360 یہاں خیالات کے بہت سے دیگر compilers کو لے. 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 ہیں 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 بجنا compilers سنکلک کہا جاتا ہے، لیکن 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 پریپروسیسر کیا کرتا ہے؟ 39 00:01:42,520 --> 00:01:45,560 بہت ہر C پروگرام میں تم نے کبھی پڑھا ہے یا تحریری، 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 ایسے کسی بھی لائن میں ایک پریپروسیسر ہدایت کی ہے. 44 00:01:56,840 --> 00:02:00,650 آپ نے شاید دیکھا ہے # اور اس سے پہلے # وضاحت شامل ہے، لیکن اس 45 00:02:00,650 --> 00:02:03,690 کئی ہے کہ پریپروسیسر کو تسلیم کر رہے ہیں. 46 00:02:03,690 --> 00:02:07,340 # ہماری ہیلو دنیا کی مثال کے طور پر کی وضاحت میں شامل ہے. 47 00:02:07,340 --> 00:02:11,690 اب ہم اس فائل پر صرف پریپروسیسر چلائیں. 48 00:02:11,690 --> 00:02:16,150 clage E-پرچم کو منظور کرتے ہوئے، آپ کو اسے چلانے کے لئے ہدایت کر رہے ہیں 49 00:02:16,150 --> 00:02:17,880 صرف پریپروسیسر. 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 یاد رکھیں کہ # وضاحت کی گئی ہے اور کے نام کے تمام مثالوں 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 یاد رکھیں کہ # وضاحت صرف پریپروسیسر نہیں تھا 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 پریپروسیسر کو کاپی کریں اور پیسٹ کریں ان ہیڈر سے 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 قدم جہاں بجنا اصل میں اس C سے انتخاب 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 لیکن ہر C پروگرام آپ نے کبھی لکھنے نیچے تبدیل ہو جاتا ہے 91 00:04:06,490 --> 00:04:07,940 اسمبلی میں. 92 00:04:07,940 --> 00:04:11,440 ایک بار پھر، ہم اس اسمبلی میں C مرتب قدم 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 >> C سے اسمبلی نچلے درجے کا کیا کرتا ہے؟ 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 بجنا سی پرچم. 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 اگر آپ کو اے فائلوں کی وضاحت کریں.، تو اس reprocess پر کرنے کی ضرورت نہیں کرے گا، 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 ریاضی لائبریری کے ساتھ ایل ایم. 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 کچھ طرح ایل ایم سے رجوع کرنا ہوتا ہے. 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 ہے.