Speak: OK, entón, non vai crer, pero a semana pasada, o luns, en Pierce, eu estaba no soto. Nunca ir Pierce. E eu nunca vou volver de novo, xa que Deixei miñas cousas soa, como, cinco minutos e alguén roubou o meu ordenador e meu teléfono da miña mochila. O que significa que eu teño que volver, e logo menos dunha semana despois el foi roubado de novo. E entón el ficou ligado - Find My iPhone segue ser inútiles. Entón eu seguir fomentar non usalo. Descubriuse se nunha vez, e foi o MIT, uns 15 minutos despois, ea persoa chamado este número de teléfono, que mostrou no meu rexistro de chamadas AT & T. Entón eu fun en liña, chamada de que o teléfono número, e foi directo para este atendedor de chamadas en español. E eu non ter oído falar del desde entón. Así que tiven que comezar un novo ordenador e teléfono. Sei. É. Pero se vostedes queren lascas na miña fondo de ordenador, despois diso, é por iso que Pedinlle aquí. Brincadeirinha. Pero iso foi moi triste e traumático. Pero é todo para atrás agora, e foi por iso o set-p 8 tardou tanto tempo, porque Eu non tiña un ordenador. E alguén roubou. E eu por correo electrónico, pregunta se eles sería o seu grao-p set 8. Pero eles dixeron que non. E eu era como, eu podo ter meu ordenador de volta? E son como, non. Brincadeirinha. Aceptar. Esta é a nosa sección final, e eu teño un par de - nós só temos tres cousas na axenda. Imos falar un pouco sobre a guía Q. Entón, nós imos gastar 15 minutos nunha demostración legal. Entón imos todos dicir despedir un ao outro. Realmente non precisa dos seus ordenadores ou unha pluma ou un papel para tomar notas, ou seguir. Entón eu supoño que, se ten o seu ordenador , Entón está en Facebook. Só ten que dicir. A menos que está cubrindo o Guía de Q, o cal é en primeiro lugar. A guía Q está aberta. Xa tivo un correo electrónico sobre iso. Xa que todas as cousas Q é sometida ao fin de ano, eu recibín todos os Comentarios Q nos correas de todos que escolle para me dar feedback. E así, cando vai no Q - Non sei se pode facer iso, Jeff, porque é estudante e extensión. Pero cando vai no Q, se non ten feito isto antes, escolle o seu profesor, que é David Malan. Ten que facer el. E entón pode escoller TFS. E pode escoller como moitos TFS como quere. Pero hai 60 de nós. Non ten que incorporarse todo o mundo. Pode escoller só me, ou só seleccionar un algunhas outras persoas, se queres, para darlles feedback tamén. E entón obter puntuación en todos estes diferentes eixes, e entón pode saír lles feedback. E entón, como un mes despois, Vou coller todo o que producto. E, así como o producto que estivo dándome ao longo do semestre, eu ler todo isto. E é realmente útil, e axuda me crecer como profesor e como un individuo. Entón, por favor, tome un tempo para facelo. Nós só imos estar aquí para, así, 30 minutos. Entón, se o desexa, ao final deste, para levar cinco minutos, e só tes que cubrir a Q, por que non hai que máis tempo do que iso. Iso sería marabilloso, e tamén obter as súas notas para tras máis rapidamente se encher o Q. Así, a maioría de vostedes teñen feito isto antes - ou non, aproximadamente a metade do que ter feito isto antes. Pero se vostede é un calouro, iso é o que é. Será o mesmo para todas as clases. Fai-o. Leva cinco minutos. Pero tamén, se o fas algo en serio, esta non é a peor cousa no mundo, porque eu certamente tomar en serio. Entón, se me deixar un rostro sorridente, Eu aprecio iso. Pero eu tamén quere recibir se deixoume máis que un rostro sorrinte. Pero cómpre a vostede. Eu non te podo dicir - ou como unha gran emoticono cara, cun capital D. Isto sería ser aínda mellor. OK, iso é todo que eu teño para o P. Se ten algunha dúbida, pode pedir me, pero bastante auto-explicativo. Así, por favor, enche-o. Eu realmente aprecio iso, e iso significa moito para min. OK, iso é o que nós imos pasar 15 minutos pasando. Vou amosar-lle un código. Eu creo que iso é moi legal, e que me deixou máis excitado en ciencia da computación. Entón eu espero que vai facer o mesmo para todos vostedes. Imos abrir - e todo iso código vou mandar para ti máis tarde. Pero nós só estamos indo para abrir - Estou no meu terminal - imos abrir este programa chamado [? MySum. ?] Calquera pode ler isto, ou debo facelo máis grande? Alguén me pode dicir o que este código vai facer cando executa-lo, ou o que esta programa fará cando executa-lo? [? Avi,?] ¿Que pensas que vai facer? Completar mastigación. Non debe falar con boca aberta. Audiencia: Será que tomar unha gran cantidade de argumentos, atopar suma deles retornando suma, a continuación, imprimir lo? Ou ten en dous argumentos, e logo fai [inaudível]. E entón ela mostra o que quere os resultados son. Speak: Close, moi preto. Alguén quere engadir [? Rar o que?] Dixo? Debe dar a este programa calquera argumentos de liña de comandos? Audiencia: Non COLUMNA: Non Qué acontece se non dala calquera argumentos de liña de comandos? Eu só escribo dot MySum barra. Audiencia: 1 máis 2 é igual a 3. Speak: 1 máis 2 é igual a 3. E vai imprimir iso. Isto é exactamente correcto. Vai ver que impresión f liña na parte inferior. Vai imprimir a, b, e logo a suma de a e b. E eu creo que asume que suma funciona correctamente. Boa suposición. OK, eo que acontece se eu darlle o argumento? [? Manu? ?] Audiencia: Vai engadir o que o primeiro argumento é o de b. Ou a 2, desculpe. COLUMNA: Correcto, a 2. Alguén sabe o que strtol fai? É basicamente atoi. Atoi é en realidade unha versión de fantasía de - ou unha versión máis simple do strtol. Pero realmente usa strtol. E descubrín iso porque eu quería algo así como atoi, e entón cando eu se atoi, lin aquí. E eu atope "este comportamento é o mesmo que "strtol. Entón, é basicamente para atoi todos os efectos. E ve que eu mesmo usar nulo e 10. Isto realmente permite que leve unha corda, e transformalo en un número, e escoller que base quere facelo dentro Polo tanto, esta é a base 10 aquí. Eu podería ter feito base de dous para decimal, base 16 para hexadecimal. É moi legal. Pero short longo da historia, isto leva dous números e engade-los xuntos. Entón, imos executalo. E tamén vai notar, hai algunhas cousas - entón eu teño un makefile ben aquí, e Se abrir-se que, algunhas cousas notará son diferentes. En particular, este argumento aquí, probablemente non vin iso antes. Xeralmente, nós compilar as cousas con guión cero, cero. Trazo cero, cero, significa non facer calquera optimizacións, compilador. Non tente facer nada extravagante, ou facer algo funcionar máis axiña, ou obter librar de variables que son necesarias. Non optimizar este código en todo, Estou pedindo de terceiro nivel optimización. Entón eu estou pedindo compilador para facer unha morea de optimizacións. Pode cambiar isto no makefile cando tes ese código, se quere ver cousas diferentes. Que imos amosar nun segundo. Entón, corremos o meu suma 1 máis 2 máis 3. Alguén me dea dous argumentos. Audiencias: 4 e 5. Speak: 4 e 5. Grazas. Grande, funciona. Cales son algúns outros bos argumentos para tratar, para asegurarse de que isto funciona? Calquera? Audiencia: 0. COLUMNA: 0 e? Audiencia: Negativo 3. Speak: Funciona. Pero aqueles eran boas opcións. OK, entón imos voltar aquí. Este é mysum.c. Vai notar que hai tamén algo chamado sumfunction.c. E iso, di, oh, hai algo definido en sumfunction.c. Eu non incluír este ficheiro aquí porque eu non teño. Pero eu vincula-lo en cando compilo, que notou. Imos ir cara arriba. Vimos cando compilado MySum, certo alí, nós conectado no binario de sumfunction.o. E eu non teño o ficheiro de cabeceira porque, claro, hai o declaración da función. Entón pechada inclúen normalmente só pon nunha declaración de función. Aquí eu só colocar-lo en liña recta no código. E así que eu teño que facer é o elo no binario, o que fago. Algún palpite para o que é en sumfunction.c? O código que escribín en sumfunction.c? Audiencia: [inaudível]. Speak: Algún palpite? Si? Audiencia: penso, define algúns [inaudível]. Speaker: Si Entón fago gravación int suma int a. Escribo esta liña, e entón eu teño aberto bosquexo, pechou bosquexo. ¿Que pensas que eu escriba dentro aqueles chaves, dentro desa función? Si? Audiencia: Return é igual a un. Procesador: Isto é realmente un bo palpite. Quen pensa que [? Manu?] Está seguro? Di voltar a máis b. OK, non todos. [? Akshar,?] vostede tamén? Está seguro? Aceptar. O que? Audiencia: Inseriu mal. COLUMNA: Non, eu non fixen. Si, só a xogar. Está certo. Iso é o que di. É volver máis b. Isto fai moito sentido. OK, imos voltar aquí. Vemos como o cabezallo - ese é o tipo de retorno. Lembre, vimos que un día, o tipo de retorno da función, pero vai antes do nome da función int. Aquí, eu teño escrito int. ¿Que pensas que vai ocorrer se neste función, eu non escribir int, pero Eu escribo sen sinal? A diferenza, por suposto, que ser non asinado representa só positivo números enteiros, e pode ser int positivo ou negativo. Entón eu mudei o retorno tipo desta función. Este código non se corresponde este tipo de retorno aquí. ¿Que pensas que vai ocorrer cando compilar? Debe berrar comigo. Sen berros. E cando eu executo o programa? Imos facer antes 0 Negative 3 ou negativo 1. El aínda funciona, aínda que eu digo está retornando un enteiro sen sinal. Claro que non está retornando un enteiro sen sinal. Está volvendo un enteiro asinado. Está volvendo negativo 1. OK, iso é raro. Que tal se eu entrar aquí e facelo? Entón eu mudei todo de int para unsigned. El só pode ter enteiros sen signo. Pero aínda creo que vai funcionar? Audiencia: si. Speak: Vai. Iso é loucura. E nós pasamos nunha asignado claramente enteiro, podemos pasar dous asinaron enteiro, el aínda funciona. OK, algunha idea de por que inda funciona, ou o que está a suceder? Si, Jeff. Audiencia: Ten algo que ver coa súa optimización que destaque. COLUMNA: Non Poderiamos cambiar a optimización, el continuaría traballando. Podo facelo por vostede, pero - Audiencia: Vou levar a súa palabra para ela. COLUMNA: Yeah. Se abrir o ficheiro de make ben aquí, Mudei a optimización. Así pode facer trazo cero, cero. El aínda vai funcionar. Outros pensamentos? Vós todos deben traballar, de xeito por que espera que funcione? Non? Silencio. Aceptar. Teño que esperar sete segundos porque eu fixen unha pregunta. Entón, a cousa legal sobre C, e ten probablemente probado antes - ten Pode non ter, isto pode a primeira vez. Pero, como todos saben, cando eu escriba algo en C, que non salva como esta no ordenador. É gardados como uns e ceros. Vai de código C para código de montaxe. Alguén viu código de montaxe antes, código de montaxe da máquina? Nós imos ollar para nun segundo. Vai de código C para código de montaxe. E vostedes saben as etapas de compilación. Vostede tiña que memorizar que, para un cuestionario, e logo, gravala-lo en proba cero. A maioría da xente entendeu mal. Eu creo que vostedes acertou en cheo. Pero vostedes son a mellor parte para probas, por certo. Que é incrible. El non vai te machucar. Non te preocupes. Pero é moi legal. Bo traballo. Entón, vai para a linguaxe assembly, e logo vai para uns e ceros. E os uns e ceros gárdanse na ordenador, e iso é o que salva en o a.out, ou neste caso, o ficheiro executable. E o ordenador executa uns e ceros. Non? Aprendemos iso antes. Entón, a cousa legal é que esta sen sinal idea, a idea de tipos de Ints non asinado, et cetera, et cetera, que é aquí en linguaxe C. Aqueles existir. Pero os tipos non existen no os uns e ceros. Tipos nin sequera existe de verdade en o nivel de linguaxe de montaxe. Entón, iso é algo que existe en C mundo, pero non existe no ordenador mundo ou o mundo do procesador. Iso é unha abstracción que o C lingua incluíu, para facer a nosa vida máis fácil. Así, ao final do día, que pode escribir moitas cousas diferentes aquí, e non fai a diferenza. Por que só hai no mundo da C. Non existe na uns e ceros mundo. E o noso programa de execución en os uns e ceros mundo. Entón, a súa mente claramente non explotado aínda. Pero eu creo que iso é legal. Si, Jeff. Audiencia: Entón, se en vez de facendo int, fai carbón. E era - Speak: Imos facelo en un segundo. Audiencia: Por entón comeza unha non asinado que vai de 128 a negativa 127 ou 0 a 255. COLUMNA: Entón char é problemático. Alguén sabe por que sería de char problemático, e que sería, en realidade, cambiar as cousas nos máis e zera mundo? Audiencia: Debido ao tamaño do carácter. Speak: Tamaño do char é 1. Entón non asinado tamén é 4 bytes. Entón carácter ía romper as cousas. Pero o que é de 4 bytes que é relacionada cun char? Ou en que engade un adicional - pode pór un personaxe tras char. Audiencia: Char estrela. Speak: Char estrela ten 4 bytes. Entón, imos facer algo que é unha estrela de char. Entón iso probablemente funcionaría, pero estamos vai facer algo, mesmo máis tolo do que iso. Na miña opinión, máis tolo. Eu xa escribín unha función que retorna un punteiro, e hai que punteiro e un valor sen sinal - imos cambiar esta de volta a int entón non sabemos facer moitos cambios á vez. E ten unha matriz chamada, un índice para a matriz e retorna o enderezo. Vimos eses operadores antes. Este, o que pensas que isto vai o momento, en cambio, cando executa-lo? ¿Que pensas que vai facer? Algún palpite? Audiencia: Segfault. COLUMNA: O que? Segfault? Iso é un bo palpite. Tom di o mesmo. Calquera outro palpite? Quen pensa que vai facer o mesmo? Quen pensa que vai segfault? Fai o mesmo. Sentímolo. Pero, por suposto, poñemos en 1 e 2. E estes son os dous válidos, non? A ver, podemos ir ao o segundo lugar dunha matriz. Pero o que se fixo b un número negativo? Isto é probablemente un palpite mellor por algo segmento estándar. El aínda funciona. OK, iso agora é loucura. Esta é a función de suma igualmente válidos. Isto fai exactamente o mesmo como retorno a e b. Alguén pode explicar por que isto é unha boa Resumindo función, ou por que isto funciona? O que está pasando aquí? Por que iso fai exactamente o mesmo cousa como a nosa función suma de idade? [? Akshar,?] o que está pasando? Audiencia: Porque cando tes un un que é un enderezo para a memoria local - e cando fai o comercial, é vai a este enderezo de memoria. E cando vai para b, vostede é do tipo pasos que o enderezo de memoria en movemento, está retornando iso. Entón é realmente, de feito, a adición dun eb [inaudível]. Onde están as operacións estándar en que o retorno? Como, onde os parénteses caer? É o regreso do enderezo en un antes ou despois [inaudível]? Speak: Vai índice en b - ou índice nun - e, a continuación, volver o enderezo. OK, entón se todo o mundo entender o que [? Akshar?] dixo, e explicou por que isto funciona? Non, a primeira vez que alguén explicou que para min. Será que alguén lle gusta unha foto para explicar isto? Imos tirar unha foto, con sen etiquetas, iso é gran. Atopou algún. Polo tanto, temos unha matriz que se unha serie de caixas. O primeiro é un índice 0, o índice de 1, 2, 3, 4, punto, punto, punto. Unha matriz típica. E ademais de índices, todos eles teñen enderezos de memoria. Entón, imos dar a esta dirección de memoria 13, 14, 15, 16, 17, etcétera. Todo o mundo está aquí ata agora. Así, a é un enderezo. O nome dunha matriz, un punteiro grávase alí. É un punteiro, é un lugar de memoria, para o inicio da matriz. Polo tanto, se ese fose o array, unha sería un valor de 13. E, por suposto, podemos dar un valor que queremos. Char protagonizar un, podemos dar un calquera enderezo de memoria que queremos. Podemos darlle 0, podemos darlle negativo 1 - 1 negativo non existe, entón isto pode ser problemático, pero viu que aínda funcionaba. Así, podemos dar un calquera número que queremos, calquera enderezo de memoria que queremos. Entón, int b di: OK, vaia este número de pasos para a matriz. Polo tanto, se b é igual a 2, e un é igual a 13, estamos na dirección de memoria 13. E nós imos dúas etapas, e por iso que estamos aquí. E o comercial significa retorno o enderezo do local. E o enderezo é, por suposto, 15. Entón, temos 13 máis 2 ou A máis B, que é 15. A cuestión é, con todo - Sinto moito. Será que aclarar as cousas por que isto funciona? Audiencia: Por que ía traballar suceder - así pode ter unha matriz e ir a un índice negativo? COLUMNA: Certo. Entón fixemos números negativos, de xeito que é o - iso ten sentido, con todo, primeiro, [? Avi,?] para ti? Audiencia: Si, eu son só [Inaudível], pero - COLUMNA: Si, este retornaría 15. Se unha foi 13, e b é 2, isto ía voltar 15. Audiencia: Entón, a indexación cero non fai facer un problema, non? Porque está movendo desde 0. COLUMNA: Certo. Entón está en movemento - por iso, se b é 0, non vai pasar en calquera lugar. E só regresou a dirección - se b é 0, que é esencialmente volvendo o enderezo dun arquivo. Pasando en carácter estrela un e volvendo a enderezo dun só está retornando unha, esencialmente. OK, a pregunta é por que números negativos funciona? E iso é o moi legal sobre isto porque este debe segmento estándar. E sería segfault se fixo algo así. Digamos, int. Polo tanto, este código é o mesmo e deben comportarse de forma idéntica. Esencialmente, x é unha variable de lixo, e por iso debe comportarse de forma idéntica. Imos facer iso - oops - en estrela. OK, xa estamos a recibir erros aquí, porque xa vai estar con rabia para min, porque xa sabe o que está por vir. En particular, o segundo. Enderezo de memoria empilhados asociado cunha variable local. Esencialmente, eu non estou indo a compilar iso, e entón eu vou facer para desfacer o que nós fixemos. Senón porque nunca está realmente acceder ao que está na memoria situación, non vai segfault. Estamos en realidade nunca mirando para o que está na segunda caixa ou o que está en calquera caixa desta matriz. Estamos só dicindo, aquí vai o enderezo da que estamos a buscar e voltar ese enderezo. Estamos, de feito, nunca indo ao disposición de mirar para este lugar. E por que nunca tocar a memoria, non estar en apuros. Nós non temos un segfault. Se tentásemos, unha vez máis, toque que memoria, toque o que estaba en a ou b - ou b soporte, e supoñendo un é 0 e - se unha é 0, mesmo, que sería moi malo, porque nós non podemos ir abaixo todo o camiño ata alí. Se A e B foron ambos 0, e intentamos tocar o que estaba alí, entón nós estar en apuros. Pero, se non tocamos o que está aí, nós só volver a dirección, é realmente non vai segfault porque que permite realizar estas operacións. El só queda con rabia de ti, e queda super con rabia, cando tentar e tocar a memoria real e devolver o que é en que a localización de memoria. Será que isto ten sentido? Isto é só unha parte tola de C. Así, temos un máis destes. Quen pensa que isto é legal? Máis persoas. Iso é bo. OK, este é o noso último. E gustaríame que me dicir se ou non pensas que iso vai para facer exactamente o mesmo. Teño estes escrito en algún lugar. Eu non estou lembra-las. A ver, 8, b 4, 4, 2, 4, 0, 8, 0, 3, 4, 4, 2, 4, 0, 4. Polo tanto, este é un array, agora, non unha función. E é unha matriz porque temos cadrado corchetes, chaves non rizado. E é unha matriz de que tipo? Calquera persoa, eh? Audiencia: Os seus números hexadecimais? Speak: Pero cal é o tipo C? Todos eles teñen números hexadecimais. Cal é o tipo C? Dille. Audiencia: É caracteres non asinados. COLUMNA: Correcto, caracteres non asinados. E dous números hexadecimais é un byte. Entón, estas son 1, 2, 3, 4, 5, 6, 7, 8, 9 bytes. É unha matriz de 9 bytes. OK, probablemente xa sabe a resposta a esta pregunta. Pero, o que pensas que vai ocorrer cando executo isto? Digo, unha vez máis, en mysum.c, Estou esperando unha función que recibe dous números enteiros. E eu digo que en vez suma é un array de caracteres. O que vai ocorrer cando Eu corro. / MySum e facer? Ben, en primeiro lugar, a maioría de vostedes probablemente de acordo en que make - Oh non, estou a xogar. O que eu fixen de malo? Uh oh. Iso debe ser claves. É así que arrincar unha matriz. My bad. Entón, nós xa vimos antes que tipo son unha abstracción de nivel C, e non un abstracción nivel do equipo. Así, a maioría de vostedes probablemente esperaba que facer, ou no caso de que ía facer. Pero o que, cando eu corro. / MySum? O que vai ocorrer? Algún palpite? Audiencia: Vai imprimir unha palabra. Speak: Vai imprimir unha palabra. Que palabra? Audiencia: [inaudível]. Speak: Calquera outras suposicións? OK, imprimir unha frase. Pode que calquera frase. Este será o seu lado. Calquera persoa que ten un palpite diferente? Anna, que o seu palpite? Audiencia: Vai imprimir - dúas letras, ou [inaudível] unha letra. COLUMNA: Unha letra. Audiencia: Podo contar como moitos [inaudível]? Speak: Nine. Ben, eu estou indo a executalo. El fai exactamente o mesmo. El engade dous números xuntos. Ben, imos pasar os dous argumentos. Non leva argumentos. Entón, eu non sei onde podería posiblemente, obter estes argumentos. Pero imos pasar a 100 e 0. E engade 100 e 0. Iso é loucura. Creo que si. Negativo 4, que funciona tamén. Podes facer o que quere. Esta é unha función suma igualmente válidos. Esta é unha función suma. Pero, non, está dicindo que é unha matriz de bytes. Entón o que está pasando aquí? Entón, unha vez máis, imos voltar a esa idea que dixemos ao principio. Vai de código de nivel C, para montaxe linguaxe, a uns e ceros. Este é hexadecimal. Pero iso é realmente só unha chea de ceros e uns. Este é de 72 ceros e uns, non? 72 ceros e uns. 9 bytes. Cada byte ten 8 bits. Cada bit é un un ou un cero. Entón, queridos ou 72 ceros. Acaba de lles escrito así - en vez de escribir-lo fóra como unha morea de uns e ceros. Pero isto vai pasar de nivel C linguaxe, a montaxe linguaxe, código. E iso vai imprimir o código, nalgún lugar, eses 72 ceros e uns que escribín aquí. Entón, en algún lugar en que - imos por aquí - nalgún lugar MySum, o programa, non son estes 72 ceros e uns que eu escrito e dixo que para escribir. Agora, un palpite ao que os 72 uns e ceros significa? Audiencia: Probablemente o mesmo cousa como volver a máis b. Speak: Probablemente o mesmo cousa como volver a máis b. Imos comprobar iso. Imos descubrir como eu fixen iso. Entón, se volver aquí, eu che digo para realizar esta orde, objdump-S sumfunction.o. Imos executalo. objdump - obj, botan. Basicamente pode darme todo o que quero ver. Pode me dar a linguaxe assembly. Pode me dar os uns e ceros. Ten unha tonelada de bandeiras. Iso é o que nós imos usar de momento. Dot - como se pode ver nos diapositivas - capital de trazo S di: intersperse, código fonte - esta liña é de C - coa montaxe código e cos uns e ceros. E nós estamos indo a executar lo en sumfunction.o. Que vai ser máis fácil de ver. Again - hmm? Audiencia: Inseriu mal. COLUMNA: Pero eu estou indo realmente para limpa-la por un segundo. Vou primeiro para abrir só sumfuntion.o. Audiencia: Vostede soletrou mal na primeira vez. Speak: Classic. Suma - que é unha palabra difícil, con todo. Vostede quedaría sorprendido. OK, entón iso é sumfunction.o. Eu non podería mesmo dicir-lle. Hai unha morea de ceros, claramente moi de ceros, e non hai outro cousas que non é ceros. Pero a maioría ceros. Parece que hai algúns máis. Entón, claramente, iso é difícil de ler. Esa é a linguaxe binaria. Imos agora abrilo - o que? O que estou facendo de malo? Eu deletrear-lo correctamente? OK, iso é raro. Teño un segundo para descubrir o que eu estou facendo mal. Isto é un erro. Isto é raro. Ah, é por iso. Vou volver para o noso inicio un, para que poidamos mirar o código obxecto desta. Porque non é realmente vai ser calquera cousa, cando acabamos de poñer o uns e ceros Pol Alí imos nós. OK, entón todo o mundo pode ver iso. Esta función, como dixen, pór para fóra as liñas C - liñas de código fonte - con algunhas instrucións de montaxe. Aquí é a nosa liña de código fonte. Aquí está un, aquí é outra. Aquí é a instrución de montaxe. Iso é o que se parecen. Instrucións de montaxe - podes aprender máis destes se tomar outras clases de CS, pero son xeralmente unha instrución. E, a continuación, unha fonte e un destino. E entón aquí é o código binario que corresponde a ese conxunto instrución. Entón, como podes ver, esta función suma, ao final do día, é de tres instrucións de montaxe. Só tres. Un mov - este m-o-v representa un Move. Agregar stands para Engadir. E r-e-t significa Return. Entón, un mov, un add, un retorno. E estes, por aquí, son os ceros e aquelas que corresponden a ese código. Polo tanto, aqueles ceros e uns, se sabe quen, pode simplemente poñer aqueles en liña recta dentro E entón el vai facer o mesmo. Porque, ao final do día, todos está executando unha longa serie de ceros e uns. E iso é o que o seu código é realmente. E a razón - imos ollar a unha cousa. Será que eu teño o makefile aberta? Entón, se nós volvemos para correr cero, cero ata aquí - Sentímolo, o capital o, de capital o cero, non cero, cero. E nós fixemos, sería aínda funcionan do mesmo xeito. Pero agora entender que hai un moito máis instrucións de montaxe. Isto porque, unha vez máis, preguntei ao compilador non fai ningunha optimización. Entón, eu aínda podería ter todo isto ceros e uns, e xoga-los en, e que ía funcionar. Acaba de facer as optimizacións, porque é un pouco máis fácil, entón, para escribir esta matriz. Pero iso ía funcionar tan ben. OK, imos facer unha cousa final, porque eu creo que é a parte máis legal. Aínda que todo o mundo está claramente xa soprado e sen palabras. As nosas mentes están queimados. [Inaudível] Polo tanto, estes son dunha clase CS diferente, que é super interesante, que tomei - CS61. Eu altamente incentivos-lo a levala. Pero a parte legal sobre este feito, que cousas son só ceros e uns, son de que todo está ceros e uns. Así, pode ter un arquivo que ten o ceros correctas e que quere nalgún lugar nel, e usar esa sección de ceros e uns en función suma. O que quero dicir con iso? Quere dicir que pode ter un arquivo de imaxe que ten a serie correcta de ceros e queridos, que imprimen algo a unha imaxe. E un programa pode interpretar é unha imaxe, pero pode interpretala lo, se quere, como unha función suma. Entón, se nós quería abrir, por exemplo, esta foto. Imos, Ola Kitty. Imaxe algo marabilloso. Aquí hai esa secuencia de ceros e uns. Eses 72 ceros e uns Existen nesta imaxe. Entón, o que podo facer, entón, é escribir - Teño que lembrar onde están. Vou atopar isto en un segundo. Pero o que facemos - deixe-me saber onde están. Un segundo. Imos facer - Audiencia: [inaudível]. Speak: Grazas. Entón, se nós executarmos este programa, que en vez le un arquivo, el vai a este índice no ficheiro. E entón, unha vez máis, así como MySum, toma dous números. Podemos engadir números exactamente o mesmo que estabamos facendo antes, que vai a mostrar como o feito de que, ao final do día, todas estas cousas son ceros e uns. E é exactamente como escolle interpretala los. E se realmente ollar nesta imaxe - imos ampliar un pouco. Todos poden ver iso? Notará aquí, hai algunha mancha estraña. Imos - esta é a imaxe orixinal. Notará aquí non hai ningunha Mancha. Este é o código para a función suma, é que pouco Mancha alí mesmo. E, de feito, unha vez máis, se aprender máis sobre iso, notarás que este Ola Kitty, que ten mesmo unha maior Mancha, ten un código que pode levar máis dun ordenador se non está protexido apropiadamente. Entón pode realmente realizar este. Eu non estou indo a executa-lo agora. Pero pode executar este Ola Imaxe Kitty, e pode asumir o seu ordenador. Entón, iso é todo para o demo. Alguén ten algunha dúbida, comentarios, preocupacións? Eu creo que este material é fascinante. El me inspirou a aprender máis. Recomendo, se vostede está interesado en todo o CS, fale comigo. Aínda que eu son un Estudos Sociais Concentrador, eu son un CS, secundario, de xeito Eu aínda sei un pouco. Pero eu certamente sabe o que clases que ten que tomar. Eu creo que é todo moi interesante, e animou-vos, seguramente, a aprender máis, se está interesado. OK, eu teño unha cousa final. Sentímolo. Algunha pregunta? Non parei de esperar se alguén tiña algunha dúbida sobre iso. Ten alguén será un concentrador de CS? Ou pensar niso? Un, dous, tres, catro. One - só un. Anna é a única man que é incrementar con autoridade. OK, iso é legal. Assam, o que vai facer? Audiencia: [inaudível]. Speak: Constantino? Audiencia: Física. COLUMNA: Guau, iso foi rápido. Vostede tivo unha experiencia malo no CS50? [Inaudível], o que vai facer? Audiencia: Eu non teño idea. Speak: Curt? Audiencia: Econ ou CS. Speak: Econ ou CS. Tom? Audiencia: Eu estou facendo Stat. COLUMNA: Stat? Aceptar. O que é? Audiencia: Me? COLUMNA: Yeah. Audiencia: Stat. Speak: Stat. Oh, alí vai. Tom, falar con Alden. Emily, que é vostede? Audiencia: Biomédica - COLUMNA: Está nesta sección? Audiencia: Non Speak: OK, iso é Emily. Ela é a miña amiga. Claramente non é tan bo dun amigo, porque me dá un tempo difícil. Podería ser máis agradable para min diante de todos, o meu alumno - Audiencia: Eu estou facendo o seu guía Q. COLUMNA: Serio? Uh oh. OK, é incrible. Quérote moito. Oh boy. En fin, eu, onte á noite, como todo - Eu estou seguro que todo o mundo parece realmente tensión agora. Non sei, son calouros - son Vostedes sentindo a tensión? Estou me sentindo a tensión. Era coma se, vai a casa de Acción de Grazas. Vostede é como eu vou facer todas estas cousas. Audiencia: É tan diferente. Speak: Si, e volver. Jeff, non se sente así? Audiencia: Eu só penso Eu faría un pouco. Speak: OK, xenial. Así que volver, e eu non teño fixo nada. E é todo súper-estresante. E eu estou preocupado, xenuinamente interesado, sobre a existencia ou non estou vai rematar todo o que eu teño. Pero onte á noite, eu non estaba a tensión, Eu estaba un pouco triste. Entón, eu escribín no meu diario sobre o que eu estaba triste. E eu estaba triste con esta sección nesta clase a chegar ao final. Entón, eu só ía ler para vós un pequeno fragmento do meu diario, a partir de onte á noite. Podo incorporarse algúns servilletas, algúns tecidos de Tom? Non, eu vou chorar. Non choro. Non que non pode chorar, Eu só non chorar. Eu non sei se a miña bágoa glándulas funcionou - dutos lacrimais. Eu non chorei en un longo tempo. Audiencia: [inaudível]. Speak: OK, grazas. OK, hai un pequeno prólogo - hai algunhas outras partes do meu diario entrada, porque eu intento cada revista noite antes de chegar á cama. Recomendo journaling. El axuda a procesar as cousas, e tamén ser moi grata do seu día. E iso fai que sexa moito máis doado ollar de volta no seu día e entender que había moita cousa boa cousas que aconteceron. Aínda que se sinta realmente a tensión á noite ou moi triste, ou realmente triste ou canso. Oh, meu Deus. Eu non sei se está escrito que ben, porque eu non resolve-la. Pero nós imos lelo. Non adoito ler o meu revista, obviamente. "Mañá, eu vou ensinar o meu último Sección CS50 do ano. É unha tolemia como o tempo voa rápido. Con todo, estou impresionado co quão diferente miña experiencia no ensino este ano foi que cando eu estaba no segundo ano. Para comezar, eu sempre coñecer o material mellor. Pero non diga a miña primeira cohorte de alumnos que. Máis importante, con todo, entender que a alegría que vén de pé diante dunha sala de o que comeza como estraños, mais acaba como, en menos, amigos de Facebook, é non un acaso do primeiro ano. Pola contra, é saber que, en dalgún xeito, está axudando talentosa, pensativo, agradable, e persoas apaixonadas aprender un pouco máis sobre ciencia da computación. Está cambiando que lámpada só unha bits no seu soquete, de xeito que sexa capaz a brillar máis forte do que, ou eles, podería ter imaxinado no inicio do semestre. Está axudando transformar as carrancas de cabeza para abaixo e facer preguntas que dar apoio, pero aínda permitir os alumnos a se erguer pola súa conta. Certamente non é unha esaxeración dicir que esta sección é a miña favorita parte da semana. Ou mesmo que eu dubido en dicir, iso é todos, en 5:30 cada semana, sabendo que vai ser un camiño moi longo ata que nos atopemos de novo. Con todo, eu son incrible grata a todos os que me deu esta oportunidade de dar a volta ós outros. Para David, pola súa paciencia e confianza. Para o equipo de rodaxe e produción, a facéndome mirar un pouco respectable. E, máis importante, aos meus alumnos, sen os cales non tería ningunha razón para pasar 10 horas tentando descubrir o mellor xeito de chamar a punteiros, ou establecer un mesa de golfiños, vía JavaScript. Como sempre, foi unha bendición. " Entón, con iso, gracias a vós. Vou ver todos vostedes na feira CS50, e a maratón hacker, se é alí. E se ten dúbidas, eu vou ir arredor ata que non hai máis. Pero gracias a vós por un ano marabilloso. [Aplausos] COLUMNA: Podería chorar.