SPEAKER: OK, så du vil ikke tro det, men i forrige uke, på mandag, i Pierce, jeg var nede i kjelleren. Jeg har aldri gå til Pierce. Og jeg kommer aldri tilbake igjen, fordi Jeg forlot mine ting alene for, liker, fem minutter og noen stjal datamaskinen min og min telefonen ut av ryggsekken min. Hvilket betyr at jeg fikk den tilbake, og Da mindre enn en uke senere det ble stjålet igjen. Og da det ble slått på - Find My iPhone fortsetter å være unyttig. Så jeg fortsetter å oppmuntre du ikke å bruke den. Det viste på en gang, og det var i MIT, som 15 minutter senere, og personen kalles dette telefonnummeret som viste opp i min AT & T anropslogg. Så jeg gikk på nettet, kalt den telefonen tall, og det gikk rett til denne telefonsvarer på spansk. Og jeg har ikke hørt om det siden. Så jeg måtte få en ny datamaskinen og telefonen. Jeg vet. Yeah. Men hvis dere ønsker å chip i min datamaskin fond etter dette, det er derfor Jeg har spurt deg her. Bare tuller. Men det var virkelig trist og traumatisk. Men det er alt tilbake nå, og det var derfor p-set 8 tok så lang tid, fordi Jeg hadde ikke en datamaskin. Og noen stjal den. Og jeg mailet, spør om de ville Vurder din p-set 8. Men de sa nei. Og jeg var som, kan jeg ha datamaskinen min tilbake? Og de er like, nei. Bare tuller. OK. Dette er vår siste delen, og jeg har et par - vi bare har tre ting på dagsorden. Vi kommer til å snakke litt om Q guide. Så får vi kommer til å bruke 15 minutter på en kul demo. Så skal vi til alle si farvel til hverandre. Du trenger egentlig ikke trenger datamaskinene eller en penn eller papir for å ta notater, eller følge med. Så jeg antar at hvis du har maskinen opp, da er du på Facebook. Just saying. Med mindre du fyller ut Q-guide, som er først. Q-guiden er åpen. Du har hatt en e-post om det. Når all Q ting er sendt på slutten av året, I få alle Q kommentarer i score fra alle som velger å gi meg tilbakemelding. Og så når du går i Q - Jeg vet ikke om du kan gjøre dette, Jeff, fordi du er og utvidelse student. Men når du går i Q, hvis du ikke har gjort det før, så velger du Læreren, som er David Malan. Du må gjøre ham. Og så kan du plukke TFs. Og du kan velge så mange TFs som du ønsker. Men det er 60 av oss. Du trenger ikke å plukke alle. Du kan bare plukke meg, eller bare velge en par andre mennesker, hvis du vil, til gi dem tilbakemeldinger også. Og så får du score på alle disse ulike akser, og så kan du la dem tilbakemelding. Og så, som en måned senere, Jeg skal få alle disse tilbakemeldingene. Og akkurat som tilbakemeldingene du har vært gi meg gjennom hele semesteret, jeg lese alt dette. Og det er veldig nyttig, og det hjelper meg å vokse som lærer og som en individ. Så, vær så snill, ta litt tid å gjøre det. Vi kommer bare til å være her for, for eksempel, i 30 minutter. Så hvis du vil, på slutten av denne, til ta fem minutter, og bare fylle ut Q, fordi den ikke tar lenger tid enn. Det ville være fantastisk, og du også får karakterene tilbake raskere hvis du fyller ut Q. Så de fleste av dere har gjort det før - eller nei, om lag halvparten av dere har gjort det før. Men hvis du er en førsteårsstudent, det er hva det er. Det vil være det samme for alle klassene. Gjør det. Det tar fem minutter. Men også, hvis du gjør det litt på alvor, det er ikke det verste i verden, fordi jeg sikkert ta det på alvor. Så hvis du lar meg et smilefjes, Jeg vil sette pris på det. Men jeg ville også sette pris på om du forlatt meg mer enn en smiley face. Men det er opp til deg. Jeg kan ikke fortelle deg - eller liker en stor smiley ansikt, med en kapital D. Det ville være enda bedre. OK, det er alt jeg har for Q. Hvis du Har du spørsmål, kan du spørre meg, men ganske selvforklarende. Bare, vær så snill, fylle det ut. Jeg ville virkelig sette pris på det, og det betyr mye for meg. OK, dette er hva vi kommer til å bruke 15 minutter å gå gjennom. Jeg skal vise deg noen kode. Jeg tror dette er veldig kult, og dette fikk meg mer spent i informatikk. Så jeg håper det vil gjøre samme for dere alle. Vi kommer til å åpne opp - og alt dette kode jeg skal sende til deg senere. Men vi er bare nødt til å åpne opp - Jeg er i min terminal - vi kommer til å åpne opp dette programmet kalt [? MySum. ?] Alle kan lese det, eller bør jeg gjøre det større? Kan noen fortelle meg hva denne koden vil gjøre når jeg kjører den, eller hva dette Programmet vil gjøre når jeg kjører det? [? Avi,?] Hva tror du det kommer til å gjøre? Fullfør tygging. Du bør ikke snakke med munnen åpen. PUBLIKUM: Tar det en haug med argumenter, finner summen av dem tilbake sum, og deretter skrive det ut? Eller det tar to argumenter, og så det gjør [uhørbart]. Og da det skrives ut uansett resultatene er. SPEAKER: Close, veldig nære. Noen som ønsker å legge til [? hva Avi?] sa? Har du behov for å gi dette programmet noen kommandolinje-argumenter? PUBLIKUM: Nei. SPEAKER: Nei. Hva skjer hvis du ikke gir det noen kommandolinje-argumenter? Jeg bare skrive dot slash MySum. PUBLIKUM: en pluss to er lik tre. SPEAKER: en pluss to er lik tre. Og det vil skrive det ut. Det er helt riktig. Du vil se at utskrifts f linje nederst. Det vil skrive ut a, b, og Da summen av a og b. Og jeg antar du anta at Summen virker riktig. God forutsetning. OK, og hva skjer hvis jeg gi det hva argument? [? Manu? ?] PUBLIKUM: Det vil legge til hva det første argumentet er å b.. Eller til to, beklager. SPEAKER: Høyre, til to. Er det noen som vet hva strtol gjør? Det er i utgangspunktet Atoi. Atoi er faktisk en fancy versjon av - eller i en enklere versjon av strtol. Men det bruker faktisk strtol. Og jeg fant det ut fordi jeg ønsket noe som atoi, og deretter når jeg gjorde atoi, leste jeg her nede. Og jeg fant "denne atferden er det samme som "strtol. Så det er i utgangspunktet Atoi for alle praktiske formål. Og du ser jeg selv bruker null og ti. Dette lar faktisk du tar en streng, og gjøre det til et nummer, og velg hva basen du ønsker å gjøre det i. Så dette er basen 10 rett her. Jeg kunne ha gjort basen to for desimal, basen 16 for heksadesimale. Det er ganske kult. Men lang historie kort, tar to denne tall og legger dem sammen. Så la oss kjøre den. Og du vil også legge merke til, er det er noen ting - så jeg har en Makefile akkurat her, og Hvis du åpner den opp, noen ting du vil legge merke til er forskjellige. Spesielt dette argumentet akkurat her, har du sannsynligvis har ikke sett det før. Vanligvis vi kompilere ting med bindestrek null, null. Dash null, null, betyr ikke gjør noen optimaliseringer, kompilatoren. Ikke prøv og gjøre noe fancy, eller gjøre noe løpe raskere, eller få kvitt variabler som er nødvendig. Ikke optimalisere denne koden i det hele tatt, Jeg ber for tredje-nivå optimalisering. Så jeg spør kompilatoren å gjøre en rekke optimaliseringer. Du kan endre det i Makefile når du har denne koden, hvis du vil ha å se forskjellige ting. Som vi skal vise i et sekund. Så vi kjøre min sum en pluss to pluss tre. Noen gi meg to argumenter. PUBLIKUM: 4 og 5. SPEAKER: 4 og 5. Takk. Flott, det fungerer. Hva er noen andre gode argumenter å prøve, for å sørge for at dette fungerer? Anyone? PUBLIKUM: 0. SPEAKER: 0 og? PUBLIKUM: Negativ 3. SPEAKER: Det fungerer. Men de var gode valg. OK, så la oss gå tilbake hit. Dette er mysum.c. Du vil merke det er også noe kalt sumfunction.c. Og dette sier, oh, det er noe definert i sumfunction.c. Jeg inkluderer ikke denne filen her fordi jeg ikke trenger det. Men jeg koble den inn når jeg kompilere, som du lagt merke til. La oss bla opp. Vi så da vi samlet mysum, ikke sant der, vi knyttet i den binære fra sumfunction.o. Og jeg trenger ikke topptekstfilen fordi, selvfølgelig, det er den funksjon erklæring. Så skarpt har normalt bare setter i en funksjon erklæring. Her har jeg bare sette den rett i koden. Og så jeg trenger å gjøre er å linke i det binære, som jeg gjør. Eventuelle gjetninger for hva som er i sumfunction.c? Hvilken kode jeg har skrevet i sumfunction.c? PUBLIKUM: [uhørbart]. SPEAKER: Eventuelle gjetninger? Yeah? Målgruppe: Jeg tror, ​​definerer noen [uhørbart]. SPEAKER: Ja. Så jeg skrive int sum int en. Jeg skriver denne linjen, og da har jeg åpent klammeparentes, lukket klammeparentes. Hva tror du jeg skriver inne de klammeparentes, inni den funksjonen? Yeah? PUBLIKUM: Return tilsvarer en. Prosessor: Det er en virkelig god gjetning. Hvem mener [? Manu?] Er riktig? Det sier returnere et pluss b. OK, ikke alle. [? Akshar,?] du gjør, også? Er du sikker? OK. Hva? PUBLIKUM: Du stavet det feil. SPEAKER: Nei, det gjorde jeg ikke. Ja, bare tuller. Du har rett. Det er nøyaktig hva den sier. Det er tilbake et pluss b. Det gjør mye fornuftig. OK, la oss gå tilbake hit. Vi ser hvordan header - det er returtypen. Husk, vi har sett den dagen en, returnere type av funksjon, men går før navnet på int funksjon. Her har jeg skrevet int. Hva tror du vil skje hvis i dette funksjon, kan jeg ikke skrive int, men Jeg skriver usignert? Forskjellen, selvfølgelig, være at usignert representerer bare positive heltall, og int kan være positiv eller negativ. Så jeg har endret avkastningen type denne funksjonen. Denne koden ikke stemmer overens denne avkastningen skriver her. Hva tror du vil skje når jeg kompilere? Du bør kjefte på meg. Ingen roping. Hva med når jeg kjører programmet? La oss gjøre før 0 negative 3, eller negativ 1. Det fungerer fremdeles, selv om jeg sier den returnerer et usignert heltall. Klart det ikke er tilbake et usignert heltall. Den returnerer et heltall. Den returnerer negativ en. OK, det er merkelig. Hva om hvis jeg går i her og gjøre det? Så jeg har forandret alt fra int til unsigned. Det kan bare ta usignerte heltall. Men vi tror fremdeles det vil kjøre? PUBLIKUM: Ja. SPEAKER: Det vil det. Det er galskap. Og vi passere i en klart tildelt heltall, kan vi passere to signert heltall, virker det fortsatt. OK, noen ideer om hvorfor det fortsatt fungerer, eller hva er det som skjer? Ja, Jeff. PUBLIKUM: Det har noe å gjøre med optimalisering som du uthevet. SPEAKER: Nei. Vi kan endre optimalisering, det vil fortsatt fungere. Jeg kan gjøre det for deg, men - PUBLIKUM: Jeg tar ditt ord for det. SPEAKER: Yeah. Hvis du åpner Makefile akkurat her, Jeg forandret optimalisering. Så du kan gjøre dash null, null. Det vil fortsatt fungere. Andre tanker? Dere alle forventes å jobbe, så Hvorfor gjorde du forventer at det skal fungere? Nei? Silence. OK. Jeg må vente syv sekunder, fordi jeg spurte et spørsmål. Så kule ting om C, og du har sannsynligvis opplevd før - du kanskje ikke har, kan dette være første gang. Men som dere alle vet, når jeg skriver noe i C, betyr det ikke lagre som dette på datamaskinen. Det er lagret som enere og nuller. Det går fra C-kode til maskinkode. Har noen sett montering kode før, maskin montering koden? Vi skal se på i et sekund. Det går fra C-kode til maskinkode. Og dere kjenner etappene av kompilering. Du måtte huske at for quiz ett, og deretter skrive det ut på quiz null. De fleste fikk det galt. Jeg tror dere spikret det. Men, dere er den beste delen for spørrekonkurranser, forresten. Som er kjempebra. Det vil ikke skade deg. Ikke vær bekymret. Men det er veldig kult. God jobb. Så det går til montering språk, og så går det til enere og nuller. Og enere og nuller lagres på datamaskin, og det er det som er lagret i den a.out, eller i dette tilfellet, den kjørbare filen. Og maskinen går enere og nuller. Høyre? Vi har lært dette før. Så kule ting er, denne usignerte idé, INTS ideen om typer usignert, et cetera, et cetera, er at her oppe i C-språk. De eksisterer. Men typer ikke eksisterer på de ettall og nuller. Typer ikke engang virkelig eksisterer på forsamlingen språknivå. Så det er noe som eksisterer i C verden, men finnes ikke i data verden eller prosessor verden. Det er noen abstraksjon at C Språket har tatt, for å gjøre vår liv lettere. Så på slutten av dagen, kan jeg skrive mange forskjellige ting her, og det ikke gjøre en forskjell. Fordi det bare finnes i C-verden. Det eksisterer ikke i enere og nuller verden. Og vår programmets gjennomføring i de ettall og nuller verden. Så ditt indre klart ikke blåst ennå. Men jeg tror det er kult. Ja, Jeff. PUBLIKUM: Så, hvis stedet for gjør int, gjør du røye. Og du var - SPEAKER: La oss gjøre det i et sekund. PUBLIKUM: Fordi da får du en usignert kommer fra negative 128 til 127 eller 0 til 255.. SPEAKER: Så røye er problematisk. Er det noen som vet hvorfor røye ville være problematisk, og det ville faktisk endre ting i de og nuller verden? PUBLIKUM: På grunn av størrelsen på røye. SPEAKER: Størrelse på røye er en. Så usignert er også fire byte. Så røye ville skru ting opp. Men hva er 4 byte som er relatert til en char? Eller i det som legger en ekstra - du kan sette en mer karakter etter røye. PUBLIKUM: Char stjerne. SPEAKER: Char stjernen har fire byte. Så la oss gjøre noe det er en char stjerne. Så dette ville sannsynligvis fungere, men vi er kommer til å gjøre noe selv galere enn dette. Etter min mening, galere. Jeg har nå skrevet en funksjon som returnerer en peker, og det tar en pekeren og en usignert verdi - vi vil endre dette tilbake til int så vi er ikke foretar for mange endringer på en gang. Og det har en rekke kalles en, indekser i matrisen, og returnerer adresse. Vi har sett disse aktørene før. Dette, hva tror du dette kommer å gjøre, i retur, når jeg kjører det? Hva tror du det kommer til å gjøre? Eventuelle gjetninger? PUBLIKUM: segfault. SPEAKER: Hva? Segfault? Det er en god gjetning. Tom sier det samme. Eventuelle andre gjetninger? Hvem tror det kommer til å gjøre det samme? Hvem tror det kommer til å segfault? Det gjør det samme. Unnskyld. Men, selvfølgelig, satt vi i en og to. Og de er begge gyldige, ikke sant? La oss se, kan vi gå til andre sted i en matrise. Men hva om vi gjorde b et negativt tall? Det er trolig en bedre gjetning for noe segfaulting. Det fungerer fortsatt. OK, dette er nå gal. Dette er av like gyldig sum-funksjonen. Dette gjør de samme ting som avkastning a og b. Kan noen forklare hvorfor dette er en god SUMMER-funksjonen, eller hvorfor dette fungerer? Hva som skjer her? Hvorfor dette gjøre nøyaktig det samme ting som vår gamle sum funksjon? [? Akshar,?] hva er det som skjer? PUBLIKUM: Fordi når du har en en som er en adresse til plasseringen minne - og når du gjør tegnet, det går til at minneadresse. Og når du går til b, er du på en måte bevegelige skritt fra at minneadresse, du returnerer det. Så du er faktisk, faktisk, legge en og b [uhørbart]. Hvor er standard operasjoner på at retur? Som, hvor får parentes falle? Er avkastningen av adressen på en før eller etter [uhørbart]? SPEAKER: Det kommer til å indeksere inn b - eller indeks inn i en - og deretter returnere adresse. OK, så gjorde alle forstår hva [? Akshar?] sa, og forklart hvorfor dette fungerer? Jeg gjorde ikke det første gang noen forklarte dette til meg. Ville noen liker et bilde å forklare dette? Vi kommer til å tegne et bilde, med ingen markører, det er flott. Fant noen. Så vi har en matrise som er en serie bokser. Den første er en indeks 0, indeks 1, 2, 3, 4, prikk, prikk, prikk. En typisk utvalg. Og i tillegg til å ha indeksene de har alle minneadresser. Så la oss gi denne minneadresse 13, 14, 15, 16, 17, et cetera. Alle er her så langt. Så en er en adresse. Navnet på en matrise, en peker lagres der. Det er en peker, det er en minneplassering, til starten av tabellen. Så hvis dette var matrisen, en ville være en verdi på 13. Og, selvfølgelig, kan vi gi en hvilken som helst verdi vi ønsker. Char stjerne en, kan vi gi en hvilken som helst minneadresse vi ønsker. Vi kan gi den 0, kan vi gi den negativ 1 - negativ en ikke eksisterer, så det er nok problematisk, men du så at det fortsatt arbeidet. Så vi kan gi et hvilket som helst tall vi ønsker, noen minneadresse vi ønsker. Deretter, int b sier, OK, gå dette nummeret av går inn i matrisen. Så hvis b er lik 2, og a er lik 13, vi er på minneadresse 13. Og vi går to skritt i, og så er vi her. Og tegnet betyr retur adressen til dette stedet. Og adressen er, selvfølgelig, 15. Så får vi 13 pluss to, eller en pluss b, som er 15. Spørsmålet er, men - Jeg beklager. Betyr det avklare ting for hvorfor dette fungerer? PUBLIKUM: Hvorfor skulle det fungere å gå - slik at du kan ha en matrise og gå til en negativ indeks? SPEAKER: Høyre. Så vi gjorde negative tall, slik det er - virker dette fornuftig skjønt, første, [? Avi,?] for deg? PUBLIKUM: Ja, jeg er bare [Uhørbart], men - SPEAKER: Ja, dette vil returnere 15. Hvis en var 13, og b var to, Dette vil returnere 15. PUBLIKUM: Så null indeksering ikke bli et problem, ikke sant? Fordi du flytter fra 0. SPEAKER: Høyre. Så du flytter - så hvis b var 0, du ville ikke flytte hvor som helst. Og du hadde nettopp returnert adressen - hvis b var 0, er det i hovedsak retur at adressen til en. Passerer i røye stjerne en og returnere adressen til en er bare returnere en, essensielt. OK, er spørsmålet hvorfor negative tall fungerer? Og det er det virkelig kule ting om dette, fordi dette bør segfault. Og det ville segfault hvis vi gjorde noe sånt som dette. La oss si, int. Så denne koden ser identiske og bør oppføre seg likt. I hovedsak, er x en søppel variabel, og så dette bør oppføre seg likt. La oss gjøre dette - oops - i stjerne. OK, vi er allerede å få feil her, fordi det allerede kommer til å bli sint på meg, fordi det allerede vet hva som kommer. Særlig den andre. Adressen stablet minne forbundet med en lokal variabel. Hovedsak, jeg kommer ikke til å kompilere dette, og da jeg kommer til å angre gjøre hva vi nettopp gjorde. Men fordi vi er faktisk aldri tilgang til hva som står på minnet plassering, det er ikke til å segfault. Vi kommer aldri til å faktisk se på hva som er i den andre boksen, eller hva som er i en hvilken som helst boks i denne tabellen. Vi bare si, her er adressen av ting vi leter etter og returnere denne adressen. Vi kommer aldri til å faktisk gå inn i utvalg for å se på den plasseringen. Og fordi vi aldri røre minnet, vi ikke komme i trøbbel. Vi får ikke en segfault. Hvis vi prøvde å, igjen, trykker du på at minnet, berører hva som sto på a eller b - eller en brakett b, og antar et var 0 og - hvis en var 0, selv, det ville være ganske dårlig, fordi vi ikke kan gå ned hele veien der. Hvis A og B ble både 0, og vi prøvde å berøre det som var der, så vi ville komme i trøbbel. Men hvis vi ikke berører hva som er der, vi bare returnere adresse, er det faktisk ikke kommer til å segfault fordi det kan du utføre disse operasjonene. Det blir bare sint på deg, og blir super sint, når du prøver og røre den faktiske minne og tilbake hva som er på at minnestedet. Betyr det fornuftig? Det er bare en gal del av C. Så, Vi har bare ett av disse. Som mener dette er kult? Flere mennesker. Det er bra. OK, dette er vår siste. Og jeg vil gjerne at du skal fortelle meg om vidt du tror dette kommer å gjøre de samme ting. Jeg har disse skrevet ned et sted. Jeg er ikke memorere dem. La oss se, 8, b 4, 4, 2, 4, 0, 8, 0, 3, 4, 4, 2, 4, 0, 4. Så dette er en matrise, nå, ikke en funksjon. Og det er en rekke fordi vi har firkantet braketter, ikke klammeparentes. Og det er en rekke av hvilken type? Hvem som helst, hmm? PUBLIKUM: Deres heksadesimale tall? SPEAKER: Men hva er C-type? De har alle heksadesimale tall. Hva er C-type? Den forteller deg. PUBLIKUM: Det er usignerte tegn. SPEAKER: Høyre, usignerte tegn. Og to heksadesimale tall er én byte. Slik at disse er 1, 2, 3, 4, 5, 6, 7, 8, 9 bytes. Det er en rekke 9 bytes. OK, har du sannsynligvis allerede vet svaret på dette spørsmålet. Men, hva tror du vil skje når jeg kjører dette? Jeg sier, igjen, i mysum.c, Jeg venter en funksjon som tar to heltall. Og jeg istedenfor å si at summen er en rekke tegn. Hva kommer til å skje når Jeg kjører. / Mysum og gjøre? Vel, først, de fleste av dere vil sannsynligvis enige om at make - å nei, bare tuller. Hva har jeg gjort galt? Uh oh. Det burde være klammeparentes. Det er hvordan du initialisere en matrise. My bad. Så vi allerede har sett før at typer er en C-nivå abstraksjon, ikke en datamaskin nivå abstraksjon. Så de fleste av dere sikkert forventet at det skulle foreta, eller forutsatt at det ville gjøre. Men hva når jeg kjører. / Mysum? Hva kommer til å skje? Eventuelle gjetninger? PUBLIKUM: Det kommer til å skrive ut et ord. SPEAKER: Det kommer til å skrive ut et ord. Hvilket ord? PUBLIKUM: [uhørbart]. SPEAKER: Eventuelle andre gjetninger? OK, skrive ut en setning. Du kan ha en hvilken som helst setning. Det vil være din side. Noen som har en annen gjetning? Anna, hva er din gjetning? PUBLIKUM: Det vil skrive ut - to bokstaver eller [uhørbart] én bokstav. SPEAKER: Ett brev. PUBLIKUM: Kan jeg telle hvor mange [uhørbart]? SPEAKER: Nine. Vel, jeg kommer til å kjøre den. Det gjør de samme ting. Den legger to tallene sammen. Vel, la oss passere de to argumentene. Det tar ikke argumenter. Så jeg vet ikke hvor det kunne muligens få disse argumentene. Men la oss passere på 100 og 0. Og det legger 100 og 0. Det er vanvittig. Jeg tror det. Negativ 4, som fungerer også. Du kan gjøre hva du vil. Dette er en like gyldig sum-funksjonen. Dette er en sum-funksjonen. Men, nei, du sier det er en rekke bytes. Så hva er det som skjer her? Så, igjen, la oss gå tilbake til denne ideen som vi sa i begynnelsen. Du går fra C-kode, til montering språk, til enere og nuller. Dette er heksadesimale. Men dette er egentlig bare en Mange av enere og nuller. Dette er 72 enere og nuller, ikke sant? 72 enere og nuller. 9 bytes. Hver byte har 8 biter. Hver bit er et ett-eller en null. Så 72 de eller nuller. Jeg har nettopp skrevet dem slik - snarere enn å skrive det ut som et mye enere og nuller. Men dette vil gå fra C-nivå språk, til montering språk, for å kode. Og dette vil skrive ut i kode, Somewhere, disse 72 enere og nuller at jeg har skrevet her. Så sted i det - la oss gå her - eller annet sted i mysum, vil programmet, der er disse 72 enere og nuller som jeg har skrevet og fortalt at det å skrive. Nå, noen gjetninger for hva de 72 enere og nuller bety? PUBLIKUM: Sannsynligvis den samme ting som går tilbake et pluss b. SPEAKER: Sannsynligvis den samme ting som går tilbake et pluss b. La oss bekrefte det. La oss finne ut hvordan jeg gjorde dette. Så hvis du går tilbake hit, jeg sier dere: å kjøre denne kommandoen, objdump-S sumfunction.o. La oss gå kjøre den. objdump - obj, dump. I utgangspunktet kan det gi meg hva jeg ønsker å se. Det kan gi meg assembly. Det kan gi meg ettall og nuller. Den har massevis av flagg. Dette er den vi kommer til bruk for nå. Dot - som du ser i lysbildene - dash kapital S sier, flette, kildekode - denne linjen er fra C - med forsamlingen kode og med enere og nuller. Og vi kommer til å kjøre det på sumfunction.o. Fordi det vil være lettere å se. Igjen - hmm? PUBLIKUM: Du stavet det feil. SPEAKER: Men jeg faktisk kommer å fjerne det et sekund. Jeg først kommer til å åpne bare sumfuntion.o. PUBLIKUM: Du stavet det feil for første gang. SPEAKER: Classic. Sum - det er et vanskelig ord, skjønt. Du vil bli overrasket. OK, så dette er sumfunction.o. Jeg kunne ikke engang fortelle deg. Det er mye av nuller, tydelig mye av nuller, og det er noen andre ting som ikke nuller. Men det meste nuller. Ser ut som det er noen seg. Så klart, dette er vanskelig å lese. Det er den binære språket. La oss nå åpne den - hva? Hva gjør jeg galt? Hadde jeg stave det riktig? OK, dette er vanskelig. Jeg trenger ett sekund å regne ut hva jeg gjør galt. Det er en feil. Det er rart. Åh, det er grunnen. Jeg kommer til å gå tilbake til vår opprinnelige en, slik at vi kan se på objektkode på dette. Fordi det ikke er virkelig kommer til å være noe når vi bare sette enere og nuller i. Det vi går. OK, så alle kan se dette. Denne funksjonen, som jeg sa, slukke c linjer - kildekodelinjer - med noen monteringsanvisning. Her er vår kildekoden linje. Her er en, her er en annen. Her er monteringsanvisning. Det er hva de ser ut. Monteringsanvisning - du kan lære mer av disse hvis du tar andre serie klasser, men de er generelt en instruksjon. Og deretter en kilde og en destinasjon. Og så over her er binærkode som tilsvarer at forsamlingen instruksjon. Så som du kan se, denne summen funksjon, ved slutten av dagen, er tre monteringsanvisning. Bare tre. En mov - denne m-o-v står for en Move. Legg stands for ADD. Og r-e-t står for Return. Så en mov, en add, en retur. Og disse, over her, er de nuller og de som svarer til den koden. Så de nuller og enere, hvis du vet de, kan du bare sette de rett i. Og så vil det gjøre det samme ting. Fordi, ved slutten av dagen, alt du utfører er en lang rekke nuller og enere. Og det er hva koden egentlig er. Og grunnen - la oss se på en ting. Hadde jeg Makefile åpen? Så hvis vi gikk tilbake til å skrible null, null opp her - sorry, kapital o, kapital o null, ikke null, null. Og vi gjorde, ville det fortsatt fungerer på samme. Men nå merker du at det er en mange flere monteringsanvisning. Det er fordi, igjen, spurte jeg kompilatoren ikke å gjøre noe optimalisering. Så jeg kan fortsatt ta alle disse nuller og enere, og kaste dem i, og som ville fungere. Jeg bare gjorde de optimaliseringer, fordi det er litt enklere, da, å skrive denne matrisen. Men dette ville fungere like bra. OK, vi kommer til å gjøre en siste ting, fordi jeg tror er den kuleste delen. Selv om alle er helt klart allerede blåst og målløs. Våre sinn er blåst. [Uhørbart] Derfor er disse fra en annen CS klasse, som er super interessant, at jeg har tatt - CS61. Jeg sterkt oppfordre deg til å ta det. Men den kjølige delen om dette faktum, at ting er bare nuller og enere, er at alt er nuller og enere. Så du kan ta en fil som har riktige nuller og de du vil et sted i det, og bruke den delen av nuller og enere som en sum funksjon. Hva mener jeg med det? Jeg mener du kan ta en bildefil som har den korrekte serie av nuller og enere, som skriver ut noe ut i et bilde. Og ett program kan tolke er en bilde, men du kan tolke det, hvis du vil, som en sum funksjon. Så hvis vi ønsket å åpne, for eksempel dette bildet. La oss gå, Hello Kitty. Fantastiske lille bildet. Her inne er det at strengen av nuller og enere. De 72 nuller og enere eksistere i dette bildet. Så hva kan jeg gjøre, da, er å skrive - Jeg må huske hvor de er. Jeg finner det i et sekund. Men vi gjør - la meg finne ut hvor de er. En sek. La oss gjøre - PUBLIKUM: [uhørbart]. SPEAKER: Thanks. Så hvis vi utfører dette programmet, som i stedet leser i en fil, så det går denne indeksen i filen. Og så, igjen, akkurat som mysum, tar to tall. Vi kan legge sammen tall akkurat det samme som vi gjorde før, som går til vise deg hvordan det faktum at, på slutten av dagen, alle disse tingene er nuller og enere. Og det er bare hvordan du velger å tolke dem. Og hvis du faktisk ser på dette bildet - la oss zoome inn litt. Alle kan se det? Du vil legge merke til her, er det noen rare smudge. La oss gå - dette er det opprinnelige bildet. Du vil legge merke til her er det ingen flekk. Det er koden for summen funksjon er det lille flekk akkurat der. Og faktisk, igjen, hvis du vil vite mer om dette, vil du innse at dette Hello Kitty, som selv har en større smudge, har kode som kan ta over en datamaskin hvis det ikke er beskyttet hensiktsmessig. Så du kan faktisk kjøre dette. Jeg kommer ikke til å kjøre den akkurat nå. Men du kan kjøre dette Hallo Kitty image, og det kan ta over datamaskinen din. Så det er alt for demo. Er det noen som har noen spørsmål, kommentarer, bekymringer? Jeg tror dette ting er fascinerende. Det inspirerte meg til å lære mer. Jeg anbefaler, hvis du er interessert i det hele tatt på CS, snakk til meg. Selv om jeg er en Samfunnsfag Konsentrator, jeg er en CS, sekundær, så Jeg vet fortsatt litt. Men jeg absolutt vet hva klasser du bør ta. Jeg tror det er alt virkelig interessant, og jeg oppfordrer deg, absolutt, til lære mer hvis du er interessert. OK, jeg har en siste ting. Unnskyld. Eventuelle spørsmål? Jeg fikk ikke pause for å vente hvis noen hadde noen spørsmål om det. Er noen kommer til å være en CS konsentrator? Eller tenker om det? En, to, tre, fire. One - eneste. Annas er den eneste hånden som er hevet autoritativt. OK, det er kult. Assam, hva skal du gjøre? PUBLIKUM: [uhørbart]. SPEAKER: Constantine? PUBLIKUM: fysikk. SPEAKER: Jøss, det var raskt. Du hadde en dårlig opplevelse i CS50? [Uhørbart], hva skal du gjøre? PUBLIKUM: Jeg har ingen anelse. SPEAKER: Curt? PUBLIKUM: Econ eller CS. SPEAKER: Econ eller CS. Tom? PUBLIKUM: Jeg gjør Stat. SPEAKER: Stat? OK. Hva er du? PUBLIKUM: Me? SPEAKER: Yeah. PUBLIKUM: Stat. SPEAKER: Stat. Oh, der du går. Tom, snakke til Alden. Emily, hva er du? PUBLIKUM: Biomedical - SPEAKER: Er du i denne delen? PUBLIKUM: Nei. SPEAKER: OK, det er Emily. Hun er min venn. Åpenbart ikke så bra for en venn, fordi hun gir meg en hard tid. Du kan være bedre for meg foran av alle, min student - PUBLIKUM: Jeg gjør din Q guide. SPEAKER: Really? Uh oh. OK, du er fantastisk. Jeg elsker deg så mye. Oh boy. Uansett, jeg, i går kveld, som alt - Jeg er sikker på at alle synes virkelig stresset akkurat nå. Jeg vet ikke, er førsteårsstudent - er dere føler seg stresset? Jeg føler meg stresset. Det var som, du går hjem for Thanksgiving. Du er som, jeg kommer til å gjøre alle disse tingene. PUBLIKUM: Det er så annerledes. SPEAKER: Ja, og du kommer tilbake. Jeff, trenger du ikke føle det sånn? PUBLIKUM: Jeg tenkte bare Jeg ville gjøre en liten bit. SPEAKER: OK, flott. Så jeg kommer tilbake, og jeg har ikke gjort noe. Og det er alt super stressende. Og jeg er bekymret, oppriktig bekymret, om hvorvidt jeg er kommer til å fullføre alt jeg må. Men i går kveld, ble jeg ikke stresset, Jeg var bare litt trist. Så jeg skrev i dagboken min om hva jeg var trist om. Og jeg var trist om denne delen i denne klassen kommer til en slutt. Så jeg skulle bare lese for dere en liten bit av min journal, fra i går kveld. Kan jeg få noen servietter, noen vev fra Tom? Nei, jeg kommer til å gråte. Jeg gråter ikke. Ikke at du ikke kan gråte, Jeg har bare ikke gråte. Jeg vet ikke engang om min tåre kjertler jobbet - tårekanalene. I roper ikke på lenge. PUBLIKUM: [uhørbart]. SPEAKER: OK, takk. OK, det er litt forord - det er noen andre deler av dagboken min oppføring, fordi jeg prøver å journal hver natt før jeg kom til sengs. Jeg anbefaler journalføring. Det hjelper deg å behandle ting, og også være svært takknemlig for dagen. Og det gjør det mye lettere å se tilbake på dagen din og innse at det var mye bra ting som skjedde. Selv om du føler deg veldig stresset om natten eller veldig opprørt, eller virkelig trist eller lei. Åh, herregud. Jeg vet ikke engang om det er skrevet at vel fordi jeg ikke korrekturlese den. Men vi vil lese den. Jeg pleier ikke lese min journal, selvsagt. "I morgen skal jeg lære min endelige CS50 delen av året. Det er sprøtt hvor fort tiden flyr. Likevel, jeg er truffet av hvor annerledes min erfaring i å undervise i år var enn da jeg var en sophomore. For det første, jeg definitivt kjenner materialet bedre. Men ikke fortell min første kullet av elevene som. Enda viktigere, men innså jeg at den gleden som kommer fra stående opp foran et rom av det som starter som fremmede, men ender opp som, på minst, Facebook-venner, er ikke en første-års lykketreff. Snarere er det å vite at, i noen små måte, bidrar du med talentfull, omtenksom, herlig, og lidenskapelige mennesker lære litt mer om informatikk. Du er skiftende at lyspære bare en bit i kontakten sin, slik at det er i stand å skinne sterkere enn deg, eller de, kunne ha forestilt seg ved semesterstart. Du hjelper snu de frowns opp ned og stille spørsmål som gi støtte, men likevel tillate elevene til å stå opp på egenhånd. Det er absolutt ikke en overdrivelse å si at denne delen er min favoritt del av uken. Eller enda at jeg nøler med å si, er at alt, på 5:30 hver uke, vel vitende at det vil være altfor lang til vi møtes igjen. Likevel, jeg er utrolig takknemlig for å alle som har gitt meg denne mulighet for å gi tilbake til andre. Til David, for hans tålmodighet og tillit. Til filmen og produksjons mannskap, for gjør meg ser noe respektabelt. Og, viktigst av alt, til mine studenter, uten hvem jeg har ingen grunn til å tilbringe 10 timer på å finne ut det beste måte å trekke pekere, eller legge ut en tabell av delfiner, via Javascript. Som alltid har det vært en velsignelse. " Så med det, takk folkens. Jeg ser dere alle på CS50 rettferdig, og den hackathon, hvis du er der. Og hvis du har spørsmål, vil jeg holde rundt til det ikke er mer. Men jeg takker dere for et fantastisk år. [APPLAUSE] SPEAKER: Jeg kan gråte.