SPEAKER: OK, então, você não vai acreditar, mas na semana passada, na segunda-feira, em Pierce, eu estava no porão. Eu nunca ir para Pierce. E eu nunca vou voltar novamente, porque Deixei minhas coisas sozinha, como, cinco minutos e alguém roubou meu computador e meu telefone da minha mochila. O que significa que eu tenho que voltar, e em seguida, menos de uma semana depois ele foi roubado novamente. E então ele ficou ligado - Find My iPhone continua ser inúteis. Então eu continuar a encorajar você não usá-lo. Descobriu-se em uma vez, e foi no MIT, uns 15 minutos depois, ea pessoa chamado este número de telefone, que mostrou no meu registo de chamadas AT & T. Então eu fui em linha, chamado de que o telefone número, e foi direto para este atendedor de chamadas em espanhol. E eu não ter ouvido falar dele desde então. Então eu tive que começar um novo computador e telefone. Eu sei. É. Mas se vocês querem lascar na minha fundo de computador, depois disso, é por isso que Pedi-lhe aqui. Brincadeirinha. Mas isso foi muito triste e traumático. Mas é tudo para trás agora, e foi por isso o set-p 8 demorou tanto tempo, porque Eu não tinha um computador. E alguém roubou. E eu por e-mail, perguntando se eles seria o seu grau-p set 8. Mas eles disseram que não. E eu era como, eu posso ter meu computador de volta? E eles são como, não. Brincadeirinha. OK. Esta é a nossa seção final, e eu tenho um par de - nós só temos três coisas na agenda. Vamos falar um pouco sobre o guia Q. Então, nós vamos gastar 15 minutos em uma demonstração legal. Então vamos todos dizer despedir um ao outro. Você realmente não precisa de seus computadores ou uma caneta ou um papel para tomar notas, ou acompanhar. Então eu suponho que, se você tem o seu computador , então você está no Facebook. Basta dizer. A menos que você está preenchendo o Guia de Q, o qual é em primeiro lugar. O guia Q está aberta. Você já teve um e-mail sobre isso. Uma vez que todas as coisas Q é submetida ao final do ano, eu recebo todas as Comentários Q nos escores de todos que escolhe para me dar feedback. E assim, quando você vai no Q - Eu não sei se você pode fazer isso, Jeff, porque você é estudante e extensão. Mas quando você vai no Q, se você não tiver feito isso antes, você escolhe seu professor, que é David Malan. Você tem que fazer ele. E então você pode escolher TFs. E você pode escolher como muitos TFs como você quer. Mas existem 60 de nós. Você não tem que pegar todo mundo. Você pode escolher apenas me, ou apenas escolher um algumas outras pessoas, se você quer, para dar-lhes feedback também. E então você obter pontuação em todos estes diferentes eixos, e então você pode sair lhes feedback. E então, como um mês depois, Vou pegar tudo o que feedback. E, assim como o feedback que você esteve dando-me ao longo do semestre, eu ler tudo isso. E é realmente útil, e ajuda me crescer como professor e como um indivíduo. Então, por favor, tome algum tempo para fazê-lo. Nós só vamos ficar aqui para, assim, 30 minutos. Então, se você quiser, no final deste, para levar cinco minutos, e basta preencher o Q, porque não é preciso mais tempo do que isso. Isso seria maravilhoso, e você também obter suas notas para trás mais rapidamente se você preencher o Q. Assim, a maioria de vocês têm feito isso antes - ou não, cerca de metade do que você ter feito isso antes. Mas se você é um calouro, isso é o que é. Vai ser o mesmo para todas as classes. Faça-o. Leva cinco minutos. Mas também, se você fizer isso um pouco a sério, essa não é a pior coisa no mundo, porque eu certamente levar a sério. Então, se você me deixar um rosto sorridente, Eu aprecio isso. Mas eu também gostaria de receber se você me deixou mais do que um rosto sorridente. Mas cabe a você. Eu não posso te dizer - ou como uma grande emoticon cara, com um capital D. Isso seria ser ainda melhor. OK, isso é tudo que eu tenho para o P. Se você tiver alguma dúvida, você pode pedir me, mas bastante auto-explicativo. Assim, por favor, preencha-o. Eu realmente aprecio isso, e isso significa muito para mim. OK, é isso que nós vamos passar 15 minutos passando. Vou mostrar-lhe algum código. Eu acho que isso é muito legal, e isso me deixou mais excitado em ciência da computação. Então eu espero que ele vai fazer o mesmo para todos vocês. Vamos abrir - e tudo isso código eu vou mandar para você mais tarde. Mas nós apenas estamos indo para abrir - Estou no meu terminal - vamos abrir este programa chamado [? MySum. ?] Qualquer pessoa pode ler isso, ou devo torná-lo maior? Alguém pode me dizer o que este código vai fazer quando eu executá-lo, ou o que esta programa vai fazer quando eu executá-lo? [? Avi,?] O que você acha ele vai fazer? Concluir mastigação. Você não deve falar com a boca aberta. AUDIÊNCIA: Será que tomar um monte de argumentos, encontrar soma deles retornando soma, em seguida, imprimi-lo? Ou leva em dois argumentos, e em seguida, ele faz [inaudível]. E então ela mostra o que quer os resultados são. SPEAKER: Close, muito perto. Alguém quer adicionar [? Avi o que?] disse? Você precisa dar a este programa quaisquer argumentos de linha de comando? AUDIÊNCIA: Não. COLUNA: Não. O que acontece se você não dá-la quaisquer argumentos de linha de comando? Eu só escrevo dot MySum barra. AUDIÊNCIA: 1 mais 2 é igual a 3. SPEAKER: 1 mais 2 é igual a 3. E vai imprimir isso. Isto é exatamente correto. Você vai ver que impressão f linha na parte inferior. Vai imprimir a, b, e em seguida, a soma de a e b. E eu acho que você assume que soma funciona corretamente. Boa suposição. OK, eo que acontece se eu dar-lhe o argumento? [? Manu? ?] AUDIÊNCIA: Vai adicionar o que o primeiro argumento é o de b. Ou a 2, desculpe. COLUNA: Certo, para 2. Alguém sabe o que strtol faz? É basicamente atoi. Atoi é na verdade uma versão de fantasia de - ou uma versão mais simples do strtol. Mas ele realmente usa strtol. E eu descobri isso porque eu queria algo como atoi, e então quando eu se atoi, eu li aqui. E eu encontrei "este comportamento é o mesmo que "strtol. Então, é basicamente para atoi todos os efeitos. E você vê que eu mesmo usar nulo e 10. Isso realmente permite que você leve uma corda, e transformá-lo em um número, e escolher que base você quiser fazê-lo dentro Portanto, esta é a base 10 aqui. Eu poderia ter feito base de dois para decimal, base 16 para hexadecimal. É muito legal. Mas short longo da história, isso leva dois números e adiciona-los juntos. Então, vamos executá-lo. E você também vai notar, há algumas coisas - então eu tenho um makefile bem aqui, e Se você abrir-se que, algumas coisas você notará são diferentes. Em particular, este argumento aqui, você provavelmente não vi isso antes. Geralmente, nós compilamos as coisas com traço zero, zero. Traço zero, zero, significa não fazer qualquer otimizações, compilador. Não tente fazer nada extravagante, ou fazer qualquer coisa funcionar mais rapidamente, ou obter livrar de variáveis ​​que são necessárias. Não otimizar este código em tudo, Estou pedindo de terceiro nível otimização. Então eu estou pedindo compilador para fazer uma série de otimizações. Você pode mudar isso no makefile quando você tem esse código, se você quiser ver coisas diferentes. Que vamos mostrar em um segundo. Então, corremos o meu soma 1 mais 2 mais 3. Alguém me dê dois argumentos. AUDIÊNCIAS: 4 e 5. SPEAKER: 4 e 5. Obrigado. Grande, ele funciona. Quais são alguns outros bons argumentos para tentar, para se certificar de que isso funciona? Qualquer um? AUDIÊNCIA: 0. COLUNA: 0 e? AUDIÊNCIA: Negativo 3. SPEAKER: Ele funciona. Mas aqueles eram boas escolhas. OK, então vamos voltar aqui. Este é mysum.c. Você vai notar que há também algo chamado sumfunction.c. E isso, diz, oh, há algo definido em sumfunction.c. Eu não incluir esse arquivo aqui porque eu não preciso. Mas eu vinculá-lo em quando eu compilo, que você notou. Vamos ir para cima. Vimos quando compilado MySum, certo lá, nós ligado no binário de sumfunction.o. E eu não preciso de o arquivo de cabeçalho porque, é claro, há o declaração da função. Então acentuada incluem normalmente apenas coloca em uma declaração de função. Aqui eu só colocá-lo em linha reta no código. E assim que eu preciso fazer é o elo no binário, o que eu faço. Algum palpite para o que é em sumfunction.c? O código que eu escrevi em sumfunction.c? AUDIÊNCIA: [inaudível]. SPEAKER: Algum palpite? Sim? Audiência: penso, define alguns [inaudível]. Speaker: Sim. Então eu faço gravação int soma int a. Escrevo esta linha, e então eu tenho aberto chaveta, fechou chaveta. O que você acha que eu escrevo dentro aqueles chaves, dentro dessa função? Sim? AUDIÊNCIA: Return é igual a um. PROCESSADOR: Isso é realmente um bom palpite. Quem pensa que [? Manu?] Está certo? Diz retornar a mais b. OK, não todos. [? Akshar,?] você também? Você tem certeza? OK. O quê? AUDIÊNCIA: Você digitou errado. COLUNA: Não, eu não fiz. Sim, apenas brincando. Você está certo. Isso é exatamente o que diz. É voltar a mais b. Isso faz muito sentido. OK, vamos voltar aqui. Vemos como o cabeçalho - esse é o tipo de retorno. Lembre-se, nós vimos que um dia, o tipo de retorno da função, mas vai antes do nome da função int. Aqui, eu tenho escrito int. O que você acha que vai acontecer se neste função, eu não escrever int, mas Eu escrevo sem sinal? A diferença, é claro, que ser não assinado representa apenas positivo números inteiros, e pode ser int positivo ou negativo. Então eu mudei o retorno tipo desta função. Este código não corresponde este tipo de retorno aqui. O que você acha que vai acontecer quando eu compilar? Você deve gritar comigo. Sem gritos. E quando eu executo o programa? Vamos fazer antes 0 negative 3 ou negativo 1. Ele ainda funciona, mesmo que eu estou dizendo ele está retornando um inteiro sem sinal. É claro que não está retornando um inteiro sem sinal. Ele está retornando um inteiro assinado. Ele está retornando negativo 1. OK, isso é estranho. Que tal se eu entrar aqui e fazer isso? Então eu mudei tudo de int para unsigned. Ele só pode ter inteiros sem sinal. Mas nós ainda acho que vai correr? AUDIÊNCIA: sim. SPEAKER: Vai. Isso é loucura. E nós passamos em uma atribuído claramente inteiro, podemos passar dois assinaram inteiro, ele ainda funciona. OK, alguma idéia de por que ele ainda funciona, ou o que está acontecendo? Sim, Jeff. AUDIÊNCIA: Tem alguma coisa a ver com sua otimização que você destaque. COLUNA: Não. Poderíamos mudar a otimização, ele continuaria a trabalhar. Eu posso fazer isso por você, mas - AUDIÊNCIA: Vou levar a sua palavra para ela. COLUNA: Yeah. Se você abrir o makefile bem aqui, Mudei a otimização. Assim você pode fazer traço zero, zero. Ele ainda vai funcionar. Outros pensamentos? Vocês todos devem trabalhar, de modo por que você espera que ele funcione? Não? Silêncio. OK. Eu tenho que esperar sete segundos porque eu fiz uma pergunta. Então, a coisa legal sobre C, e você tem provavelmente experimentado antes - você pode não ter, isso pode a primeira vez. Mas, como todos sabem, quando eu escrevo algo em C, ele não salva como esta no computador. É salvo como uns e zeros. Vai de código C para código de montagem. Alguém viu código de montagem antes, código de montagem da máquina? Nós vamos olhar para em um segundo. Vai de código C para código de montagem. E vocês sabem os estágios de compilação. Você tinha que memorizar que, para um questionário, e, em seguida, escrevê-lo em teste zero. A maioria das pessoas entendeu errado. Eu acho que vocês acertou em cheio. Mas, vocês são a melhor parte para testes, por sinal. O que é incrível. Ele não vai te machucar. Não se preocupe. Mas é muito legal. Bom trabalho. Então, ele vai para a linguagem assembly, e em seguida, ele vai para uns e zeros. E os uns e zeros são guardados no computador, e isso é o que salva em o a.out, ou neste caso, o arquivo executável. E o computador executa uns e zeros. Certo? Nós aprendemos isso antes. Então, a coisa legal é que esta sem sinal idéia, a idéia de tipos de ints não assinado, et cetera, et cetera, que é aqui na linguagem C. Aqueles existir. Mas os tipos não existem no os uns e zeros. Tipos nem sequer existe de verdade em o nível de linguagem de montagem. Então, isso é algo que existe em C mundo, mas não existe no computador mundo ou o mundo do processador. Isso é uma abstração que o C língua incluiu, para tornar a nossa vida mais fácil. Assim, no final do dia, que pode escrever muitas coisas diferentes aqui, e não faz a diferença. Porque que só existe no mundo da C. Não existe na uns e zeros mundo. E o nosso programa de execução em os uns e zeros mundo. Então, sua mente claramente não explodido ainda. Mas eu acho que isso é legal. Sim, Jeff. AUDIÊNCIA: Então, se em vez de fazendo int, você faz carvão. E você era - SPEAKER: Vamos fazê-lo em um segundo. AUDIÊNCIA: Porque então você começa uma não assinado que vai de 128 a negativa 127 ou 0 a 255. COLUNA: Então char é problemático. Alguém sabe por que seria de char problemático, e que seria, na verdade, mudar as coisas nos mais e zera mundo? AUDIÊNCIA: Devido ao tamanho do caractere. SPEAKER: Tamanho do char é 1. Então não assinado também é 4 bytes. Então caractere seria estragar as coisas. Mas o que é de 4 bytes isso é relacionada com um char? Ou em que adiciona um adicional - você pode colocar mais um personagem depois de char. AUDIÊNCIA: Char estrela. SPEAKER: Char estrela tem 4 bytes. Então, vamos fazer alguma coisa que é uma estrela de char. Então isso provavelmente funcionaria, mas estamos vai fazer alguma coisa, mesmo mais louco do que isso. Na minha opinião, mais louco. Eu já escrevi uma função que retorna um ponteiro, e é preciso ponteiro e um valor sem sinal - vamos alterar esta de volta para int então não sabemos fazer muitas mudanças ao mesmo tempo. E tem uma matriz chamado, um índice para a matriz e retorna o endereço. Vimos esses operadores antes. Este, o que você acha que isso vai fazer, em troca, quando eu executá-lo? O que você acha que vai fazer? Algum palpite? AUDIÊNCIA: Segfault. COLUNA: O quê? Segfault? Isso é um bom palpite. Tom diz a mesma coisa. Qualquer outro palpite? Quem pensa que vai fazer a mesma coisa? Quem pensa que vai segfault? Ele faz a mesma coisa. Desculpe. Mas, é claro, nós colocamos em 1 e 2. E esses são ambos válidos, certo? Vamos ver, podemos ir para o o segundo lugar de uma matriz. Mas o que se fez b um número negativo? Isso é provavelmente um palpite melhor por algo segmento padrão. Ele ainda funciona. OK, isso agora é loucura. Esta é a função de soma igualmente válidos. Isso faz exatamente a mesma coisa como retorno a e b. Alguém pode explicar por que isso é uma boa Resumindo função, ou por que isso funciona? O que está acontecendo aqui? Por que isso faz exatamente o mesmo coisa como a nossa função soma de idade? [? Akshar,?] o que está acontecendo? AUDIÊNCIA: Porque quando você tem um um que é um endereço para a memória local - e quando você faz o comercial, é vai para esse endereço de memória. E quando você vai para b, você é do tipo passos que o endereço de memória em movimento, você está retornando isso. Então você é realmente, de fato, a adição de um e b [inaudível]. Onde estão as operações padrão em que o retorno? Como, onde os parênteses cair? É o retorno do endereço em um antes ou depois [inaudível]? SPEAKER: Vai índice em b - ou índice em um - e, em seguida, retornar o endereço. OK, então se todo mundo entender o que [? Akshar?] disse, e explicou por que isso funciona? Eu não, a primeira vez que alguém explicou isso para mim. Será que alguém gosta de uma imagem para explicar isso? Vamos tirar uma foto, com sem marcadores, isso é ótimo. Encontrado algum. Portanto, temos uma matriz que é uma série de caixas. O primeiro é um índice 0, o índice de 1, 2, 3, 4, ponto, ponto, ponto. Uma matriz típica. E além de ter índices, todos eles têm endereços de memória. Então, vamos dar a este endereço de memória 13, 14, 15, 16, 17, et cetera. Todo mundo está aqui até agora. Assim, a é um endereço. O nome de uma matriz, um ponteiro é guardada lá. É um ponteiro, é um local de memória, para o início da matriz. Portanto, se esse fosse o array, uma seria um valor de 13. E, claro, nós podemos dar um qualquer valor que queremos. Char estrelar um, podemos dar um qualquer endereço de memória que queremos. Nós podemos dar-lhe 0, podemos dar-lhe negativo 1 - 1 negativo não existe, então isso é provavelmente problemático, mas você viu que ainda funcionava. Assim, podemos dar um qualquer número que queremos, qualquer endereço de memória que queremos. Então, int b diz: OK, vá este número de passos para a matriz. Portanto, se b é igual a 2, e um é igual a 13, estamos no endereço de memória 13. E nós vamos duas etapas, e por isso que estamos aqui. E o comercial significa retorno o endereço do local. E o endereço é, é claro, 15. Então, nós temos 13 mais 2, ou A mais B, que é 15. A questão é, no entanto - Sinto muito. Será que esclarecer as coisas por que isso funciona? AUDIÊNCIA: Por que ele iria trabalhar acontecendo - assim você pode ter uma matriz e ir a um índice negativo? COLUNA: Certo. Então fizemos números negativos, de modo que é o - isso faz sentido, porém, primeiro, [? Avi,?] para você? AUDIÊNCIA: Sim, eu sou apenas [Inaudível], mas - COLUNA: Sim, este retornaria 15. Se uma foi 13, e b é 2, isso iria retornar 15. AUDIÊNCIA: Então, a indexação zero não faz se tornar um problema, certo? Porque você está se movendo a partir de 0. COLUNA: Certo. Então você está em movimento - por isso, se b é 0, você não iria passar em qualquer lugar. E você só retornou o endereço - se b é 0, que é essencialmente retornando o endereço de um arquivo. Passando em caractere estrela um e retornando o endereço de um está apenas retornando uma, essencialmente. OK, a pergunta é por que números negativos funciona? E isso é a coisa muito legal sobre isto, porque este deve segmento padrão. E seria segfault se fez algo assim. Digamos, int. Portanto, este código é idêntico e devem comportar-se de forma idêntica. Essencialmente, x é uma variável de lixo, e por isso deve se comportar de forma idêntica. Vamos fazer isso - oops - em estrela. OK, já estamos recebendo erros aqui, porque ele já vai estar com raiva para mim, porque já sabe o que está por vir. Em particular, o segundo. Endereço de memória empilhados associado com uma variável local. Essencialmente, eu não estou indo para compilar isso, e então eu vou fazer para desfazer o que nós fizemos. Mas porque nunca está realmente acessando o que está na memória localização, não vai segfault. Estamos na verdade nunca olhando para o que está na segunda caixa ou o que está em qualquer caixa desta matriz. Estamos apenas dizendo, aqui vai o endereço da coisa que estamos procurando e retornar esse endereço. Estamos, na verdade, nunca indo para o disposição de olhar para esse local. E porque nós nunca tocar a memória, não ficar em apuros. Nós não temos um segfault. Se tentássemos, mais uma vez, toque que memória, toque o que estava em a ou b - ou b suporte, e supondo um é 0 e - se uma é 0, mesmo, que seria muito ruim, porque nós não podemos ir para baixo todo o caminho até lá. Se A e B foram ambos 0, e tentamos tocar o que estava lá, então nós ficar em apuros. Mas, se não tocamos o que está lá, nós apenas retornar o endereço, é realmente não vai segfault porque que permite executar essas operações. Ele só fica com raiva de você, e fica super com raiva, quando você tentar e tocar a memória real e devolver o que é em que a localização de memória. Será que isso faz sentido? Isso é apenas uma parte louca de C. Assim, temos um mais destes. Quem acha que isso é legal? Mais pessoas. Isso é bom. OK, este é o nosso último. E eu gostaria que você me dizer se ou não você acha que isso vai para fazer exatamente a mesma coisa. Tenho estes escrito em algum lugar. Eu não estou memorizá-las. Vamos ver, 8, b 4, 4, 2, 4, 0, 8, 0, 3, 4, 4, 2, 4, 0, 4. Portanto, este é um array, agora, não uma função. E é uma matriz porque temos quadrado colchetes, chaves não encaracolado. E é uma matriz de que tipo? Qualquer pessoa, hein? AUDIÊNCIA: Seus números hexadecimais? SPEAKER: Mas qual é o tipo C? Todos eles têm números hexadecimais. Qual é o tipo C? Diz-lhe. AUDIÊNCIA: É caracteres não assinados. COLUNA: Certo, caracteres não assinados. E dois números hexadecimais é um byte. Então, essas são 1, 2, 3, 4, 5, 6, 7, 8, 9 bytes. É uma matriz de 9 bytes. OK, você provavelmente já sabe a resposta para esta pergunta. Mas, o que você acha que vai acontecer quando eu executo isso? Eu digo, mais uma vez, em mysum.c, Estou esperando uma função que recebe dois números inteiros. E eu estou dizendo que em vez soma é um array de caracteres. O que vai acontecer quando Eu corro. / MySum e fazer? Bem, em primeiro lugar, a maioria de vocês provavelmente concorda que make - oh não, estou brincando. O que eu fiz de errado? Uh oh. Isso deve ser chaves. É assim que você inicializar uma matriz. My bad. Então, nós já vimos antes que os tipos são uma abstração de nível C, e não um abstração nível do computador. Assim, a maioria de vocês provavelmente esperava que fazer, ou supondo que ele iria fazer. Mas o que, quando eu corro. / MySum? O que vai acontecer? Algum palpite? AUDIÊNCIA: Vai imprimir uma palavra. SPEAKER: Vai imprimir uma palavra. Que palavra? AUDIÊNCIA: [inaudível]. SPEAKER: Quaisquer outras suposições? OK, imprimir uma frase. Você pode ter qualquer frase. Esse será seu lado. Qualquer pessoa que tem um palpite diferente? Anna, qual o seu palpite? AUDIÊNCIA: Vai imprimir - duas letras, ou [inaudível] uma letra. COLUNA: Uma letra. AUDIÊNCIA: Posso contar como muitos [inaudível]? SPEAKER: Nine. Bem, eu estou indo para executá-lo. Ele faz exatamente a mesma coisa. Ele adiciona dois números juntos. Bem, vamos passar os dois argumentos. Ele não leva argumentos. Então, eu não sei onde ele poderia possivelmente, obter esses argumentos. Mas vamos passar a 100 e 0. E acrescenta 100 e 0. Isso é loucura. Acho que sim. Negativo 4, que funciona também. Você pode fazer o que quiser. Esta é uma função soma igualmente válidos. Esta é uma função soma. Mas, não, você está dizendo que é uma matriz de bytes. Então o que está acontecendo aqui? Então, mais uma vez, vamos voltar a essa idéia que dissemos no início. Você vai de código de nível C, para montagem linguagem, para uns e zeros. Este é hexadecimal. Mas isso é realmente apenas uma monte de zeros e uns. Este é de 72 zeros e uns, certo? 72 zeros e uns. 9 bytes. Cada byte tem 8 bits. Cada bit é um um ou um zero. Então, queridos ou 72 zeros. Acabei de lhes escrito assim - em vez de escrevê-lo fora como um monte de uns e zeros. Mas isso vai passar de nível C linguagem, a montagem linguagem, código. E isso vai imprimir no código, em algum lugar, esses 72 zeros e uns que eu escrevi aqui. Então, em algum lugar em que - vamos por aqui - em algum lugar MySum, o programa, não são estes 72 zeros e uns que eu escrito e disse que para escrever. Agora, algum palpite para o que aqueles 72 uns e zeros significa? AUDIÊNCIA: Provavelmente o mesmo coisa como voltar a mais b. SPEAKER: Provavelmente o mesmo coisa como voltar a mais b. Vamos verificar isso. Vamos descobrir como eu fiz isso. Então, se você voltar aqui, eu te digo para executar este comando, objdump-S sumfunction.o. Vamos executá-lo. objdump - obj, despejar. Basicamente ele pode me dar tudo o que eu quero ver. Ele pode me dar a linguagem assembly. Ele pode me dar os uns e zeros. Tem uma tonelada de bandeiras. Isso é o que nós vamos usar por enquanto. Dot - como você pode ver nos slides - capital de traço S diz: intersperse, código-fonte - esta linha é de C - com a montagem código e com os uns e zeros. E nós estamos indo para executar lo em sumfunction.o. Porque vai ser mais fácil de ver. Again - hmm? AUDIÊNCIA: Você digitou errado. COLUNA: Mas eu estou indo realmente para limpá-la por um segundo. Vou primeiro para abrir apenas sumfuntion.o. AUDIÊNCIA: Você soletrou errado na primeira vez. SPEAKER: Classic. Soma - que é uma palavra difícil, no entanto. Você ficaria surpreso. OK, então isso é sumfunction.o. Eu não poderia mesmo dizer-lhe. Há um monte de zeros, claramente muito de zeros, e não há outro coisas que não é zeros. Mas a maioria zeros. Parece que há alguns mais. Então, claramente, isso é difícil de ler. Essa é a linguagem binária. Vamos agora abri-lo - o quê? O que estou fazendo de errado? Eu soletrá-lo corretamente? OK, isso é estranho. Preciso de um segundo para descobrir o que eu estou fazendo errado. Isso é um erro. Isso é estranho. Ah, é por isso. Eu vou voltar para o nosso inicial um, para que possamos olhar para o código objeto desta. Porque não é realmente vai ser qualquer coisa, quando acabamos de colocar o uns e zeros pol Lá vamos nós. OK, então todo mundo pode ver isso. Esta função, como eu disse, colocar para fora as linhas C - linhas de código-fonte - com algumas instruções de montagem. Aqui é a nossa linha de código-fonte. Aqui está um, aqui é outra. Aqui é a instrução de montagem. Isso é o que eles se parecem. Instruções de montagem - você pode aprender mais destes se você tomar outras classes de CS, mas eles são geralmente uma instrução. E, em seguida, uma fonte e um destino. E então aqui é o código binário que corresponde a esse conjunto instrução. Então, como você pode ver, esta função soma, no fim do dia, é de três instruções de montagem. Apenas três. Um mov - esta m-o-v representa um Move. Adicionar stands para Adicionar. E r-e-t significa Return. Então, um mov, um add, um retorno. E estes, por aqui, são os zeros e aquelas que correspondem a esse código. Portanto, aqueles zeros e uns, se sabe aqueles, você pode simplesmente colocar aqueles em linha reta dentro E então ele vai fazer o mesma coisa. Porque, no fim do dia, todos você está executando uma longa série de zeros e uns. E é isso que o seu código é realmente. E a razão - vamos olhar para uma coisa. Será que eu tenho o makefile aberta? Então, se nós voltamos para correr zero, zero até aqui - desculpe, o capital o, de capital o zero, não zero, zero. E nós fizemos, seria ainda funcionam da mesma forma. Mas agora você percebe que há um muito mais instruções de montagem. Isso porque, mais uma vez, perguntei ao compilador não faz nenhuma otimização. Então, eu ainda poderia ter tudo isso zeros e uns, e jogá-los em, e que iria funcionar. Acabei de fazer as otimizações, porque é um pouco mais fácil, então, para escrever essa matriz. Mas isso iria funcionar tão bem. OK, vamos fazer uma coisa final, porque eu acho que é a parte mais legal. Mesmo que todo mundo está claramente já soprado e sem palavras. Nossas mentes estão queimados. [Inaudível] Portanto, estes são de uma classe CS diferente, que é super interessante, que tomei - CS61. Eu altamente incentivá-lo a levá-la. Mas a parte legal sobre esse fato, que coisas são apenas zeros e uns, são de que tudo está zeros e uns. Assim, você pode ter um arquivo que tem o zeros corretas e que você quer em algum lugar nele, e usar essa seção de zeros e uns em função soma. O que quero dizer com isso? Quer dizer que você pode ter um arquivo de imagem que tem a série correta de zeros e queridos, que imprimem algo para uma imagem. E um programa pode interpretar é uma imagem, mas você pode interpretá-lo, se você quer, como uma função soma. Então, se nós queria abrir, por exemplo, esta imagem. Vamos, Olá Kitty. Imagem pouco maravilhoso. Aqui há essa seqüência de zeros e uns. Esses 72 zeros e uns Existem nesta imagem. Então, o que eu posso fazer, então, é escrever - Eu tenho que lembrar onde eles estão. Eu vou encontrar isso em um segundo. Mas o que fazemos - deixe-me saber onde eles estão. Um segundo. Vamos fazer - AUDIÊNCIA: [inaudível]. SPEAKER: Obrigado. Então, se nós executarmos este programa, que em vez lê um arquivo, então ele vai a este índice no arquivo. E então, mais uma vez, assim como MySum, toma dois números. Podemos acrescentar números exatamente o mesmo que estávamos fazendo antes, que vai para mostrar como o facto de, no final do dia, todas essas coisas são zeros e uns. E é exatamente como você escolhe interpretá-los. E se você realmente olhar nesta imagem - vamos ampliar um pouco. Todos podem ver isso? Você notará aqui, há alguma mancha estranha. Vamos - esta é a imagem original. Você notará aqui não há nenhuma mancha. Esse é o código para a função soma, é que pouco mancha ali mesmo. E, na verdade, mais uma vez, se você aprender mais sobre isso, você vai perceber que este Olá Kitty, que tem até mesmo uma maior mancha, tem um código que pode levar mais de um computador se ele não está protegido apropriadamente. Então você pode realmente executar este. Eu não estou indo para executá-lo agora. Mas você pode executar este Olá Imagem Kitty, e pode assumir o seu computador. Então, isso é tudo para o demo. Alguém tem alguma dúvida, comentários, preocupações? Eu acho que este material é fascinante. Ele me inspirou a aprender mais. Eu recomendo, se você estiver interessado em tudo no CS, fale comigo. Mesmo que eu sou um Estudos Sociais Concentrador, eu sou um CS, secundário, de modo Eu ainda sei um pouco. Mas eu certamente sabe o que classes que você deve tomar. Eu acho que é tudo muito interessante, e encorajo-vos, com certeza, a aprender mais, se você estiver interessado. OK, eu tenho uma coisa final. Desculpe. Alguma pergunta? Eu não parei de esperar se alguém tinha alguma dúvida sobre isso. Tem alguém vai ser um concentrador de CS? Ou pensar nisso? Um, dois, três, quatro. One - apenas um. Anna é a única mão que é levantou com autoridade. OK, isso é legal. Assam, o que você vai fazer? AUDIÊNCIA: [inaudível]. SPEAKER: Constantino? AUDIÊNCIA: Física. COLUNA: Uau, isso foi rápido. Você teve uma experiência ruim no CS50? [Inaudível], o que você vai fazer? AUDIÊNCIA: Eu não tenho idéia. SPEAKER: Curt? AUDIÊNCIA: Econ ou CS. SPEAKER: Econ ou CS. Tom? AUDIÊNCIA: Eu estou fazendo Stat. COLUNA: Stat? OK. O que você é? AUDIÊNCIA: Me? COLUNA: Yeah. AUDIÊNCIA: Stat. SPEAKER: Stat. Oh, lá vai. Tom, falar com Alden. Emily, que é você? AUDIÊNCIA: Biomédica - COLUNA: Você está nesta seção? AUDIÊNCIA: Não. SPEAKER: OK, isso é Emily. Ela é minha amiga. Claramente não é tão bom de um amigo, porque ela me dá um tempo difícil. Você poderia ser mais agradável para mim na frente de todos, o meu aluno - AUDIÊNCIA: Eu estou fazendo seu guia Q. COLUNA: Sério? Uh oh. OK, você é incrível. Eu te amo muito. Oh boy. Enfim, eu, ontem à noite, como tudo - Eu tenho certeza que todo mundo parece realmente estressado agora. Eu não sei, são calouros - são Vocês se sentindo estressado? Estou me sentindo estressado. Era como se, você vai para casa de Ação de Graças. Você é como, eu vou fazer todas essas coisas. AUDIÊNCIA: É tão diferente. SPEAKER: Sim, e você voltar. Jeff, você não se sente assim? AUDIÊNCIA: Eu apenas pensei Eu faria um pouco. SPEAKER: OK, ótimo. Então eu voltar, e eu não tenho fez nada. E é tudo super-estressante. E eu estou preocupado, genuinamente interessado, sobre a existência ou não estou vai terminar tudo o que eu preciso. Mas ontem à noite, eu não estava estressado, Eu estava um pouco triste. Então, eu escrevi no meu diário sobre o que eu estava triste com. E eu estava triste com esta seção nesta classe a chegar ao fim. Então, eu só ia ler para vocês um pequeno trecho de meu diário, a partir de ontem à noite. Posso pegar alguns guardanapos, alguns tecidos de Tom? Não, eu vou chorar. Eu não choro. Não que você não pode chorar, Eu só não chorar. Eu nem sei se a minha lágrima glândulas funcionou - dutos lacrimais. Eu não chorei em um longo tempo. AUDIÊNCIA: [inaudível]. SPEAKER: OK, obrigado. OK, há um pequeno prefácio - há algumas outras partes do meu diário entrada, porque eu tento cada revista noite antes de eu chegar para a cama. Eu recomendo journaling. Ele ajuda você a processar as coisas, e também ser muito grato do seu dia. E isso faz com que seja muito mais fácil olhar de volta em seu dia e perceber que havia muita coisa boa coisas que aconteceram. Mesmo que se sinta realmente estressado à noite ou muito triste, ou realmente triste ou cansado. Oh, meu Deus. Eu nem sei se ele está escrito que bem, porque eu não corrigi-la. Mas nós vamos lê-lo. Eu não costumo ler o meu revista, obviamente. "Amanhã, eu vou ensinar o meu último Seção CS50 do ano. É uma loucura como o tempo voa rápido. No entanto, estou impressionado com o quão diferente minha experiência no ensino este ano foi do que quando eu estava no segundo ano. Para começar, eu definitivamente conhecer o material melhor. Mas não diga a minha primeira coorte de alunos que. Mais importante, porém, percebi que a alegria que vem de pé na frente de uma sala de o que começa como estranhos, mas acaba como, em menos, amigos do Facebook, é não um acaso do primeiro ano. Pelo contrário, é de saber que, em alguma maneira, você está ajudando talentosa, pensativo, agradável, e pessoas apaixonadas aprender um pouco mais sobre ciência da computação. Você está mudando que lâmpada apenas uma bit em seu soquete, de modo que seja capaz a brilhar mais forte do que você, ou eles, poderia ter imaginado no início do semestre. Você está ajudando transformar as carrancas de cabeça para baixo e fazer perguntas que dar apoio, mas ainda permitir os alunos a se levantar por conta própria. Certamente não é um exagero dizer que esta seção é o meu favorito parte da semana. Ou mesmo que eu hesito em dizer, isso é todos, em 5:30 a cada semana, sabendo que vai ser um caminho muito longo até que nos encontremos novamente. No entanto, eu sou incrivelmente grato a todos os que me deu esta oportunidade de dar a volta aos outros. Para David, por sua paciência e confiança. Para a equipe de filmagem e produção, para fazendo-me olhar um pouco respeitável. E, mais importante, aos meus alunos, sem os quais eu não teria nenhuma razão para passar 10 horas tentando descobrir o melhor maneira de chamar a ponteiros, ou estabelecer um mesa de golfinhos, via JavaScript. Como sempre, tem sido uma bênção. " Então, com isso, agradecer a vocês. Vou ver todos vocês na feira CS50, e a maratona hacker, se você for lá. E se você tiver dúvidas, eu vou ficar ao redor até que não há mais. Mas eu agradeço a vocês por um ano maravilhoso. [Aplausos] COLUNA: Eu poderia chorar.