1 00:00:07,200 --> 00:00:09,100 [Powered by Google Translate] Rob Bowden: Hebu majadiliano kuhusu compilers. 2 00:00:09,100 --> 00:00:11,490 Mpaka hatua hii, ve tu typed up chanzo yako code katika 3 00:00:11,490 --> 00:00:14,260 baadhi files, akawatuma kwa njia ya sanduku hili kubwa nyeusi kwamba ni 4 00:00:14,260 --> 00:00:16,890 Clang, na nje anakuja executable faili yako kwamba hana 5 00:00:16,890 --> 00:00:19,430 hasa nini aliandika katika chanzo code yako. 6 00:00:19,430 --> 00:00:22,170 Kama kichawi kama kwamba imekuwa, sisi ni kwenda kuchukua karibu 7 00:00:22,170 --> 00:00:23,590 kuangalia nini ni kweli yanatokea 8 00:00:23,590 --> 00:00:25,220 wakati sisi kukusanya faili. 9 00:00:25,220 --> 00:00:28,580 Hivyo ni nini maana kukusanya kitu? 10 00:00:28,580 --> 00:00:31,150 >> Naam, katika maana zaidi ya jumla, ni njia tu 11 00:00:31,150 --> 00:00:32,580 kubadilisha iliyoandikwa katika moja 12 00:00:32,580 --> 00:00:34,680 programu lugha na mwingine. 13 00:00:34,680 --> 00:00:37,550 Lakini kwa kawaida wakati watu wanasema kukusanya kitu fulani, wao 14 00:00:37,550 --> 00:00:39,660 mean wao ni kuchukua ni kutoka programu ngazi za juu 15 00:00:39,660 --> 00:00:42,460 Lugha ya lugha ngazi ya chini ya programu. 16 00:00:42,460 --> 00:00:44,960 Haya yanaweza kuonekana kama suala subjective sana. 17 00:00:44,960 --> 00:00:48,090 Kwa mfano, pengine sidhani wa C kama juu 18 00:00:48,090 --> 00:00:51,440 ngazi ya programu ya lugha, lakini huna kukusanya yake. 19 00:00:51,440 --> 00:00:52,730 Lakini zote ni jamaa. 20 00:00:52,730 --> 00:00:55,790 Kama tutaweza kuona, code mkutano na hatimaye mashine 21 00:00:55,790 --> 00:00:59,270 kificho kwamba sisi kukusanya chini ni undeniably ngazi ya chini 22 00:00:59,270 --> 00:01:00,700 kuliko C. 23 00:01:00,700 --> 00:01:03,310 Ingawa sisi utakuwa kutumia Clang katika maandamano ya leo, 24 00:01:03,310 --> 00:01:06,360 mawazo mengi hapa kubeba zaidi ya watunzi wengine. 25 00:01:06,360 --> 00:01:09,160 >> Kwa Clang, kuna hatua nne kuu katika ujumla 26 00:01:09,160 --> 00:01:10,200 mkusanyiko. 27 00:01:10,200 --> 00:01:15,430 Hizi ni moja, preprocessing kufanyika kwa preprocessor; mbili, 28 00:01:15,430 --> 00:01:19,530 mkusanyiko kufanyika kwa compiler; tatu, kukusanyika 29 00:01:19,530 --> 00:01:22,010 kufanyika kwa assembler, na nne, 30 00:01:22,010 --> 00:01:24,640 kuunganisha kufanyika kwa linker. 31 00:01:24,640 --> 00:01:27,600 Ni inaweza kuwa utata kwamba mmoja wa substeps ya jumla 32 00:01:27,600 --> 00:01:30,980 Compilers Clang inaitwa compiler, lakini 33 00:01:30,980 --> 00:01:32,530 tutaweza kupata kwamba. 34 00:01:32,530 --> 00:01:35,050 Sisi utakuwa kutumia rahisi hujambo dunia mpango kama mfano wetu 35 00:01:35,050 --> 00:01:36,270 katika video hii. 36 00:01:36,270 --> 00:01:38,380 Hebu tuangalie. 37 00:01:38,380 --> 00:01:40,330 >> Hatua ya kwanza ni preprocessing. 38 00:01:40,330 --> 00:01:42,520 Je preprocessor kufanya? 39 00:01:42,520 --> 00:01:45,560 Katika pretty much kila mpango C ve milele kusoma au kuandika, 40 00:01:45,560 --> 00:01:48,310 umetumia mistari ya kificho kwamba kuanza na hash. 41 00:01:48,310 --> 00:01:51,730 Mimi nitakuita ni hash, lakini pia unaweza kuiita paundi, idadi 42 00:01:51,730 --> 00:01:53,280 saini, au mkali. 43 00:01:53,280 --> 00:01:56,840 Yoyote line vile ni agizo preprocessor. 44 00:01:56,840 --> 00:02:00,650 Ve pengine kuona # define na # pamoja kabla, lakini kuna 45 00:02:00,650 --> 00:02:03,690 kadhaa zaidi kwamba preprocessor inatambua. 46 00:02:03,690 --> 00:02:07,340 Hebu kuongeza # define kwa mfano wetu hujambo dunia. 47 00:02:07,340 --> 00:02:11,690 Sasa hebu kukimbia tu preprocessor juu ya faili hii. 48 00:02:11,690 --> 00:02:16,150 Kwa kupita clage Barua bendera, wewe ni mwelekezaji ni kukimbia 49 00:02:16,150 --> 00:02:17,880 tu preprocessor. 50 00:02:17,880 --> 00:02:19,130 Hebu kuona nini kinatokea. 51 00:02:22,250 --> 00:02:24,020 Inaonekana kama Clang tu mtemi kila kitu 52 00:02:24,020 --> 00:02:25,200 katika mstari amri. 53 00:02:25,200 --> 00:02:27,800 Ili kuokoa wote wa pato hii na faili mpya iitwayo 54 00:02:27,800 --> 00:02:33,850 hello2.c, tutaweza append> hello2.c kwa amri yetu. 55 00:02:33,850 --> 00:02:37,800 Sasa hebu tuangalie faili wetu preprocessed. 56 00:02:37,800 --> 00:02:40,810 >> Ho, nini kilichotokea na mpango wetu mfupi kidogo? 57 00:02:40,810 --> 00:02:43,890 Kama sisi kwenda njia yote hadi chini ya faili hili, tutaweza kuona 58 00:02:43,890 --> 00:02:46,070 baadhi ya kificho kwamba sisi kweli aliandika. 59 00:02:46,070 --> 00:02:49,800 Ona kwamba define # ni wamekwenda na matukio yote ya jina 60 00:02:49,800 --> 00:02:51,950 wamekuwa kubadilishwa na nini hasa sisi maalum katika 61 00:02:51,950 --> 00:02:53,590 # Define mstari. 62 00:02:53,590 --> 00:02:56,530 Kwa hiyo kile ni hawa wote typedefs na maazimio ya kazi 63 00:02:56,530 --> 00:02:58,140 saa ya juu ya faili? 64 00:02:58,140 --> 00:03:00,820 Ona kwamba define # hakuwa preprocessor tu 65 00:03:00,820 --> 00:03:02,390 maelekezo kwamba sisi maalum. 66 00:03:02,390 --> 00:03:05,280 Sisi pia ni pamoja # stdio.h. 67 00:03:05,280 --> 00:03:09,560 Basi wote wa mistari mambo ni kweli tu stdio.h kunakiliwa 68 00:03:09,560 --> 00:03:11,810 na pasted ndani ya juu ya faili hii. 69 00:03:11,810 --> 00:03:14,110 Hiyo ndiyo sababu header files ni hivyo muhimu kwa ajili ya kazi 70 00:03:14,110 --> 00:03:15,160 maazimio. 71 00:03:15,160 --> 00:03:17,740 Badala ya wanaohitaji na nakala na kuweka wote wa kazi 72 00:03:17,740 --> 00:03:21,050 maazimio mpango juu ya kutumia saa ya juu ya faili yako, 73 00:03:21,050 --> 00:03:22,990 preprocessor itakuwa nakala na kuweka yao kutoka header 74 00:03:22,990 --> 00:03:24,140 faili kwa ajili yenu. 75 00:03:24,140 --> 00:03:26,480 >> Sasa kwa kuwa sisi ni kosa preprocessing, sisi kuhamia kwenye 76 00:03:26,480 --> 00:03:27,680 mkusanyiko. 77 00:03:27,680 --> 00:03:30,725 sababu sisi wito huu mkusanyiko hatua ni kwa sababu hii ni 78 00:03:30,725 --> 00:03:34,130 hatua ambapo Clang kweli haina kuandaa wake kutoka C kwa 79 00:03:34,130 --> 00:03:35,370 mkutano code. 80 00:03:35,370 --> 00:03:38,280 Ili kuwa na Clang kukusanya faili chini ya kanisa, lakini 81 00:03:38,280 --> 00:03:42,030 kuendelea hakuna zaidi, kupita S-bendera 82 00:03:42,030 --> 00:03:43,560 katika mstari amri. 83 00:03:43,560 --> 00:03:44,790 Hebu tuangalie katika mkutano 84 00:03:44,790 --> 00:03:47,390 faili kwamba alikuwa outputted. 85 00:03:47,390 --> 00:03:49,740 Inaonekana kama lugha tofauti kabisa. 86 00:03:49,740 --> 00:03:52,660 Bunge code ni sana processor maalum. 87 00:03:52,660 --> 00:03:55,440 Katika kesi hiyo, tangu appliance CS50 ni mbio juu ya 88 00:03:55,440 --> 00:04:00,470 virtual processor x86, hii ni x86 mkutano code. 89 00:04:00,470 --> 00:04:03,450 Watu wachache sana kuandika moja kwa moja katika mkutano code siku hizi, 90 00:04:03,450 --> 00:04:06,490 lakini mpango kila C wewe milele kuandika anapata kubadilishwa chini 91 00:04:06,490 --> 00:04:07,940 ndani ya kanisa. 92 00:04:07,940 --> 00:04:11,440 Tena, sisi kuwaita hatua hii kuandaa C katika mkutano 93 00:04:11,440 --> 00:04:14,170 tangu sisi ni kwenda kutoka ngazi ya juu kwa ngazi za chini 94 00:04:14,170 --> 00:04:15,480 programu lugha. 95 00:04:15,480 --> 00:04:17,880 >> Kinachofanya mkutano ngazi ya chini kuliko C? 96 00:04:17,880 --> 00:04:21,660 Naam, katika mkutano, sisi ni mdogo sana katika nini tunaweza kufanya. 97 00:04:21,660 --> 00:04:25,120 Hakuna kama wa,, wakati ni kwa ni, au matanzi ya aina yoyote. 98 00:04:25,120 --> 00:04:27,560 Lakini unaweza kukamilisha mambo sawa kwamba hawa kudhibiti 99 00:04:27,560 --> 00:04:30,270 miundo kutoa kutumia shughuli mdogo kwamba 100 00:04:30,270 --> 00:04:32,350 mkutano gani kutoa. 101 00:04:32,350 --> 00:04:35,960 Lakini kuona tu jinsi kiwango cha chini mkutano kweli ni, twende 102 00:04:35,960 --> 00:04:39,320 hatua moja zaidi katika mkusanyiko wetu, kukusanyika. 103 00:04:39,320 --> 00:04:41,890 Ni kazi assembler ya kubadilisha code mkutano 104 00:04:41,890 --> 00:04:44,740 ndani ya kitu au code mashine. 105 00:04:44,740 --> 00:04:47,610 Kumbuka kwamba assembler haina pato kanisa; 106 00:04:47,610 --> 00:04:51,080 badala yake, inachukua katika mkutano na matokeo code mashine. 107 00:04:51,080 --> 00:04:54,040 Machine code ni halisi 1 na 0 kwamba CPU unaweza 108 00:04:54,040 --> 00:04:57,290 kuelewa, ingawa bado tuna kidogo kidogo ya kazi kushoto 109 00:04:57,290 --> 00:04:59,380 kabla tunaweza kuendesha programu yetu. 110 00:04:59,380 --> 00:05:01,400 Hebu kukusanyika mkutano wetu code kwa kupita 111 00:05:01,400 --> 00:05:04,080 Clang c-bendera. 112 00:05:04,080 --> 00:05:06,410 Sasa hebu angalia nini katika faili wamekusanyika. 113 00:05:06,410 --> 00:05:09,220 >> Naam, hiyo haina kutusaidia sana. 114 00:05:09,220 --> 00:05:11,340 Kumbuka kwamba code mashine ni ndio na zeros kwamba 115 00:05:11,340 --> 00:05:13,240 kompyuta yako inaweza kuelewa. 116 00:05:13,240 --> 00:05:16,080 Hiyo haina maana ni rahisi kwa sisi kuelewa. 117 00:05:16,080 --> 00:05:19,160 Hivyo hasa jinsi kiwango cha chini ni mkutano? 118 00:05:19,160 --> 00:05:21,480 Ni karibu kufanana kwa kificho kitu. 119 00:05:21,480 --> 00:05:24,300 Kwenda kutoka mkutano kwa kificho kitu ni zaidi ya 120 00:05:24,300 --> 00:05:27,540 tafsiri ya mageuzi, ambayo ni kwa nini 121 00:05:27,540 --> 00:05:29,310 mtu anaweza kufikiria assembler kwa 122 00:05:29,310 --> 00:05:31,400 kufanya lolote kuandaa halisi. 123 00:05:31,400 --> 00:05:34,110 Kwa kweli, ni pretty rahisi manually kutafsiri kutoka 124 00:05:34,110 --> 00:05:36,050 mkutano kwa code mashine. 125 00:05:36,050 --> 00:05:39,040 Kuangalia kanisa kwa ajili ya kazi kuu, kwamba mstari wa kwanza 126 00:05:39,040 --> 00:05:42,100 kinachotokea kwa yanahusiana na 0x55 hexadesimoli. 127 00:05:42,100 --> 00:05:45,470 Katika binary, hiyo ni 1,010,101. 128 00:05:45,470 --> 00:05:49,300 mstari wa pili hutokea yanahusiana 0x895 hexadesimoli. 129 00:05:49,300 --> 00:05:51,290 Na pili, 0x56. 130 00:05:51,290 --> 00:05:53,730 Kutokana na meza rahisi, unaweza kutafsiri 131 00:05:53,730 --> 00:05:57,130 mkutano ndani ya kificho kwamba mashine wanaweza kuelewa pia. 132 00:05:57,130 --> 00:05:58,810 >> Hivyo kuna moja iliyobaki hatua katika 133 00:05:58,810 --> 00:06:01,150 mkusanyiko, ambayo ni ya kuunganisha. 134 00:06:01,150 --> 00:06:04,530 Kuunganisha unachanganya rundo la files kifaa kwenye faili moja kubwa 135 00:06:04,530 --> 00:06:06,380 kuwa unaweza kweli nitafanya. 136 00:06:06,380 --> 00:06:08,570 Kuunganisha ni sana mfumo tegemezi. 137 00:06:08,570 --> 00:06:11,030 Hivyo njia rahisi ya kupata Clang tu kuunganisha kifaa 138 00:06:11,030 --> 00:06:13,920 files pamoja ni kuwaita Clang wote wa files kwamba 139 00:06:13,920 --> 00:06:15,190 unataka kuunganisha pamoja. 140 00:06:15,190 --> 00:06:18,740 Kama wewe taja files o., Basi itakuwa si haja ya reprocess, 141 00:06:18,740 --> 00:06:21,680 kukusanya, na kukusanyika wote wa chanzo code yako. 142 00:06:21,680 --> 00:06:23,960 Hebu kutupa kazi math katika faili wetu, hivyo tuna 143 00:06:23,960 --> 00:06:25,210 kitu zilizounganishwa in 144 00:06:34,220 --> 00:06:37,010 Sasa hebu kukusanya nyuma chini code kitu na 145 00:06:37,010 --> 00:06:38,260 piga Clang juu yake. 146 00:06:40,560 --> 00:06:41,420 Lo. 147 00:06:41,420 --> 00:06:43,790 Tangu sisi ni pamoja na kazi math, tunahitaji kuunganisha katika 148 00:06:43,790 --> 00:06:46,610 maktaba na math-LM. 149 00:06:46,610 --> 00:06:48,990 >> Kama sisi alitaka kuunganisha pamoja rundo la. O files kwamba sisi 150 00:06:48,990 --> 00:06:51,420 aliandika juu yetu wenyewe, tunatarajia tu kutaja yao yote katika 151 00:06:51,420 --> 00:06:52,460 amri line. 152 00:06:52,460 --> 00:06:55,320 kizuizi ni kwamba moja tu ya hizi files lazima 153 00:06:55,320 --> 00:06:57,790 kweli bayana kazi kuu, au mwingine 154 00:06:57,790 --> 00:06:59,930 kusababisha executable bila kujua wapi kuanza 155 00:06:59,930 --> 00:07:00,910 mbio code yako. 156 00:07:00,910 --> 00:07:03,360 Nini tofauti kati ya inayobainisha faili kuhusisha katika 157 00:07:03,360 --> 00:07:06,600 kwa-l na tu inayobainisha faili moja kwa moja? 158 00:07:06,600 --> 00:07:07,440 Chochote. 159 00:07:07,440 --> 00:07:09,850 Ni tu Clang kinachotokea kwa kujua nini hasa faili 160 00:07:09,850 --> 00:07:12,560 kitu kama-LM kinachotokea kwa kutaja. 161 00:07:12,560 --> 00:07:14,700 Kama alijua kwamba faili mwenyewe, unaweza kutaja ni 162 00:07:14,700 --> 00:07:15,930 waziwazi. 163 00:07:15,930 --> 00:07:18,990 Kumbuka tu kwamba wote-l bendera na kuja mwishoni 164 00:07:18,990 --> 00:07:20,770 ya mteja mahitaji yako. 165 00:07:20,770 --> 00:07:22,300 >> Na kwamba wote kilichopo. 166 00:07:22,300 --> 00:07:24,940 Wakati wewe kukimbia tu juu ya Clang files baadhi, hii ni nini ni 167 00:07:24,940 --> 00:07:26,350 kweli kufanya. 168 00:07:26,350 --> 00:07:29,490 Jina langu ni Rob Bowden, na hii ni CS50.