[Powered by Google Translate] ROB Bowden: Let Konpilatzaileak buruz hitz egiteko.
Puntu honetan arte, besterik ez duzula idatzi zure iturburu-kodea sartu
fitxategi batzuk, bidalitako big box beltzaren bidez
Clang, eta zure fitxategi exekutagarria da, eta hori ez dator
zehatz-mehatz zer zure iturburu-kodea idatzi behar duzu.
Magikoa bezala den bezala, hurbilago bat hartuko dugu
zer ari den benetan gertatzen ari den begiratu
fitxategi bat konpilatu dugu.
Beraz, zer ez konpilatu zerbait esan nahi du?
>> Beno, gehienak, oro har, zentzu, esan nahi du, besterik ez da
eraldatzeko kodea bat idatzi
bestera hizkuntza programatzeko.
Baina normalean esaten zerbait konpilatu dute,
esan nahi maila altuagoa programazio hartzen ari dira
hizkuntzaren maila txikiagoa programazio hizkuntza.
Hauek termino oso subjektiboa bezala dirudi.
Adibidez, litekeena da ez C altua uste
maila programazio-hizkuntza, baina konpilatu daukazu.
Baina erlatiboa da.
Ikusiko dugu bezala, ekitaldi-kodea eta azkenean makina
kodea konpilatu dugu behera undeniably maila txikiagoa da
C. baino
Egongo gara erabiliz arren dugu gaur egungo manifestazio Clang,
Hemen ideia asko egiten beste Konpilatzaileak.
>> Clang daude, oro har, lau pauso nagusitan
konpilazio.
Bi hauek bat, preprocessing preprocessor arabera egin dira
konpilazio Konpilatzailearen egindako; hiru, muntaia
mihiztatze arabera egin, eta lau,
estekatzailearen bidez estekatzeko egin.
Nahasgarria izan daiteke, oro har substeps
Clang Konpilatzaileak izeneko konpiladorea da, baina
ahal izango dugu.
Erabili beharko dugu kaixo mundu programa sinple bat gure adibide gisa
Bideo honetan zehar.
Ikus dezagun begirada bat.
>> Lehen urratsa preprocessing da.
Zer preprocessor ez?
Pretty askoz bakoitzean C-programa inoiz irakurri edo idatzi,
erabili duzun kode lerro hash batekin hasten da.
Deitu hash dut, baina baita ere deitu dezakezu pounds, zenbaki
saioa hasteko, edo zorrotz.
Line, hala nola, edozein preprocessor direktiba bat da.
Seguruenik duzu # define eta # besteak beste, aurretik ikusi, baina ez dago
hainbat preprocessor onartzen dira.
Gehitu dezagun gure kaixo mundu Adibidez # definitzeko.
Orain dezagun exekutatu besterik ez preprocessor fitxategi hau.
Pasatuz clage-E Ez, exekutatu instructing ari zaren
besterik ez preprocessor.
Dezagun zer gertatzen den ikus-en.
Badirudi Clang besterik ez spits bezalako izarrekin guztia
komando-lerroan.
Irteera hau guztia izeneko fitxategi berri bat gordetzeko
hello2.c,> gure komando hello2.c erantsi dugu.
Orain dezagun hartu, gure fitxategia preprocessed begirada bat.
>> Tira, gure programa txiki labur zer gertatu zen?
Joaten gara guztiak fitxategi honen beheko aldean bada, ikusiko dugu
batzuk benetan dugun idatzi kodea.
Iragarki # define desagertuko da eta izena instantzia guztiak
izan ordez zehazki zer zehaztu dugu
# define line.
Beraz, zer dira typedefs horiek guztiak eta funtzio-adierazpenak
fitxategia goialdean?
Iragarki # define ez zela soilik preprocessor
direktiba zehaztu dugun.
Era berean, # include stdio.h.
Beraz, lerro crazy guztiak, egia esan, besterik ez stdio.h kopiatu
eta fitxategi honen goiko itsatsi.
Horregatik, goiburu fitxategiak dira, beraz, funtzio erabilgarria
deklarazioak.
Kopiatu eta itsatsi funtzio guztiak beharrik ordez
deklarazioak asmoa zure koadernoan goialdean erabiliz,
preprocessor kopiatu eta itsatsi tomado
zuretzat fitxategi batean.
>> Orain dugu preprocessing Bukatutakoan, aldera mugitzen dugu
konpilazio.
Deitzen dugun urratsa konpilazio honen arrazoia hau da delako
urratsa Clang benetan ez du bere C-tik konpilatzean
muntaia kodea.
Clang konpilatu fitxategi bat behera muntaia izan nahi du, baina
jarraituko gehiago nahi izanez gero ez, gainditu-S Ez
komando-lerroan.
Ikus dezagun muntaia
fitxategi hori outputted zen.
Beste hizkuntza bat nahiko itxura bezalakoa da.
Batzar kodea oso-prozesadore jakin.
Kasu honetan, CS50 tresnaren bat exekutatzen
birtuala x86 prozesadorea, muntaia hau x86 kodea.
Oso jende gutxik idazten zuzenean muntaia kodea egun hauetan,
baina behin C programa idatzi duzu inoiz lortzen eraldatu behera
muntaia sartu.
Berriz ere, urrats hau C konpilatzean muntaketa deitzen dugun
ari gara, goi mailako maila bat baxuagoa geroztik joan
Hizkuntza programazioa.
>> Zein muntaketa C baino txikiagoa maila egiten?
Beno, muntaketa, gaude zer egin ahal izango dugu oso mugatuta dago.
Ez bada, berriz,, for, edo edozein motatako loops daude.
Baina gauza betetzeko dezakezu kontrol horiek
egitura eskaintzen mugatua eragiketak erabiliz
muntaia ez ematea.
Baina besterik ez nola maila baxua muntaia benetan ikusteko, goazen
urrats bat gehiago nahi izanez gero gure konpilazio, muntaia.
Mihiztatze muntaia kodea eraldatu lana da
objektu edo makina kodea sartu.
Gogoratu mihiztatze ez irteera muntaia;
baizik eta hartzen du, muntaketa eta irteerak makina kodea.
Makina kodea benetako 1 eta 0 PUZ bat da, ahal
ulertu, oraindik lan apur txiki utzi behar dugu, nahiz eta
dugu gure programa exekutatu aurretik.
Dezagun gure muntaia kodea gaindituta muntatzen
Clang-c Ez.
Orain zer muntatu fitxategi-en.
>> Beno, hori ez da lagun iezaguzu asko.
Gogoratu makina-kodea dira eta zeroen
zure ordenagailuan ulertzen.
Horrek ez du esan nahi, ulertzeko erraza da.
Beraz, zehazki nola maila baxua da muntaia?
Objektu kodea ia berdina da.
Muntaia objektu kodea joatean askoz gehiago da
eraldaketa bat baino itzulpena, zergatik da
agian kontuan hartu mihiztatze
egiteko benetako konpilazioaren edozein.
Izan ere, nahiko erraza da eskuz itzuli
makina-kodea muntaia.
Funtzio nagusia muntaia begira, lehen lerroan
gertatzen hamaseitarra 0x55 dagozkie.
Bitarrean, berriz, 1010101.
Bigarren lerroan gertatzen hamaseitarra 0x895 dagozkio.
Eta hurrengo, 0x56.
Nahiko erraza da taula bat, itzuli ahal izango duzu
kodea sartu muntaia, makinak ere ulertzen.
>> Beraz, ez dago bat gainerako urratsean
konpilazio, hau da, lotzen dituen.
Lotzea, objektu-fitxategiak sorta bat fitxategi bat big konbinatzen
benetan exekutatu ditzakezun.
Lotzen ditu, eta oso sistema menpe.
Beraz, estekatu objektu Clang lortzeko modurik errazena
fitxategiak elkarrekin Clang deitu diren fitxategiak
elkarrekin lotu nahi duzun.
Zehaztu duzu. Bada, o fitxategiak, ondoren, ezin izango da Prozesatu behar,
konpilatu, eta iturburu-kodea guztiak muntatzen.
Dezagun gure fitxategi math funtzio bat bota eta, beraz, dugu
zerbait sartu lotzeko
Dezagun konpilatu itzuli objektu-kodea eta
deitu Clang da.
Oops.
Barne math funtzio bat denez, lotu behar dugu
math liburutegi-lm.
>> Sorta elkarrekin lotzeko nahi badugu. O fitxategiak dugu
gure kabuz idatzi, besterik ez genuke zehaztu horiek guztiak.
komando-lerroa.
Debeku fitxategiak horietako bakarra burutzen da
benetan funtzio nagusia zehaztu, edo, bestela,
ondorioz exekutagarria ez dakit non hasteko
Zure kodea exekutatzen ari da.
Zer da fitxategi bat zehazten estekatu arteko aldea
l eta fitxategi bat zehaztea zuzenean?
Ezer ez.
Besterik ez Clang gertatzen den zehazki zer fitxategia jakin nahi da
zerbait bezala-lm gertatzen da ikus.
Bazekien fitxategi hori zeure burua bada, zehaztu ahal izango duzu
esplizituki.
Just gogoratu guztiak-l banderak amaieran etorri
zure bezero eskaria.
>> Eta hori ez da.
Noiz exekutatu besterik ez duzu Clang fitxategi batzuk, hau da, zer da
benetan egiten ari dira.
Nire izena Rob Bowden da, eta hau da CS50.