1 00:00:07,200 --> 00:00:09,100 [Powered by Google Translate] ROB Bowden: skulum tala um vistþýðendur. 2 00:00:09,100 --> 00:00:11,490 Fram þessum tímapunkti, þú hefur bara slegið upp kóðann inn 3 00:00:11,490 --> 00:00:14,260 sumir skrá, sendi þá í gegnum þetta stór svartur kassi sem er 4 00:00:14,260 --> 00:00:16,890 Clang, og út kemur executable skrá sem gerir 5 00:00:16,890 --> 00:00:19,430 nákvæmlega það sem þú skrifaðir í kóða þínum. 6 00:00:19,430 --> 00:00:22,170 Eins töfrum sem það hefur verið, við erum að fara að taka a loka 7 00:00:22,170 --> 00:00:23,590 líta á það sem er raunverulega að gerast 8 00:00:23,590 --> 00:00:25,220 þegar við taka saman skrá. 9 00:00:25,220 --> 00:00:28,580 Og hvað þýðir það að þýða eitthvað? 10 00:00:28,580 --> 00:00:31,150 >> Jæja, í flestum almennum skilningi, það bara 11 00:00:31,150 --> 00:00:32,580 breyta númerið skrifað í einu 12 00:00:32,580 --> 00:00:34,680 forritunarmál til annars. 13 00:00:34,680 --> 00:00:37,550 En venjulega þegar fólk segir að þeir þýða eitthvað, þeir 14 00:00:37,550 --> 00:00:39,660 meina þeir eru að taka það frá hærra stigi forritun 15 00:00:39,660 --> 00:00:42,460 tungumál til lægra stigi forritunarmál. 16 00:00:42,460 --> 00:00:44,960 Þetta kann að virðast eins og mjög huglæg hugtök. 17 00:00:44,960 --> 00:00:48,090 Til dæmis, þú sennilega dont 'hugsa um C sem hátt 18 00:00:48,090 --> 00:00:51,440 stigi forritunarmál, en þú þýða það. 19 00:00:51,440 --> 00:00:52,730 En það er allt ættingja. 20 00:00:52,730 --> 00:00:55,790 Eins og við munum sjá, að samkoma númer og að lokum vél 21 00:00:55,790 --> 00:00:59,270 kóða sem við saman niður til er óneitanlega lægra stigi 22 00:00:59,270 --> 00:01:00,700 en C. 23 00:01:00,700 --> 00:01:03,310 Þó að við munum vera með Clang í mótmælum í dag, 24 00:01:03,310 --> 00:01:06,360 mikið af þeim hugmyndum hér bera yfir öðrum vistþýðendur. 25 00:01:06,360 --> 00:01:09,160 >> Fyrir Clang eru fjögur stór skref í heild 26 00:01:09,160 --> 00:01:10,200 samantekt. 27 00:01:10,200 --> 00:01:15,430 Þetta eru einn, forvinnu gert af Preprocessor, tveir, 28 00:01:15,430 --> 00:01:19,530 samantekt unnin af þýðanda, þrír, samsetningu 29 00:01:19,530 --> 00:01:22,010 gert af Assembler, og fjórir, 30 00:01:22,010 --> 00:01:24,640 tengja gert af linker. 31 00:01:24,640 --> 00:01:27,600 Það getur verið ruglingslegt að einn substeps af heildar 32 00:01:27,600 --> 00:01:30,980 Clang vistþýðendur heitir þýðanda, en 33 00:01:30,980 --> 00:01:32,530 við munum komast að því. 34 00:01:32,530 --> 00:01:35,050 Við munum vera með einfalt Halló heimur forrit sem dæmi okkar 35 00:01:35,050 --> 00:01:36,270 um þetta myndband. 36 00:01:36,270 --> 00:01:38,380 Við skulum taka a líta. 37 00:01:38,380 --> 00:01:40,330 >> Fyrsta skrefið er forvinnu. 38 00:01:40,330 --> 00:01:42,520 Hvað Preprocessor gera? 39 00:01:42,520 --> 00:01:45,560 Í nánast hvert C forrit sem þú hefur nokkurn tíma lesið eða skrifað, 40 00:01:45,560 --> 00:01:48,310 þú hefur notað línur af kóða sem byrja með kjötkássa. 41 00:01:48,310 --> 00:01:51,730 Ég kalla það kjötkássa, en þú getur líka hringt í það pund, númer 42 00:01:51,730 --> 00:01:53,280 undirrita, eða skarpur. 43 00:01:53,280 --> 00:01:56,840 Sérhver slík lína er Preprocessor tilskipun. 44 00:01:56,840 --> 00:02:00,650 Þú hefur sennilega séð # skilgreina og # include áður, en það 45 00:02:00,650 --> 00:02:03,690 eru nokkrir fleiri sem Preprocessor viðurkennir. 46 00:02:03,690 --> 00:02:07,340 Við skulum bæta # skilgreina á Halló heimur dæmi okkar. 47 00:02:07,340 --> 00:02:11,690 Nú skulum hlaupa bara Preprocessor á þessari skrá. 48 00:02:11,690 --> 00:02:16,150 Við brottför clage The-E fána, þú ert leiðbeina því að keyra 49 00:02:16,150 --> 00:02:17,880 bara Preprocessor. 50 00:02:17,880 --> 00:02:19,130 Við skulum sjá hvað gerist. 51 00:02:22,250 --> 00:02:24,020 Það lítur út eins og Clang bara spits út allt 52 00:02:24,020 --> 00:02:25,200 á stjórn lína. 53 00:02:25,200 --> 00:02:27,800 Til að vista öll þessi framleiðsla í nýja skrá sem heitir 54 00:02:27,800 --> 00:02:33,850 hello2.c, munum við auka> hello2.c að stjórn okkar. 55 00:02:33,850 --> 00:02:37,800 Nú skulum taka a líta á preprocessed skrá okkar. 56 00:02:37,800 --> 00:02:40,810 >> Vá, hvað gerðist til skamms litla kerfi okkar? 57 00:02:40,810 --> 00:02:43,890 Ef við förum alla leið til the botn af þessari skrá, munum við sjá 58 00:02:43,890 --> 00:02:46,070 sumir af the merkjamál sem við skrifaði reyndar. 59 00:02:46,070 --> 00:02:49,800 Takið eftir að # define er farinn og öll dæmi um nafn 60 00:02:49,800 --> 00:02:51,950 hefur verið skipt út nákvæmlega hvað við tilgreint í 61 00:02:51,950 --> 00:02:53,590 á # skilgreina línu. 62 00:02:53,590 --> 00:02:56,530 Svo það eru allar þessar typedefs og hlutverk yfirlýsingar 63 00:02:56,530 --> 00:02:58,140 efst á skránni? 64 00:02:58,140 --> 00:03:00,820 Takið eftir að # define var ekki aðeins Preprocessor 65 00:03:00,820 --> 00:03:02,390 tilskipun sem við tilgreint. 66 00:03:02,390 --> 00:03:05,280 Við höfum einnig fela # stdio.h. 67 00:03:05,280 --> 00:03:09,560 Svo allar brjálaður línur eru í raun bara stdio.h afrita 68 00:03:09,560 --> 00:03:11,810 og límt inn efst á þessari skrá. 69 00:03:11,810 --> 00:03:14,110 Þess vegna haus skrár eru svo gagnlegur fyrir virka 70 00:03:14,110 --> 00:03:15,160 yfirlýsingar. 71 00:03:15,160 --> 00:03:17,740 Í stað þess að þurfa að afrita og líma alla virka 72 00:03:17,740 --> 00:03:21,050 yfirlýsingar sem þú ætlar að nota efst á skránni þinni, 73 00:03:21,050 --> 00:03:22,990 Preprocessor munu afrita og líma þær frá haus 74 00:03:22,990 --> 00:03:24,140 skrá fyrir þig. 75 00:03:24,140 --> 00:03:26,480 >> Nú þegar við erum búin forvinnu, hreyfa við á 76 00:03:26,480 --> 00:03:27,680 samantekt. 77 00:03:27,680 --> 00:03:30,725 Ástæðan sem við köllum þetta skref samantekt er vegna þess að þetta er 78 00:03:30,725 --> 00:03:34,130 skref þar Clang raun er að setja saman sitt frá C til 79 00:03:34,130 --> 00:03:35,370 samkoma kóða. 80 00:03:35,370 --> 00:03:38,280 Til þess að hafa Clang saman skrá niður samkoma, en 81 00:03:38,280 --> 00:03:42,030 halda ekki lengra, gefa það sem-S fáninn 82 00:03:42,030 --> 00:03:43,560 á stjórn lína. 83 00:03:43,560 --> 00:03:44,790 Við skulum taka a líta á þinginu 84 00:03:44,790 --> 00:03:47,390 skrá sem var outputted. 85 00:03:47,390 --> 00:03:49,740 Það lítur út eins og nokkuð annað tungumál. 86 00:03:49,740 --> 00:03:52,660 Þingið númerið er mjög örgjörva sérstakur. 87 00:03:52,660 --> 00:03:55,440 Í þessu tilviki, þar sem CS50 tæki er í gangi á 88 00:03:55,440 --> 00:04:00,470 raunverulegur x86 örgjörva, þetta er x86 samkoma kóða. 89 00:04:00,470 --> 00:04:03,450 Mjög fáir skrifa beint í kóða samkoma þessa dagana, 90 00:04:03,450 --> 00:04:06,490 en sérhver C forrit sem þú skrifar alltaf fær umbreytt niður 91 00:04:06,490 --> 00:04:07,940 í þinginu. 92 00:04:07,940 --> 00:04:11,440 Aftur, kalla okkur þetta skref að setja saman C í söfnuðinum 93 00:04:11,440 --> 00:04:14,170 þar sem við erum að fara frá hærra stigi til lægra stigi 94 00:04:14,170 --> 00:04:15,480 forritunarmáli. 95 00:04:15,480 --> 00:04:17,880 >> Hvað gerir samkoma lægri en C? 96 00:04:17,880 --> 00:04:21,660 Jæja, í söfnuði, við erum takmörkuð mjög í hvað við getum gert. 97 00:04:21,660 --> 00:04:25,120 Það eru ekki ef er, en, því, eða lykkjur af einhverju tagi. 98 00:04:25,120 --> 00:04:27,560 En þú getur náð sömu hlutina að þessi stjórn 99 00:04:27,560 --> 00:04:30,270 mannvirki bjóða nota takmarkaða starfsemi sem 100 00:04:30,270 --> 00:04:32,350 samkoma er veitt. 101 00:04:32,350 --> 00:04:35,960 En til þess að sjá hversu lágt samkoma í raun er, við skulum fara 102 00:04:35,960 --> 00:04:39,320 einu skrefi lengra í samantekt okkar, samsetningu. 103 00:04:39,320 --> 00:04:41,890 Það er starf Assembler að umbreyta samkoma númer 104 00:04:41,890 --> 00:04:44,740 í hlut eða vél númer. 105 00:04:44,740 --> 00:04:47,610 Mundu að Assembler ekki framleiðsla samkoma; 106 00:04:47,610 --> 00:04:51,080 heldur tekur það í söfnuði og framleiðsla vél númer. 107 00:04:51,080 --> 00:04:54,040 Machine kóða er í raun 1 og er 0 að CPU getur 108 00:04:54,040 --> 00:04:57,290 skilja, þó að við höfum enn smá hluti af starfi vinstri 109 00:04:57,290 --> 00:04:59,380 áður en við getum keyrt forrit okkar. 110 00:04:59,380 --> 00:05:01,400 Við skulum saman samkoma kóða okkar við brottför 111 00:05:01,400 --> 00:05:04,080 Clang The-c-fána. 112 00:05:04,080 --> 00:05:06,410 Nú skulum sjá hvað er í safnað saman skrá. 113 00:05:06,410 --> 00:05:09,220 >> Jæja, það þýðir ekki að hjálpa okkur mjög mikið. 114 00:05:09,220 --> 00:05:11,340 Mundu að vélin kóða er sjálfur og núll að 115 00:05:11,340 --> 00:05:13,240 tölva getur skilið. 116 00:05:13,240 --> 00:05:16,080 Það þýðir ekki að það er auðvelt fyrir okkur að skilja. 117 00:05:16,080 --> 00:05:19,160 Svo nákvæmlega hversu lágu stigi er samkoma? 118 00:05:19,160 --> 00:05:21,480 Það er næstum eins og að mótmæla kóða. 119 00:05:21,480 --> 00:05:24,300 Going úr söfnuðinum að mótmæla kóða er mun meira af 120 00:05:24,300 --> 00:05:27,540 þýðing en umbreytingu, sem er hvers vegna 121 00:05:27,540 --> 00:05:29,310 mætti ​​ekki fjalla um Assembler til 122 00:05:29,310 --> 00:05:31,400 gera allir raunverulegur söfnun. 123 00:05:31,400 --> 00:05:34,110 Í raun er það nokkuð auðvelt að höndunum þýða úr 124 00:05:34,110 --> 00:05:36,050 samkoma til vél númer. 125 00:05:36,050 --> 00:05:39,040 Þegar litið er á þingi fyrir meginvirkni, að fyrsta lína 126 00:05:39,040 --> 00:05:42,100 gerist samsvara sextánskur 0x55. 127 00:05:42,100 --> 00:05:45,470 Í tvöfaldur, það er 1010101. 128 00:05:45,470 --> 00:05:49,300 Seinni línan gerist að svara sextánskur 0x895. 129 00:05:49,300 --> 00:05:51,290 Og næst, 0x56. 130 00:05:51,290 --> 00:05:53,730 Í ljósi tiltölulega einfalt borð, væri hægt að þýða 131 00:05:53,730 --> 00:05:57,130 samkoma í kóða sem vélar geta skilið líka. 132 00:05:57,130 --> 00:05:58,810 >> Þannig að það sem eftir skref í 133 00:05:58,810 --> 00:06:01,150 samantekt, sem er hlekkur. 134 00:06:01,150 --> 00:06:04,530 Krækjur sameinar fullt af skrá mótmæla í eina stóra skrá 135 00:06:04,530 --> 00:06:06,380 að þú getur í raun keyrt. 136 00:06:06,380 --> 00:06:08,570 Krækjur er mjög kerfi háð. 137 00:06:08,570 --> 00:06:11,030 Svo einfaldasta leiðin til að fá Clang að bara tengja hlut 138 00:06:11,030 --> 00:06:13,920 skrár saman er að kalla Clang á allar skrár sem 139 00:06:13,920 --> 00:06:15,190 þú vilt tengja saman. 140 00:06:15,190 --> 00:06:18,740 Ef þú tilgreinir. O skrá, þá mun ekki þurfa að endurvinna, 141 00:06:18,740 --> 00:06:21,680 safna saman, og safna öllum frumkóða þínu. 142 00:06:21,680 --> 00:06:23,960 Við skulum kasta stærðfræði virka í skrá okkar, þannig að við höfum 143 00:06:23,960 --> 00:06:25,210 eitthvað til að tengja inn 144 00:06:34,220 --> 00:06:37,010 Nú skulum þýða það aftur niður að mótmæla kóða og 145 00:06:37,010 --> 00:06:38,260 kalla Clang á það. 146 00:06:40,560 --> 00:06:41,420 Oops. 147 00:06:41,420 --> 00:06:43,790 Þar sem við með stærðfræði virka, þurfum við að tengja á 148 00:06:43,790 --> 00:06:46,610 stærðfræði bókasafn með-LM. 149 00:06:46,610 --> 00:06:48,990 >> Ef við vildum að tengja saman fullt af. O skrár sem við 150 00:06:48,990 --> 00:06:51,420 skrifaði á okkar eigin, við myndum bara skilgreina þeim öllum á 151 00:06:51,420 --> 00:06:52,460 stjórn lína. 152 00:06:52,460 --> 00:06:55,320 Takmörkunin er sú eina af þessum skrám skulu 153 00:06:55,320 --> 00:06:57,790 raun að tilgreina helstu hlutverk, eða annars 154 00:06:57,790 --> 00:06:59,930 leiðir executable vildi ekki vita hvar á að byrja 155 00:06:59,930 --> 00:07:00,910 keyra kóðann þinn. 156 00:07:00,910 --> 00:07:03,360 Hver er munurinn á að tilgreina skrá til að tengja í 157 00:07:03,360 --> 00:07:06,600 með-l og bara tilgreina skrá beint? 158 00:07:06,600 --> 00:07:07,440 Ekkert. 159 00:07:07,440 --> 00:07:09,850 Það er bara gerist að Clang að vita nákvæmlega hvaða skrá 160 00:07:09,850 --> 00:07:12,560 eitthvað eins-LM gerist að vísa til. 161 00:07:12,560 --> 00:07:14,700 Ef þú vissir að skrá þig, getur þú skilgreint það 162 00:07:14,700 --> 00:07:15,930 sérstaklega. 163 00:07:15,930 --> 00:07:18,990 Mundu bara að allt l fánar að koma í lok 164 00:07:18,990 --> 00:07:20,770 af eftirspurn viðskiptavina þinn. 165 00:07:20,770 --> 00:07:22,300 >> Og þessi 'allur there er til það. 166 00:07:22,300 --> 00:07:24,940 Þegar þú keyrir bara Clang á sumum skrám, þetta er það sem það er 167 00:07:24,940 --> 00:07:26,350 í raun að gera. 168 00:07:26,350 --> 00:07:29,490 Mitt nafn er Rob Bowden, og þetta er CS50.