[Powered by Google Translate] ROB Bowden: Ejja nitkellmu dwar kumpilaturi.
Sa dan il-punt, inti stajt biss ittajpjat up kodiċi tas-sors tiegħek fis
xi fajls, mibgħuta lilhom permezz ta 'din il-kaxxa s-sewda kbir li huwa
Clang, u barra taqa eżekutibbli fajl tiegħek li ma
eżattament dak li kiteb fil-kodiċi tas-sors tiegħek.
Kif maġika bħala li kien, aħna qed tmur biex tieħu aktar mill-qrib
tħares lejn dak li verament jiġri
meta aħna jikkompilaw fajl.
Allura dak ma jfisser li jikkompilaw xi ħaġa?
>> Ukoll, fl-iktar sens ġenerali, dan ifisser biss
kodiċi trasformazzjoni miktub f'waħda
programmazzjoni lingwa għal oħra.
Imma normalment meta n-nies jgħidu li jiġbru xi ħaġa, huma
tfisser li qed tieħdu minn programmazzjoni livell ogħla
lingwa għal lingwa ta 'programmar aktar baxx livell.
Dawn jistgħu jidhru simili f'termini ferm suġġettivi.
Per eżempju, inti probabilment ma naħsibx ta 'C bħala għoli
programmazzjoni livell tal-lingwa, imma inti josservawha.
Imma dan kollu relattiva.
Kif Ser naraw, il-kodiċi assemblaġġ u eventwalment magna
kodiċi li aħna jikkompilaw 'li hija mingħajr dubju livell aktar baxx
minn C.
Għalkemm aħna ser tkun qed tuża clang fl dimostrazzjoni tal-lum,
Ħafna mill-ideat hawn jitmexxew għal kompilaturi oħra.
>> Għal clang, hemm erba 'passi ewlenin fil-kumplessiv
kumpilazzjoni.
Dawn huma wieħed, operazzjonijiet ta 'pretrattament li saret mill-preprocessor; tnejn,
kompilazzjoni magħmula mill-kompilatur; 3, assemblaġġ
isir mill-muntatur, u 4,
jgħaqqdu isir mill-linker.
Jista 'jkun konfuża li wieħed mill-substeps tal-kumplessiva
Kompilaturi clang huwa msejjaħ il-kompilatur, iżda
aħna ser jiksbu għal dak.
Aħna ser tkun qed tuża programm sempliċi dinja bonjour bħala eżempju tagħna
matul dan il-video.
Ejja tagħti ħarsa.
>> L-ewwel pass huwa operazzjonijiet ta 'pretrattament.
X'jagħmel il-preprocessor jagħmlu?
Fil pretty ħafna kull programm C li inti stajt qatt taqra jew bil-miktub,
inti stajt użati linji ta 'kodiċi li jibdew bil-hash.
I ser sejħa hija hash, imma int tista 'wkoll sejħa hija liri, in-numru
tiffirma, jew li jaqtgħu.
Kull linja bħal din hija direttiva preprocessor.
You ħadthom probabbilment jidhru # tiddefinixxi u # Jinkludu qabel, iżda hemm
huma aktar diversi li l-preprocessor jirrikonoxxi.
Ejja żid # tiddefinixxi għall-eżempju tagħna fid-dinja bonjour.
Issa ejja jimxu biss il-preprocessor fuq dan il-fajl.
Billi tgħaddi clage-E-bandiera, int struzzjonijiet li jimxu
biss il-preprocessor.
Ejja naraw x'jiġri.
Jidher qisu clang biss spits out kollox
fil-linja tal-kmand.
Sabiex tiffranka kollha ta 'dan l-output għall-fajl ġdida msejħa
hello2.c, aħna ser tehmeż> hello2.c għall-kmand tagħna.
Issa ejja tagħti ħarsa lejn fajl preprocessed tagħna.
>> Whoa, dak li ġara lil programm tagħna ftit qasir?
Jekk immorru-triq kollha lejn il-qiegħ ta 'dan il-fajl, Ser naraw
xi wħud mill-kodiċi li għandna attwalment kiteb.
Avviż li l jiddefinixxu # hija marret u l-każijiet ta 'isem
ġew sostitwiti bl eżattament dak li aħna speċifikat
l-# tiddefinixxi linja.
Iva, liema huma dawn il-typedefs u dikjarazzjonijiet funzjoni
fil-quċċata tal-fajl?
Avviż li l jiddefinixxu # kienx il preprocessor biss
direttiva li aħna speċifikat.
Għandna wkoll # Jinkludu stdio.h.
Allura kollha tal-linji crazy huma attwalment biss stdio.h kkupjati
u pasted fil-quċċata ta 'dan il-fajl.
C'est pourquoi fajls header huma tant utli għall-funzjoni
dikjarazzjonijiet.
Minflok li jeħtieġu li kopja u paste kollha tal-funzjoni
dikjarazzjonijiet inti pjan dwar l-użu fil-quċċata tal-fajl tiegħek, il-
preprocessor se kopja u paste minnhom mill-header
fajl għalik.
>> Issa li aħna qed isir operazzjonijiet ta 'pretrattament, nimxu fuq
kumpilazzjoni.
Ir-raġuni nitolbu dan kumpilazzjoni pass huwa għaliex dan huwa
il-pass fejn clang attwalment ma kompilazzjoni tagħha minn C sa
kodiċi assemblaġġ.
Sabiex ikun hemm clang jikkompilaw fajl isfel għall-assemblaġġ, iżda
tkompli aktar, jgħadduha lS-bandiera
fil-linja tal-kmand.
Ejja tagħti ħarsa lejn l-assemblaġġ
fajl li kien outputted.
Jidher qisu pjuttost lingwa differenti.
Kodiċi Assemblea hija speċifika proċessur ħafna.
F'dan il-każ, peress li l-appliance CS50 qed taħdem fuq
proċessur x86 virtwali, dan huwa kodiċi assemblea x86.
Ftit nies jiktbu direttament fil-kodiċi assemblaġġ dawn il-ġranet,
iżda kull programm C Qatt tikteb gets trasformat isfel
fis assemblaġġ.
Għal darb'oħra, nagħmlu sejħa dan il-pass kompilazzjoni tal-C fis-assemblaġġ
peress li aħna qed tmur minn livell ogħla għal livell aktar baxx
programmazzjoni lingwa.
>> Dak li jagħmel livell assemblea inqas minn C?
Ukoll, fl-assemblaġġ, aħna huma limitati ħafna fil dak li nistgħu nagħmlu.
M'hemm l-ebda jekk l-, filwaqt li s, għall huwa, jew linji ta 'kwalunkwe tip.
Iżda int tista 'twettaq l-istess affarijiet li dawn l-kontroll
istrutturi joffru tuża l-operazzjonijiet limitati li
assemblaġġ ma jipprovdu.
Iżda biex tara kemm assemblaġġ livell baxx hija verament, immorru
pass ieħor fil-kumpilazzjoni tagħna, assemblaġġ.
Huwa xogħol l-muntatur għall tittrasforma l-kodiċi assemblaġġ
fil-għan jew l-kodiċi magna.
Ftakar li l-muntatur ma assemblea output;
pjuttost, hija tieħu fir assemblaġġ u l-kodiċi tal-magni outputs.
Kodiċi magna hija l-attwali 1 u s 0 illi CPU jista
jifhmu, għalkemm aħna xorta jkollhom ftit żgħira ta 'xogħol telqu
qabel ma nistgħu run program tagħna.
Ejja tiġbor kodiċi assemblea tagħna billi tgħaddi
Il-c-clang bandiera.
Issa ejja ara x'hemm fil-fajl immuntati.
>> Ukoll, li ma tgħinna ħafna.
Ftakar li l-kodiċi magna hija l-dawk żerijiet li
kompjuter tiegħek jista 'jifhem.
Dan ma jfissirx huwa faċli għalina biex nifhmu.
Allura eżattament kif baxx il-livell huwa assemblea?
Huwa kważi identiku għal kodiċi ta 'oġġett.
Going minn assemblaġġ li kodiċi ta 'oġġett hija ħafna aktar ta'
traduzzjoni minn trasformazzjoni, u huwa għalhekk li
wieħed ma jista 'jikkunsidra l-muntatur għall-
tagħmel xi kompilazzjoni attwali.
Fil-fatt, huwa pjuttost faċli li manwalment tittraduċi minn
assemblaġġ għall-kodiċi magna.
Meta wieħed iħares lejn l-assemblea għal funzjoni prinċipali, dik il-linja 1
jiġri li jikkorrispondu għal 0x55 hexadeċimali.
F'dan binarju, li l-1010101.
It-tieni linja jiġri li jikkorrispondu 0x895 hexadeċimali.
U l-li jmiss, 0x56.
Minħabba tabella relattivament sempliċi, inti tista 'tittraduċi
assemblaġġ fil-kodiċi li magni jistgħu jifhmu wisq.
>> Allura hemm pass wieħed li jifdal fl-
kumpilazzjoni, li huwa jgħaqqdu.
Linking tgħaqqad mazz ta 'fajls oġġett f'waħda fajl kbir
li inti tista 'attwalment tesegwixxi.
Linking hija dipendenti ħafna sistema.
Allura l-eħfef mod biex jiksbu clang għal ftit link oġġett
fajls flimkien huwa li sejħa clang fuq kollha tal-fajls li
inti tixtieq li jgħaqqad flimkien.
Jekk inti tispeċifika. Fajls o, allura mhux se jkollhom bżonn li mill-ġdid,
tiġbor, u jiġbor kollha ta 'kodiċi tas-sors tiegħek.
Ejja tarmi funzjoni matematika fil-fajl tagħna, hekk aħna
xi ħaġa li torbot pulzieri
Issa ejja josservawha lura għal kodiċi ta 'oġġett u
sejħa clang fuqha.
Oops.
Minħabba li aħna kien jinkludi funzjoni matematika, għandna bżonn biex torbot b'mod
il-librerija matematika ma 'lm.
>> Jekk ridna li jgħaqqad flimkien mazz ta 'fajls. O li aħna
kiteb fuq tagħna stess, aħna'd biss tispeċifika lilhom kollha fil-
linja tal-kmand.
Ir-restrizzjoni hija li wieħed biss minn dawn il-fajls għandu
fil-fatt jispeċifika funzjoni prinċipali, jew inkella l-
eżekutibbli li jirriżultaw ma jkunux jafu fejn tibda
running kodiċi tiegħek.
X'hemm differenza bejn tispeċifika fajl li torbot fl-
ma 'lu biss tispeċifika fajl direttament?
Xejn.
Huwa biss li clang jiġri li tkun taf eżattament liema fajl
xi ħaġa bħal-lm jiġri li jirreferu għall.
Jekk inti kienu jafu dan il-fajl innifsek, inti tista 'tispeċifika li
b'mod espliċitu.
Just ftakar li l-l bnadar jkollhom jiġu fit-tmiem
tad-domanda klijent tiegħek.
>> U li kollox hemm għaliha.
Meta inti biss run clang għal xi każijiet, dan huwa dak li huwa
fil-fatt jagħmlu.
Jisimni Rob Bowden, u dan huwa CS50.