[Powered by Google Translate] ROB Bowden: skulum tala um vistþýðendur.
Fram þessum tímapunkti, þú hefur bara slegið upp kóðann inn
sumir skrá, sendi þá í gegnum þetta stór svartur kassi sem er
Clang, og út kemur executable skrá sem gerir
nákvæmlega það sem þú skrifaðir í kóða þínum.
Eins töfrum sem það hefur verið, við erum að fara að taka a loka
líta á það sem er raunverulega að gerast
þegar við taka saman skrá.
Og hvað þýðir það að þýða eitthvað?
>> Jæja, í flestum almennum skilningi, það bara
breyta númerið skrifað í einu
forritunarmál til annars.
En venjulega þegar fólk segir að þeir þýða eitthvað, þeir
meina þeir eru að taka það frá hærra stigi forritun
tungumál til lægra stigi forritunarmál.
Þetta kann að virðast eins og mjög huglæg hugtök.
Til dæmis, þú sennilega dont 'hugsa um C sem hátt
stigi forritunarmál, en þú þýða það.
En það er allt ættingja.
Eins og við munum sjá, að samkoma númer og að lokum vél
kóða sem við saman niður til er óneitanlega lægra stigi
en C.
Þó að við munum vera með Clang í mótmælum í dag,
mikið af þeim hugmyndum hér bera yfir öðrum vistþýðendur.
>> Fyrir Clang eru fjögur stór skref í heild
samantekt.
Þetta eru einn, forvinnu gert af Preprocessor, tveir,
samantekt unnin af þýðanda, þrír, samsetningu
gert af Assembler, og fjórir,
tengja gert af linker.
Það getur verið ruglingslegt að einn substeps af heildar
Clang vistþýðendur heitir þýðanda, en
við munum komast að því.
Við munum vera með einfalt Halló heimur forrit sem dæmi okkar
um þetta myndband.
Við skulum taka a líta.
>> Fyrsta skrefið er forvinnu.
Hvað Preprocessor gera?
Í nánast hvert C forrit sem þú hefur nokkurn tíma lesið eða skrifað,
þú hefur notað línur af kóða sem byrja með kjötkássa.
Ég kalla það kjötkássa, en þú getur líka hringt í það pund, númer
undirrita, eða skarpur.
Sérhver slík lína er Preprocessor tilskipun.
Þú hefur sennilega séð # skilgreina og # include áður, en það
eru nokkrir fleiri sem Preprocessor viðurkennir.
Við skulum bæta # skilgreina á Halló heimur dæmi okkar.
Nú skulum hlaupa bara Preprocessor á þessari skrá.
Við brottför clage The-E fána, þú ert leiðbeina því að keyra
bara Preprocessor.
Við skulum sjá hvað gerist.
Það lítur út eins og Clang bara spits út allt
á stjórn lína.
Til að vista öll þessi framleiðsla í nýja skrá sem heitir
hello2.c, munum við auka> hello2.c að stjórn okkar.
Nú skulum taka a líta á preprocessed skrá okkar.
>> Vá, hvað gerðist til skamms litla kerfi okkar?
Ef við förum alla leið til the botn af þessari skrá, munum við sjá
sumir af the merkjamál sem við skrifaði reyndar.
Takið eftir að # define er farinn og öll dæmi um nafn
hefur verið skipt út nákvæmlega hvað við tilgreint í
á # skilgreina línu.
Svo það eru allar þessar typedefs og hlutverk yfirlýsingar
efst á skránni?
Takið eftir að # define var ekki aðeins Preprocessor
tilskipun sem við tilgreint.
Við höfum einnig fela # stdio.h.
Svo allar brjálaður línur eru í raun bara stdio.h afrita
og límt inn efst á þessari skrá.
Þess vegna haus skrár eru svo gagnlegur fyrir virka
yfirlýsingar.
Í stað þess að þurfa að afrita og líma alla virka
yfirlýsingar sem þú ætlar að nota efst á skránni þinni,
Preprocessor munu afrita og líma þær frá haus
skrá fyrir þig.
>> Nú þegar við erum búin forvinnu, hreyfa við á
samantekt.
Ástæðan sem við köllum þetta skref samantekt er vegna þess að þetta er
skref þar Clang raun er að setja saman sitt frá C til
samkoma kóða.
Til þess að hafa Clang saman skrá niður samkoma, en
halda ekki lengra, gefa það sem-S fáninn
á stjórn lína.
Við skulum taka a líta á þinginu
skrá sem var outputted.
Það lítur út eins og nokkuð annað tungumál.
Þingið númerið er mjög örgjörva sérstakur.
Í þessu tilviki, þar sem CS50 tæki er í gangi á
raunverulegur x86 örgjörva, þetta er x86 samkoma kóða.
Mjög fáir skrifa beint í kóða samkoma þessa dagana,
en sérhver C forrit sem þú skrifar alltaf fær umbreytt niður
í þinginu.
Aftur, kalla okkur þetta skref að setja saman C í söfnuðinum
þar sem við erum að fara frá hærra stigi til lægra stigi
forritunarmáli.
>> Hvað gerir samkoma lægri en C?
Jæja, í söfnuði, við erum takmörkuð mjög í hvað við getum gert.
Það eru ekki ef er, en, því, eða lykkjur af einhverju tagi.
En þú getur náð sömu hlutina að þessi stjórn
mannvirki bjóða nota takmarkaða starfsemi sem
samkoma er veitt.
En til þess að sjá hversu lágt samkoma í raun er, við skulum fara
einu skrefi lengra í samantekt okkar, samsetningu.
Það er starf Assembler að umbreyta samkoma númer
í hlut eða vél númer.
Mundu að Assembler ekki framleiðsla samkoma;
heldur tekur það í söfnuði og framleiðsla vél númer.
Machine kóða er í raun 1 og er 0 að CPU getur
skilja, þó að við höfum enn smá hluti af starfi vinstri
áður en við getum keyrt forrit okkar.
Við skulum saman samkoma kóða okkar við brottför
Clang The-c-fána.
Nú skulum sjá hvað er í safnað saman skrá.
>> Jæja, það þýðir ekki að hjálpa okkur mjög mikið.
Mundu að vélin kóða er sjálfur og núll að
tölva getur skilið.
Það þýðir ekki að það er auðvelt fyrir okkur að skilja.
Svo nákvæmlega hversu lágu stigi er samkoma?
Það er næstum eins og að mótmæla kóða.
Going úr söfnuðinum að mótmæla kóða er mun meira af
þýðing en umbreytingu, sem er hvers vegna
mætti ​​ekki fjalla um Assembler til
gera allir raunverulegur söfnun.
Í raun er það nokkuð auðvelt að höndunum þýða úr
samkoma til vél númer.
Þegar litið er á þingi fyrir meginvirkni, að fyrsta lína
gerist samsvara sextánskur 0x55.
Í tvöfaldur, það er 1010101.
Seinni línan gerist að svara sextánskur 0x895.
Og næst, 0x56.
Í ljósi tiltölulega einfalt borð, væri hægt að þýða
samkoma í kóða sem vélar geta skilið líka.
>> Þannig að það sem eftir skref í
samantekt, sem er hlekkur.
Krækjur sameinar fullt af skrá mótmæla í eina stóra skrá
að þú getur í raun keyrt.
Krækjur er mjög kerfi háð.
Svo einfaldasta leiðin til að fá Clang að bara tengja hlut
skrár saman er að kalla Clang á allar skrár sem
þú vilt tengja saman.
Ef þú tilgreinir. O skrá, þá mun ekki þurfa að endurvinna,
safna saman, og safna öllum frumkóða þínu.
Við skulum kasta stærðfræði virka í skrá okkar, þannig að við höfum
eitthvað til að tengja inn
Nú skulum þýða það aftur niður að mótmæla kóða og
kalla Clang á það.
Oops.
Þar sem við með stærðfræði virka, þurfum við að tengja á
stærðfræði bókasafn með-LM.
>> Ef við vildum að tengja saman fullt af. O skrár sem við
skrifaði á okkar eigin, við myndum bara skilgreina þeim öllum á
stjórn lína.
Takmörkunin er sú eina af þessum skrám skulu
raun að tilgreina helstu hlutverk, eða annars
leiðir executable vildi ekki vita hvar á að byrja
keyra kóðann þinn.
Hver er munurinn á að tilgreina skrá til að tengja í
með-l og bara tilgreina skrá beint?
Ekkert.
Það er bara gerist að Clang að vita nákvæmlega hvaða skrá
eitthvað eins-LM gerist að vísa til.
Ef þú vissir að skrá þig, getur þú skilgreint það
sérstaklega.
Mundu bara að allt l fánar að koma í lok
af eftirspurn viðskiptavina þinn.
>> Og þessi 'allur there er til það.
Þegar þú keyrir bara Clang á sumum skrám, þetta er það sem það er
í raun að gera.
Mitt nafn er Rob Bowden, og þetta er CS50.