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 बजना, और बाहर अपने निष्पादन फाइल जो आता है 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 सी. की तुलना 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 बहुत ज्यादा हर सी कार्यक्रम में आप कभी या पढ़ा है लिखा, 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 ई ध्वज पारित करके, आप इसे चलाने के लिए निर्देश 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 कदम जहां बजना वास्तव में अपनी सी से संकलन 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 कोई आगे जारी रखने के लिए, इसे पारित एस झंडा 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 बल्कि, यह विधानसभा और outputs मशीन कोड में लेता है. 107 00:04:51,080 --> 00:04:54,040 मशीन कोड वास्तविक 1 और 0 है कि एक सीपीयू कर सकते हैं 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 याद रखें कि मशीन कोड हैं और शून्य है कि 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 के साथ मैं और सिर्फ एक फाइल सीधे निर्दिष्ट? 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 बस याद है कि सभी एल झंडे अंत में आते है 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 मेरा नाम रोब Bowden है, और इस CS50 है.