[Powered by Google Translate] Rob Bowden: Hebu majadiliano kuhusu compilers.
Mpaka hatua hii, ve tu typed up chanzo yako code katika
baadhi files, akawatuma kwa njia ya sanduku hili kubwa nyeusi kwamba ni
Clang, na nje anakuja executable faili yako kwamba hana
hasa nini aliandika katika chanzo code yako.
Kama kichawi kama kwamba imekuwa, sisi ni kwenda kuchukua karibu
kuangalia nini ni kweli yanatokea
wakati sisi kukusanya faili.
Hivyo ni nini maana kukusanya kitu?
>> Naam, katika maana zaidi ya jumla, ni njia tu
kubadilisha iliyoandikwa katika moja
programu lugha na mwingine.
Lakini kwa kawaida wakati watu wanasema kukusanya kitu fulani, wao
mean wao ni kuchukua ni kutoka programu ngazi za juu
Lugha ya lugha ngazi ya chini ya programu.
Haya yanaweza kuonekana kama suala subjective sana.
Kwa mfano, pengine sidhani wa C kama juu
ngazi ya programu ya lugha, lakini huna kukusanya yake.
Lakini zote ni jamaa.
Kama tutaweza kuona, code mkutano na hatimaye mashine
kificho kwamba sisi kukusanya chini ni undeniably ngazi ya chini
kuliko C.
Ingawa sisi utakuwa kutumia Clang katika maandamano ya leo,
mawazo mengi hapa kubeba zaidi ya watunzi wengine.
>> Kwa Clang, kuna hatua nne kuu katika ujumla
mkusanyiko.
Hizi ni moja, preprocessing kufanyika kwa preprocessor; mbili,
mkusanyiko kufanyika kwa compiler; tatu, kukusanyika
kufanyika kwa assembler, na nne,
kuunganisha kufanyika kwa linker.
Ni inaweza kuwa utata kwamba mmoja wa substeps ya jumla
Compilers Clang inaitwa compiler, lakini
tutaweza kupata kwamba.
Sisi utakuwa kutumia rahisi hujambo dunia mpango kama mfano wetu
katika video hii.
Hebu tuangalie.
>> Hatua ya kwanza ni preprocessing.
Je preprocessor kufanya?
Katika pretty much kila mpango C ve milele kusoma au kuandika,
umetumia mistari ya kificho kwamba kuanza na hash.
Mimi nitakuita ni hash, lakini pia unaweza kuiita paundi, idadi
saini, au mkali.
Yoyote line vile ni agizo preprocessor.
Ve pengine kuona # define na # pamoja kabla, lakini kuna
kadhaa zaidi kwamba preprocessor inatambua.
Hebu kuongeza # define kwa mfano wetu hujambo dunia.
Sasa hebu kukimbia tu preprocessor juu ya faili hii.
Kwa kupita clage Barua bendera, wewe ni mwelekezaji ni kukimbia
tu preprocessor.
Hebu kuona nini kinatokea.
Inaonekana kama Clang tu mtemi kila kitu
katika mstari amri.
Ili kuokoa wote wa pato hii na faili mpya iitwayo
hello2.c, tutaweza append> hello2.c kwa amri yetu.
Sasa hebu tuangalie faili wetu preprocessed.
>> Ho, nini kilichotokea na mpango wetu mfupi kidogo?
Kama sisi kwenda njia yote hadi chini ya faili hili, tutaweza kuona
baadhi ya kificho kwamba sisi kweli aliandika.
Ona kwamba define # ni wamekwenda na matukio yote ya jina
wamekuwa kubadilishwa na nini hasa sisi maalum katika
# Define mstari.
Kwa hiyo kile ni hawa wote typedefs na maazimio ya kazi
saa ya juu ya faili?
Ona kwamba define # hakuwa preprocessor tu
maelekezo kwamba sisi maalum.
Sisi pia ni pamoja # stdio.h.
Basi wote wa mistari mambo ni kweli tu stdio.h kunakiliwa
na pasted ndani ya juu ya faili hii.
Hiyo ndiyo sababu header files ni hivyo muhimu kwa ajili ya kazi
maazimio.
Badala ya wanaohitaji na nakala na kuweka wote wa kazi
maazimio mpango juu ya kutumia saa ya juu ya faili yako,
preprocessor itakuwa nakala na kuweka yao kutoka header
faili kwa ajili yenu.
>> Sasa kwa kuwa sisi ni kosa preprocessing, sisi kuhamia kwenye
mkusanyiko.
sababu sisi wito huu mkusanyiko hatua ni kwa sababu hii ni
hatua ambapo Clang kweli haina kuandaa wake kutoka C kwa
mkutano code.
Ili kuwa na Clang kukusanya faili chini ya kanisa, lakini
kuendelea hakuna zaidi, kupita S-bendera
katika mstari amri.
Hebu tuangalie katika mkutano
faili kwamba alikuwa outputted.
Inaonekana kama lugha tofauti kabisa.
Bunge code ni sana processor maalum.
Katika kesi hiyo, tangu appliance CS50 ni mbio juu ya
virtual processor x86, hii ni x86 mkutano code.
Watu wachache sana kuandika moja kwa moja katika mkutano code siku hizi,
lakini mpango kila C wewe milele kuandika anapata kubadilishwa chini
ndani ya kanisa.
Tena, sisi kuwaita hatua hii kuandaa C katika mkutano
tangu sisi ni kwenda kutoka ngazi ya juu kwa ngazi za chini
programu lugha.
>> Kinachofanya mkutano ngazi ya chini kuliko C?
Naam, katika mkutano, sisi ni mdogo sana katika nini tunaweza kufanya.
Hakuna kama wa,, wakati ni kwa ni, au matanzi ya aina yoyote.
Lakini unaweza kukamilisha mambo sawa kwamba hawa kudhibiti
miundo kutoa kutumia shughuli mdogo kwamba
mkutano gani kutoa.
Lakini kuona tu jinsi kiwango cha chini mkutano kweli ni, twende
hatua moja zaidi katika mkusanyiko wetu, kukusanyika.
Ni kazi assembler ya kubadilisha code mkutano
ndani ya kitu au code mashine.
Kumbuka kwamba assembler haina pato kanisa;
badala yake, inachukua katika mkutano na matokeo code mashine.
Machine code ni halisi 1 na 0 kwamba CPU unaweza
kuelewa, ingawa bado tuna kidogo kidogo ya kazi kushoto
kabla tunaweza kuendesha programu yetu.
Hebu kukusanyika mkutano wetu code kwa kupita
Clang c-bendera.
Sasa hebu angalia nini katika faili wamekusanyika.
>> Naam, hiyo haina kutusaidia sana.
Kumbuka kwamba code mashine ni ndio na zeros kwamba
kompyuta yako inaweza kuelewa.
Hiyo haina maana ni rahisi kwa sisi kuelewa.
Hivyo hasa jinsi kiwango cha chini ni mkutano?
Ni karibu kufanana kwa kificho kitu.
Kwenda kutoka mkutano kwa kificho kitu ni zaidi ya
tafsiri ya mageuzi, ambayo ni kwa nini
mtu anaweza kufikiria assembler kwa
kufanya lolote kuandaa halisi.
Kwa kweli, ni pretty rahisi manually kutafsiri kutoka
mkutano kwa code mashine.
Kuangalia kanisa kwa ajili ya kazi kuu, kwamba mstari wa kwanza
kinachotokea kwa yanahusiana na 0x55 hexadesimoli.
Katika binary, hiyo ni 1,010,101.
mstari wa pili hutokea yanahusiana 0x895 hexadesimoli.
Na pili, 0x56.
Kutokana na meza rahisi, unaweza kutafsiri
mkutano ndani ya kificho kwamba mashine wanaweza kuelewa pia.
>> Hivyo kuna moja iliyobaki hatua katika
mkusanyiko, ambayo ni ya kuunganisha.
Kuunganisha unachanganya rundo la files kifaa kwenye faili moja kubwa
kuwa unaweza kweli nitafanya.
Kuunganisha ni sana mfumo tegemezi.
Hivyo njia rahisi ya kupata Clang tu kuunganisha kifaa
files pamoja ni kuwaita Clang wote wa files kwamba
unataka kuunganisha pamoja.
Kama wewe taja files o., Basi itakuwa si haja ya reprocess,
kukusanya, na kukusanyika wote wa chanzo code yako.
Hebu kutupa kazi math katika faili wetu, hivyo tuna
kitu zilizounganishwa in
Sasa hebu kukusanya nyuma chini code kitu na
piga Clang juu yake.
Lo.
Tangu sisi ni pamoja na kazi math, tunahitaji kuunganisha katika
maktaba na math-LM.
>> Kama sisi alitaka kuunganisha pamoja rundo la. O files kwamba sisi
aliandika juu yetu wenyewe, tunatarajia tu kutaja yao yote katika
amri line.
kizuizi ni kwamba moja tu ya hizi files lazima
kweli bayana kazi kuu, au mwingine
kusababisha executable bila kujua wapi kuanza
mbio code yako.
Nini tofauti kati ya inayobainisha faili kuhusisha katika
kwa-l na tu inayobainisha faili moja kwa moja?
Chochote.
Ni tu Clang kinachotokea kwa kujua nini hasa faili
kitu kama-LM kinachotokea kwa kutaja.
Kama alijua kwamba faili mwenyewe, unaweza kutaja ni
waziwazi.
Kumbuka tu kwamba wote-l bendera na kuja mwishoni
ya mteja mahitaji yako.
>> Na kwamba wote kilichopo.
Wakati wewe kukimbia tu juu ya Clang files baadhi, hii ni nini ni
kweli kufanya.
Jina langu ni Rob Bowden, na hii ni CS50.