1 00:00:07,200 --> 00:00:09,100 [Powered by Google Translate] ROB BOWDEN: Gadewch i ni siarad am crynoadyddion. 2 00:00:09,100 --> 00:00:11,490 Tan y pwynt hwn, eich bod wedi teipio yn unig i fyny eich cod ffynhonnell i 3 00:00:11,490 --> 00:00:14,260 rhai ffeiliau, eu hanfon drwy'r blwch du mawr sy'n 4 00:00:14,260 --> 00:00:16,890 Clang, ac allan daw eich ffeil gweithredadwy sy'n gwneud 5 00:00:16,890 --> 00:00:19,430 yn union beth rydych wedi ysgrifennu yn eich cod ffynhonnell. 6 00:00:19,430 --> 00:00:22,170 Fel hudol fel sydd wedi bod, rydym yn mynd i gymryd yn nes 7 00:00:22,170 --> 00:00:23,590 edrych ar yr hyn sy'n digwydd mewn gwirionedd 8 00:00:23,590 --> 00:00:25,220 pan fyddwn yn llunio ffeil. 9 00:00:25,220 --> 00:00:28,580 Felly, beth mae'n ei olygu i lunio rhywbeth? 10 00:00:28,580 --> 00:00:31,150 >> Wel, yn yr ystyr mwyaf cyffredinol, 'i jyst yn golygu 11 00:00:31,150 --> 00:00:32,580 cod trawsnewid ysgrifenedig mewn un 12 00:00:32,580 --> 00:00:34,680 raglennu iaith i'r llall. 13 00:00:34,680 --> 00:00:37,550 Ond fel arfer pan fydd pobl yn dweud eu llunio rhywbeth, maent yn 14 00:00:37,550 --> 00:00:39,660 golygu eu bod yn cymryd o raglennu lefel uwch 15 00:00:39,660 --> 00:00:42,460 iaith i iaith raglennu lefel is. 16 00:00:42,460 --> 00:00:44,960 Gall y rhain yn ymddangos fel termau yn oddrychol iawn. 17 00:00:44,960 --> 00:00:48,090 Er enghraifft, mae'n debyg nad ydych yn meddwl am C yn uchel 18 00:00:48,090 --> 00:00:51,440 iaith rhaglennu lefel, ond byddwch yn llunio ei. 19 00:00:51,440 --> 00:00:52,730 Ond mae'r cyfan perthynas. 20 00:00:52,730 --> 00:00:55,790 Fel byddwn yn gweld, y cod cynulliad ac yn y pen draw peiriant 21 00:00:55,790 --> 00:00:59,270 cod a llunio i lawr i yn ddiymwad lefel is 22 00:00:59,270 --> 00:01:00,700 nag C. 23 00:01:00,700 --> 00:01:03,310 Er y byddwn yn defnyddio Clang yn arddangos heddiw, a 24 00:01:03,310 --> 00:01:06,360 llawer o'r syniadau yma cario drosodd i crynoadyddion eraill. 25 00:01:06,360 --> 00:01:09,160 >> Er Clang, mae pedwar cam mawr yn y cyffredinol 26 00:01:09,160 --> 00:01:10,200 casglu. 27 00:01:10,200 --> 00:01:15,430 Mae'r rhain yn un, preprocessing a wneir gan y Preprocessor, dau, 28 00:01:15,430 --> 00:01:19,530 casgliad a wneir gan y compiler, tair, cydosod 29 00:01:19,530 --> 00:01:22,010 a wneir gan y cyfosodwr, a phedwar, 30 00:01:22,010 --> 00:01:24,640 cysylltu a wneir gan y linker. 31 00:01:24,640 --> 00:01:27,600 Gall fod yn ddryslyd mai un o substeps y cyffredinol 32 00:01:27,600 --> 00:01:30,980 Crynoadyddion Clang yw'r enw ar y compiler, ond 33 00:01:30,980 --> 00:01:32,530 byddwn yn mynd i hynny. 34 00:01:32,530 --> 00:01:35,050 Byddwn yn defnyddio'r rhaglen fyd helo syml fel ein enghraifft 35 00:01:35,050 --> 00:01:36,270 drwy gydol y fideo. 36 00:01:36,270 --> 00:01:38,380 Gadewch i ni edrych. 37 00:01:38,380 --> 00:01:40,330 >> Y cam cyntaf yw preprocessing. 38 00:01:40,330 --> 00:01:42,520 Beth mae'r Preprocessor yn ei wneud? 39 00:01:42,520 --> 00:01:45,560 Yn 'n bert lawer pob rhaglen C ydych chi wedi darllen erioed neu ysgrifenedig, 40 00:01:45,560 --> 00:01:48,310 rydych wedi defnyddio llinellau o god sy'n dechrau gyda hash. 41 00:01:48,310 --> 00:01:51,730 'N annhymerus' alw hash, ond efallai y byddwch hefyd yn ei alw bunnoedd, rhif 42 00:01:51,730 --> 00:01:53,280 lofnodi, neu miniog. 43 00:01:53,280 --> 00:01:56,840 Unrhyw linell o'r fath yn gyfarwyddeb Preprocessor. 44 00:01:56,840 --> 00:02:00,650 Rydych chi wedi gweld yn ôl pob tebyg # diffinio a # cynnwys o'r blaen, ond mae 45 00:02:00,650 --> 00:02:03,690 yn nifer mwy na'r Preprocessor yn cydnabod. 46 00:02:03,690 --> 00:02:07,340 Gadewch i ni ychwanegu # define at ein henghraifft byd helo. 47 00:02:07,340 --> 00:02:11,690 Nawr, gadewch i redeg dim ond y Preprocessor ar y ffeil hon. 48 00:02:11,690 --> 00:02:16,150 Drwy basio clage E-faner, rydych yn cyfarwyddo i redeg 49 00:02:16,150 --> 00:02:17,880 dim ond y Preprocessor. 50 00:02:17,880 --> 00:02:19,130 Gadewch i ni weld beth sy'n digwydd. 51 00:02:22,250 --> 00:02:24,020 Mae'n edrych fel Clang just poeri allan bopeth 52 00:02:24,020 --> 00:02:25,200 ar y llinell orchymyn. 53 00:02:25,200 --> 00:02:27,800 Er mwyn achub yr holl allbwn hwn at ffeil newydd o'r enw 54 00:02:27,800 --> 00:02:33,850 hello2.c, byddwn yn atodi> hello2.c i'n gorchymyn. 55 00:02:33,850 --> 00:02:37,800 Nawr gadewch i ni gymryd golwg ar ein ffeil preprocessed. 56 00:02:37,800 --> 00:02:40,810 >> Pwy yw, yr hyn a ddigwyddodd i'n rhaglen ychydig yn brin? 57 00:02:40,810 --> 00:02:43,890 Os ydym yn mynd yr holl ffordd i waelod y ffeil, gawn ni weld 58 00:02:43,890 --> 00:02:46,070 rhai o'r cod yr ydym yn mewn gwirionedd yn ysgrifennu. 59 00:02:46,070 --> 00:02:49,800 Sylwch fod Diffiniwch # yn cael ei mynd a phob achos o enw 60 00:02:49,800 --> 00:02:51,950 wedi cael eu disodli gyda union beth yr ydym a nodir yn 61 00:02:51,950 --> 00:02:53,590 y # define llinell. 62 00:02:53,590 --> 00:02:56,530 Felly beth yw'r holl typedefs a datganiadau swyddogaeth 63 00:02:56,530 --> 00:02:58,140 ar ben y ffeil? 64 00:02:58,140 --> 00:03:00,820 Sylwch nad Diffiniwch # oedd yr Preprocessor yn unig 65 00:03:00,820 --> 00:03:02,390 gyfarwyddeb yn y penodedig. 66 00:03:02,390 --> 00:03:05,280 Rydym hefyd wedi cynnwys stdio.h #. 67 00:03:05,280 --> 00:03:09,560 Felly yr holl o'r llinellau crazy mewn gwirionedd dim ond copïo stdio.h 68 00:03:09,560 --> 00:03:11,810 a gludo i mewn i frig y ffeil. 69 00:03:11,810 --> 00:03:14,110 Dyna pam y ffeiliau pennawd mor ddefnyddiol ar gyfer swyddogaeth 70 00:03:14,110 --> 00:03:15,160 datganiadau. 71 00:03:15,160 --> 00:03:17,740 Yn hytrach na bod angen i gopïo a gludo yr holl swyddogaeth 72 00:03:17,740 --> 00:03:21,050 datganiadau ydych yn bwriadu ar ddefnyddio ar frig eich ffeil, mae'r 73 00:03:21,050 --> 00:03:22,990 Bydd Preprocessor copïo a'u gludo oddi wrth y pennawd 74 00:03:22,990 --> 00:03:24,140 ffeilio i chi. 75 00:03:24,140 --> 00:03:26,480 >> Nawr ein bod yn gwneud preprocessing, rydym yn symud ymlaen 76 00:03:26,480 --> 00:03:27,680 casglu. 77 00:03:27,680 --> 00:03:30,725 Y rheswm rydym yn galw hyn casgliad cam rheswm am hyn yw 78 00:03:30,725 --> 00:03:34,130 y cam lle Clang mewn gwirionedd mae ei llunio o C i 79 00:03:34,130 --> 00:03:35,370 cod cynulliad. 80 00:03:35,370 --> 00:03:38,280 Er mwyn cael Clang llunio ffeil i lawr i ymgynnull, ond 81 00:03:38,280 --> 00:03:42,030 barhau dim pellach, yn ei throsglwyddo i'r S-faner 82 00:03:42,030 --> 00:03:43,560 ar y llinell orchymyn. 83 00:03:43,560 --> 00:03:44,790 Gadewch i ni edrych ar y cynulliad 84 00:03:44,790 --> 00:03:47,390 ffeil a outputted. 85 00:03:47,390 --> 00:03:49,740 Mae'n edrych fel dipyn o iaith wahanol. 86 00:03:49,740 --> 00:03:52,660 Cynulliad côd yn brosesydd penodol. 87 00:03:52,660 --> 00:03:55,440 Yn yr achos hwn, gan fod yr offer CS50 yn rhedeg ar 88 00:03:55,440 --> 00:04:00,470 prosesydd x86 rhithwir, mae hyn yn cod cynulliad x86. 89 00:04:00,470 --> 00:04:03,450 Ychydig iawn o bobl ysgrifennu yn uniongyrchol mewn cod cynulliad y dyddiau hyn, 90 00:04:03,450 --> 00:04:06,490 ond mae pob rhaglen C chi'n ysgrifennu yn cael ei drawsnewid i lawr 91 00:04:06,490 --> 00:04:07,940 i mewn cynulliad. 92 00:04:07,940 --> 00:04:11,440 Unwaith eto, rydym yn galw hyn yn cam llunio'r C yn y cynulliad 93 00:04:11,440 --> 00:04:14,170 gan ein bod yn mynd o lefel uwch i lefel is 94 00:04:14,170 --> 00:04:15,480 raglennu iaith. 95 00:04:15,480 --> 00:04:17,880 >> Beth sy'n gwneud lefel cynulliad is na C? 96 00:04:17,880 --> 00:04:21,660 Wel, yn y gwasanaeth, rydym yn gyfyngedig iawn yn yr hyn y gallwn ei wneud. 97 00:04:21,660 --> 00:04:25,120 Nid oes unrhyw os, tra mae, er yn, neu ddolenni o unrhyw fath. 98 00:04:25,120 --> 00:04:27,560 Ond gallwch gyflawni yr un pethau bod y rheolaeth 99 00:04:27,560 --> 00:04:30,270 strwythurau yn cynnig ddefnyddio'r gweithrediadau cyfyngedig sydd 100 00:04:30,270 --> 00:04:32,350 Cynulliad yn darparu. 101 00:04:32,350 --> 00:04:35,960 Ond i weld yn union pa mor cynulliad lefel isel mewn gwirionedd, gadewch i ni fynd 102 00:04:35,960 --> 00:04:39,320 un cam ymhellach yn ein casgliad, cydosod. 103 00:04:39,320 --> 00:04:41,890 Mae'n waith y cyfosodwr i drawsnewid y cod cynulliad 104 00:04:41,890 --> 00:04:44,740 i mewn i wrthrych neu god peiriant. 105 00:04:44,740 --> 00:04:47,610 Cofiwch nad yw'r cyfosodwr yn y cynulliad allbwn; 106 00:04:47,610 --> 00:04:51,080 yn hytrach, mae'n cymryd yn y gwasanaeth a chod pheiriant allbynnau. 107 00:04:51,080 --> 00:04:54,040 Cod peiriant yn y gwir 1 a 0 yn bod CPU gall 108 00:04:54,040 --> 00:04:57,290 deall, er ein bod yn dal i gael ychydig bach o waith ar ôl 109 00:04:57,290 --> 00:04:59,380 cyn y gallwn redeg ein rhaglen. 110 00:04:59,380 --> 00:05:01,400 Gadewch i ni ymgynnull ein cod cynulliad drwy basio 111 00:05:01,400 --> 00:05:04,080 Clang y c-faner. 112 00:05:04,080 --> 00:05:06,410 Nawr gadewch i ni weld beth sydd yn y ffeil ymgynnull. 113 00:05:06,410 --> 00:05:09,220 >> Wel, nid yw hynny'n ein helpu yn fawr iawn. 114 00:05:09,220 --> 00:05:11,340 Cofiwch fod y cod peiriant yn y rhai a sero y 115 00:05:11,340 --> 00:05:13,240 gall eich cyfrifiadur ddeall. 116 00:05:13,240 --> 00:05:16,080 Nid yw hynny'n golygu ei fod yn hawdd i ni ei ddeall. 117 00:05:16,080 --> 00:05:19,160 Felly, yn union pa mor isel lefel yn y cynulliad? 118 00:05:19,160 --> 00:05:21,480 Mae'n bron yn union yr un fath i cod gwrthrych. 119 00:05:21,480 --> 00:05:24,300 Mynd o cynulliad i god gwrthrych yn llawer mwy o 120 00:05:24,300 --> 00:05:27,540 cyfieithu na trawsnewid, a dyna pam 121 00:05:27,540 --> 00:05:29,310 Efallai na fydd un ystyried y cyfosodwr i 122 00:05:29,310 --> 00:05:31,400 gwneud unrhyw lunio'r gwirioneddol. 123 00:05:31,400 --> 00:05:34,110 Yn wir, mae'n eithaf hawdd i manually gyfieithu o'r 124 00:05:34,110 --> 00:05:36,050 cynulliad i god peiriant. 125 00:05:36,050 --> 00:05:39,040 O edrych ar y cynulliad ar gyfer prif swyddogaeth, y llinell gyntaf 126 00:05:39,040 --> 00:05:42,100 digwydd i gyfateb i 0x55 hecsadegol. 127 00:05:42,100 --> 00:05:45,470 Yn deuaidd, dyna 1,010,101. 128 00:05:45,470 --> 00:05:49,300 Mae'r ail linell yn digwydd i gyfateb 0x895 hecsadegol. 129 00:05:49,300 --> 00:05:51,290 A'r nesaf, 0x56. 130 00:05:51,290 --> 00:05:53,730 O ystyried tabl cymharol syml, gallech cyfieithu 131 00:05:53,730 --> 00:05:57,130 cynulliad i mewn i'r cod y gall peiriannau ddeall hefyd. 132 00:05:57,130 --> 00:05:58,810 >> Felly, mae un cam sy'n weddill yn 133 00:05:58,810 --> 00:06:01,150 llunio, sy'n cael ei gysylltu. 134 00:06:01,150 --> 00:06:04,530 Cysylltu cyfuno criw o ffeiliau gwrthrych i mewn i un ffeil fawr 135 00:06:04,530 --> 00:06:06,380 eich bod yn gallu mewn gwirionedd yn gweithredu. 136 00:06:06,380 --> 00:06:08,570 Cysylltu iawn system ddibynnol. 137 00:06:08,570 --> 00:06:11,030 Felly, y ffordd hawsaf i gael Clang i ychydig cysylltu gwrthrych 138 00:06:11,030 --> 00:06:13,920 ffeiliau gyda'i gilydd yw galw Clang ar yr holl ffeiliau yr 139 00:06:13,920 --> 00:06:15,190 ydych am gysylltu â'i gilydd. 140 00:06:15,190 --> 00:06:18,740 Os byddwch yn nodi. Ffeiliau o, yna ni fydd angen i ailbrosesu, 141 00:06:18,740 --> 00:06:21,680 lunio, a chydosod eich holl cod ffynhonnell. 142 00:06:21,680 --> 00:06:23,960 Gadewch i ni taflu swyddogaeth mathemateg yn ein ffeil, felly mae gennym 143 00:06:23,960 --> 00:06:25,210 rhywbeth i gysylltu i mewn 144 00:06:34,220 --> 00:06:37,010 Nawr gadewch i ni llunio yn ôl i lawr i cod gwrthrych a 145 00:06:37,010 --> 00:06:38,260 alw Clang arno. 146 00:06:40,560 --> 00:06:41,420 Wps. 147 00:06:41,420 --> 00:06:43,790 Ers i ni yn cynnwys swyddogaeth mathemateg, mae angen i ni gysylltu 148 00:06:43,790 --> 00:06:46,610 y llyfrgell math â-lm. 149 00:06:46,610 --> 00:06:48,990 >> Os ydym eisiau cysylltu â'i gilydd criw o. Ffeiliau o ein bod yn 150 00:06:48,990 --> 00:06:51,420 Ysgrifennodd ar ein pen ein hunain, byddem dim ond nodi i gyd ar y 151 00:06:51,420 --> 00:06:52,460 llinell orchymyn. 152 00:06:52,460 --> 00:06:55,320 Mae'r cyfyngiad yw bod un yn unig o'r ffeiliau hyn rhaid i 153 00:06:55,320 --> 00:06:57,790 mewn gwirionedd yn nodi prif swyddogaeth, neu arall y 154 00:06:57,790 --> 00:06:59,930 Ni fyddai gweithredadwy o ganlyniad yn gwybod ble i ddechrau 155 00:06:59,930 --> 00:07:00,910 rhedeg eich cod. 156 00:07:00,910 --> 00:07:03,360 Beth yw'r gwahaniaeth rhwng pennu ffeil i gysylltu 157 00:07:03,360 --> 00:07:06,600 â-l, a dim ond pennu ffeil yn uniongyrchol? 158 00:07:06,600 --> 00:07:07,440 Dim byd. 159 00:07:07,440 --> 00:07:09,850 Mae'n dim ond bod Clang digwydd i wybod ffeil yn union beth 160 00:07:09,850 --> 00:07:12,560 rhywbeth tebyg yn digwydd lm i gyfeirio atynt. 161 00:07:12,560 --> 00:07:14,700 Os ydych yn gwybod y ffeil eich hun, gallech nodi ei 162 00:07:14,700 --> 00:07:15,930 yn benodol. 163 00:07:15,930 --> 00:07:18,990 Ond cofiwch fod pob-l faneri rhaid i ddod ar y diwedd 164 00:07:18,990 --> 00:07:20,770 eich galw gan gleientiaid. 165 00:07:20,770 --> 00:07:22,300 >> A dyna i gyd yna iddo. 166 00:07:22,300 --> 00:07:24,940 Pan fyddwch yn unig yn rhedeg Clang ar rai ffeiliau, mae hyn yn beth mae'n 167 00:07:24,940 --> 00:07:26,350 ei wneud mewn gwirionedd. 168 00:07:26,350 --> 00:07:29,490 Fy enw i yw Rob Bowden, ac mae hyn yn CS50.