[Powered by Google Translate] ROB BOWDEN: Gadewch i ni siarad am crynoadyddion.
Tan y pwynt hwn, eich bod wedi teipio yn unig i fyny eich cod ffynhonnell i
rhai ffeiliau, eu hanfon drwy'r blwch du mawr sy'n
Clang, ac allan daw eich ffeil gweithredadwy sy'n gwneud
yn union beth rydych wedi ysgrifennu yn eich cod ffynhonnell.
Fel hudol fel sydd wedi bod, rydym yn mynd i gymryd yn nes
edrych ar yr hyn sy'n digwydd mewn gwirionedd
pan fyddwn yn llunio ffeil.
Felly, beth mae'n ei olygu i lunio rhywbeth?
>> Wel, yn yr ystyr mwyaf cyffredinol, 'i jyst yn golygu
cod trawsnewid ysgrifenedig mewn un
raglennu iaith i'r llall.
Ond fel arfer pan fydd pobl yn dweud eu llunio rhywbeth, maent yn
golygu eu bod yn cymryd o raglennu lefel uwch
iaith i iaith raglennu lefel is.
Gall y rhain yn ymddangos fel termau yn oddrychol iawn.
Er enghraifft, mae'n debyg nad ydych yn meddwl am C yn uchel
iaith rhaglennu lefel, ond byddwch yn llunio ei.
Ond mae'r cyfan perthynas.
Fel byddwn yn gweld, y cod cynulliad ac yn y pen draw peiriant
cod a llunio i lawr i yn ddiymwad lefel is
nag C.
Er y byddwn yn defnyddio Clang yn arddangos heddiw, a
llawer o'r syniadau yma cario drosodd i crynoadyddion eraill.
>> Er Clang, mae pedwar cam mawr yn y cyffredinol
casglu.
Mae'r rhain yn un, preprocessing a wneir gan y Preprocessor, dau,
casgliad a wneir gan y compiler, tair, cydosod
a wneir gan y cyfosodwr, a phedwar,
cysylltu a wneir gan y linker.
Gall fod yn ddryslyd mai un o substeps y cyffredinol
Crynoadyddion Clang yw'r enw ar y compiler, ond
byddwn yn mynd i hynny.
Byddwn yn defnyddio'r rhaglen fyd helo syml fel ein enghraifft
drwy gydol y fideo.
Gadewch i ni edrych.
>> Y cam cyntaf yw preprocessing.
Beth mae'r Preprocessor yn ei wneud?
Yn 'n bert lawer pob rhaglen C ydych chi wedi darllen erioed neu ysgrifenedig,
rydych wedi defnyddio llinellau o god sy'n dechrau gyda hash.
'N annhymerus' alw hash, ond efallai y byddwch hefyd yn ei alw bunnoedd, rhif
lofnodi, neu miniog.
Unrhyw linell o'r fath yn gyfarwyddeb Preprocessor.
Rydych chi wedi gweld yn ôl pob tebyg # diffinio a # cynnwys o'r blaen, ond mae
yn nifer mwy na'r Preprocessor yn cydnabod.
Gadewch i ni ychwanegu # define at ein henghraifft byd helo.
Nawr, gadewch i redeg dim ond y Preprocessor ar y ffeil hon.
Drwy basio clage E-faner, rydych yn cyfarwyddo i redeg
dim ond y Preprocessor.
Gadewch i ni weld beth sy'n digwydd.
Mae'n edrych fel Clang just poeri allan bopeth
ar y llinell orchymyn.
Er mwyn achub yr holl allbwn hwn at ffeil newydd o'r enw
hello2.c, byddwn yn atodi> hello2.c i'n gorchymyn.
Nawr gadewch i ni gymryd golwg ar ein ffeil preprocessed.
>> Pwy yw, yr hyn a ddigwyddodd i'n rhaglen ychydig yn brin?
Os ydym yn mynd yr holl ffordd i waelod y ffeil, gawn ni weld
rhai o'r cod yr ydym yn mewn gwirionedd yn ysgrifennu.
Sylwch fod Diffiniwch # yn cael ei mynd a phob achos o enw
wedi cael eu disodli gyda union beth yr ydym a nodir yn
y # define llinell.
Felly beth yw'r holl typedefs a datganiadau swyddogaeth
ar ben y ffeil?
Sylwch nad Diffiniwch # oedd yr Preprocessor yn unig
gyfarwyddeb yn y penodedig.
Rydym hefyd wedi cynnwys stdio.h #.
Felly yr holl o'r llinellau crazy mewn gwirionedd dim ond copïo stdio.h
a gludo i mewn i frig y ffeil.
Dyna pam y ffeiliau pennawd mor ddefnyddiol ar gyfer swyddogaeth
datganiadau.
Yn hytrach na bod angen i gopïo a gludo yr holl swyddogaeth
datganiadau ydych yn bwriadu ar ddefnyddio ar frig eich ffeil, mae'r
Bydd Preprocessor copïo a'u gludo oddi wrth y pennawd
ffeilio i chi.
>> Nawr ein bod yn gwneud preprocessing, rydym yn symud ymlaen
casglu.
Y rheswm rydym yn galw hyn casgliad cam rheswm am hyn yw
y cam lle Clang mewn gwirionedd mae ei llunio o C i
cod cynulliad.
Er mwyn cael Clang llunio ffeil i lawr i ymgynnull, ond
barhau dim pellach, yn ei throsglwyddo i'r S-faner
ar y llinell orchymyn.
Gadewch i ni edrych ar y cynulliad
ffeil a outputted.
Mae'n edrych fel dipyn o iaith wahanol.
Cynulliad côd yn brosesydd penodol.
Yn yr achos hwn, gan fod yr offer CS50 yn rhedeg ar
prosesydd x86 rhithwir, mae hyn yn cod cynulliad x86.
Ychydig iawn o bobl ysgrifennu yn uniongyrchol mewn cod cynulliad y dyddiau hyn,
ond mae pob rhaglen C chi'n ysgrifennu yn cael ei drawsnewid i lawr
i mewn cynulliad.
Unwaith eto, rydym yn galw hyn yn cam llunio'r C yn y cynulliad
gan ein bod yn mynd o lefel uwch i lefel is
raglennu iaith.
>> Beth sy'n gwneud lefel cynulliad is na C?
Wel, yn y gwasanaeth, rydym yn gyfyngedig iawn yn yr hyn y gallwn ei wneud.
Nid oes unrhyw os, tra mae, er yn, neu ddolenni o unrhyw fath.
Ond gallwch gyflawni yr un pethau bod y rheolaeth
strwythurau yn cynnig ddefnyddio'r gweithrediadau cyfyngedig sydd
Cynulliad yn darparu.
Ond i weld yn union pa mor cynulliad lefel isel mewn gwirionedd, gadewch i ni fynd
un cam ymhellach yn ein casgliad, cydosod.
Mae'n waith y cyfosodwr i drawsnewid y cod cynulliad
i mewn i wrthrych neu god peiriant.
Cofiwch nad yw'r cyfosodwr yn y cynulliad allbwn;
yn hytrach, mae'n cymryd yn y gwasanaeth a chod pheiriant allbynnau.
Cod peiriant yn y gwir 1 a 0 yn bod CPU gall
deall, er ein bod yn dal i gael ychydig bach o waith ar ôl
cyn y gallwn redeg ein rhaglen.
Gadewch i ni ymgynnull ein cod cynulliad drwy basio
Clang y c-faner.
Nawr gadewch i ni weld beth sydd yn y ffeil ymgynnull.
>> Wel, nid yw hynny'n ein helpu yn fawr iawn.
Cofiwch fod y cod peiriant yn y rhai a sero y
gall eich cyfrifiadur ddeall.
Nid yw hynny'n golygu ei fod yn hawdd i ni ei ddeall.
Felly, yn union pa mor isel lefel yn y cynulliad?
Mae'n bron yn union yr un fath i cod gwrthrych.
Mynd o cynulliad i god gwrthrych yn llawer mwy o
cyfieithu na trawsnewid, a dyna pam
Efallai na fydd un ystyried y cyfosodwr i
gwneud unrhyw lunio'r gwirioneddol.
Yn wir, mae'n eithaf hawdd i manually gyfieithu o'r
cynulliad i god peiriant.
O edrych ar y cynulliad ar gyfer prif swyddogaeth, y llinell gyntaf
digwydd i gyfateb i 0x55 hecsadegol.
Yn deuaidd, dyna 1,010,101.
Mae'r ail linell yn digwydd i gyfateb 0x895 hecsadegol.
A'r nesaf, 0x56.
O ystyried tabl cymharol syml, gallech cyfieithu
cynulliad i mewn i'r cod y gall peiriannau ddeall hefyd.
>> Felly, mae un cam sy'n weddill yn
llunio, sy'n cael ei gysylltu.
Cysylltu cyfuno criw o ffeiliau gwrthrych i mewn i un ffeil fawr
eich bod yn gallu mewn gwirionedd yn gweithredu.
Cysylltu iawn system ddibynnol.
Felly, y ffordd hawsaf i gael Clang i ychydig cysylltu gwrthrych
ffeiliau gyda'i gilydd yw galw Clang ar yr holl ffeiliau yr
ydych am gysylltu â'i gilydd.
Os byddwch yn nodi. Ffeiliau o, yna ni fydd angen i ailbrosesu,
lunio, a chydosod eich holl cod ffynhonnell.
Gadewch i ni taflu swyddogaeth mathemateg yn ein ffeil, felly mae gennym
rhywbeth i gysylltu i mewn
Nawr gadewch i ni llunio yn ôl i lawr i cod gwrthrych a
alw Clang arno.
Wps.
Ers i ni yn cynnwys swyddogaeth mathemateg, mae angen i ni gysylltu
y llyfrgell math â-lm.
>> Os ydym eisiau cysylltu â'i gilydd criw o. Ffeiliau o ein bod yn
Ysgrifennodd ar ein pen ein hunain, byddem dim ond nodi i gyd ar y
llinell orchymyn.
Mae'r cyfyngiad yw bod un yn unig o'r ffeiliau hyn rhaid i
mewn gwirionedd yn nodi prif swyddogaeth, neu arall y
Ni fyddai gweithredadwy o ganlyniad yn gwybod ble i ddechrau
rhedeg eich cod.
Beth yw'r gwahaniaeth rhwng pennu ffeil i gysylltu
â-l, a dim ond pennu ffeil yn uniongyrchol?
Dim byd.
Mae'n dim ond bod Clang digwydd i wybod ffeil yn union beth
rhywbeth tebyg yn digwydd lm i gyfeirio atynt.
Os ydych yn gwybod y ffeil eich hun, gallech nodi ei
yn benodol.
Ond cofiwch fod pob-l faneri rhaid i ddod ar y diwedd
eich galw gan gleientiaid.
>> A dyna i gyd yna iddo.
Pan fyddwch yn unig yn rhedeg Clang ar rai ffeiliau, mae hyn yn beth mae'n
ei wneud mewn gwirionedd.
Fy enw i yw Rob Bowden, ac mae hyn yn CS50.