[Muusika mängimine] SPEAKER 1: Olgu, see on CS50, ja see on algusest nädalas neli, ja nagu te võib-olla kuulnud või lugeda, maailm on lõppemas. Minnes üle kogu internet on teadmiste ja teadlikkuse on viga programmi programmeerimiskeelt nimega Bash. See on imeliselt kaubamärgiga kui Shellshock või Bash uks, kuid artikleid nagu need ei ole ebatavaline. Ja tegelikult, paljud neist toovad tagasi mälestused Heartbleed, mida te võib-olla märganud vajutage tagasi möödunud kevadel, mis oli samamoodi üsna dramaatiline. Nüüd need, mis te siin täna, kui palju sul on, isegi kui sa ei saa aru, mida see on kõik umbes, kuulnud Shellshock? Olgu, ja kui palju te on arvutid, mis on tundlikud? OK, seal peaks olema palju, palju rohkem kätte üles just nüüd, et põhjus, miks me näeme. Võtame pilk on kestnud meedias ja siis selgitan natuke siin meie jaoks tehniliselt. SPEAKER 2: Security eksperdid hoiatas, et tõsine viga saanud umbes mõjutada sadu miljonid maailma veebi kasutajatele. Mis täpselt on viga, mis on olnud dubleeritud Shellshock ja mida see teeb? Noh, Shellshock on tuntud ka kui Bash viga, tarkvara ta kasutab. Häkkerid kasutavad viirus skannida haavatav süsteeme töötab Linux ja Unix operatsioonisüsteemide ja seejärel nakatavad neid. Bash on käsurea kesta. See võimaldab kasutajatel anda käske käivitada programmid ja funktsioonid, tarkvara kirjutades teksti. See on tavaliselt kasutatakse programmeerijad ja ei tohiks olla avatud laiemale maailmale, kuigi Shellshock muudab seda. Noh, worringly mõned analüütikud hoiatada, võiks olla suurem oht, sest Shellshock lubab täielikku kontrolli nakatunud masin, samas Heartbleed lubatud ainult häkkerid luurama arvutid. See on nii tõsine, et see on hinnatud 10 10st tõsiduse Riiklik Haavatavus andmebaas. 2/3 kõigist veebiserverite juures riski, kaasa arvatud mõned Mac arvuteid. Noh, veenduge, et olete plaaster oma süsteemi nüüd. Igaüks hosting veebileht töötab mõjutatud operatsioonisüsteemide peaks võtma nii kiiresti kui võimalik. Igaüks, kes saab endale see peaks välja nägema nende jälgimine ja veebirakenduse tulemüüride tutvu rünnaku. SPEAKER 3: Halvim mis võib juhtuda, on et keegi oleks kirjutada kood, mis automaatselt minna ja skaneerida Internet ja mõjutaks kõik need arvutid. Ja kui nad seda teevad, et, noh, kõige hullem asi, mida nad võiks teha lihtsalt kustutada kõik, või suletud alade alla. Nii et me ei näe kahju sellest seisukohast, kui meil oleks pahatahtlik inimesed kes lihtsalt otsustavad põhjustada häireid tuues süsteemi alla või kustutamine failid ja asjad niimoodi. SPEAKER 2: Mõned ütlevad, et see on üks kõige raskem mõõta vead aastat ja võib kesta nädalaid või isegi kuud, et teha kindlaks selle lõplik mõju. SPEAKER 1: Nii see kõik on tõsi, kuid naljakas asi on peaaegu kõik kujundid sa nägid, välja arvatud ehk klaviatuur, on midagi pistmist viga üldse. Serverid ja juhtmed ja nii edasi, See on omamoodi riivamisi seotud, aga keskmes see on tegelikult päris tuttav, mis toimub siin. Tegelikult, las ma minna meie CS50 seade. Lubage mul minna ja maksimeerida terminal window siin. Ja te ei kasutanud seda, või sisseehitatud versioon sellest, aastal gedit, et kirjutada programme, käske, ja nii edasi, ja see on tegelikult, ja tal olnud nädalaid, Bash, B--S-H. See on Bourne-uuesti laduma, mis on lihtsalt fancy viis öelda, see on programm, mis on vilgub kiiresti, tõhusalt, et istub seal ootab sisendi jaoks. Ja see käsk line liides, mille kaudu Te olete käinud käsud ja lõpuks koostada ja siis töötab programme. Aga Bash on ka programmeerimine keeles järgmised mõttes. Sa tead, et on olemas käsud nagu CD ja LS ja ka ripu ja teised, kuid saate määrata oma käsud rakendades neid Bash. Nüüd me ei kavatse väga üksikasjalik nagu bash programmeerimiskeelt, kuid tean näiteks, et hetkel, seal ei ole käsu nimeks "tere". Seega võib leida üks neist pakette. See ei ole arvutisse installitud. Küsige oma administraatori poole. Aga kui ma tahan, et oleks olemas programm nimega "Hello" Bash või minu kiire, Ma ei saa tegelikult kasutada süntaks, mis on päris C. See ei ole päris sama, kuid see tundub üsna sarnane funktsioon, kuid puuduvad mõned detailid. Miski tundub juhtuda, kuid nüüd, kui ma tüüpi "tere" tegelikult võite kirjutada programmi, mitte C, mitte Java ole teise programmeerimine keeles, kuid Bash ise. Nüüd võti on selles, et ma kirjutasin nimi tahtsin anda uue käsu, ja sulgudes on ka sümboliseerib see on funktsioon. Nagu kõrvale, võite teha nalja asju ja tegelikult isegi Mac OS see on programm nimega Terminal. Ravim ehitatud kellegi arvuti, mis on Mac selles ruumis, ja mida saate teha sarnaseid asju Mac OS, aga sa ei lähe enam kaugemale. Ja see on natuke tangentsiaalne, aga see on omamoodi lõbus. Meenus mulle täna hommikul, kui mõelda selle kaudu, on väike mäng ma kasutasin mängida ühe CS50 endine TFs kusjuures iga kord, kui ta oleks jalutuskäigu kaugusel oma klaviatuuri oma ekraani lukustamata, Ma käsu nagu see-- "tere öelda." Ja nüüd iga kord, kui ta tuli tagasi oma klaviatuuri pärast I heaks ekraan ja ta oleks istuda, proovige teha mõned tööd, list sisu oma directory-- [AUDIO PLAYBACK] Halloo. Tere. SPEAKER 1: Niisiis, õiglus, Tegelikult polnud see "tere". See oli tavaliselt midagi sarnaneb rohkem et-- [AUDIO PLAYBACK] -Beep. SPEAKER 1: --that I would-- nii tema arvuti oleks vannun teda iga kord, kui ta tegelikult istus oma klaviatuuri. Ja väga kiiresti ta arvasin mitte lahkuda oma ekraani lukustamata. Kuid see näitab omamoodi loll lõbus, et sa võib olla midagi nagu Bash. Aga see on natuke rohkem tõsine, et olla kindel, kui see. Ja tõepoolest, see on üks kõige ohtlikum ja kauakestvad vead mis on tõesti tabanud maailma kogu maailmas. See viga on olnud juba umbes 20 aastat, ja sul tuleb leida vaid Praegu selle suhteline lihtsus. Nii et see on tüüpiline käsu, et kui sa oma Mac, sõna otseses mõttes kohe kui sul on oma kaas avatud, võite proovida kirjutades, et programmi nimega Terminal. Terminal on all Rakendused Utilities-- kordki Windowsi kasutajad ei pea muretsema selle konkreetse threat-- kuid need teile Mac tippida Selle aknasse nagu ma teen siin, ja kui sa ei kirjuta et sellesse programmi nimega Terminal, nagu ma teen nüüd, kui näed sõna "haavatav" arvuti on kaitsetud ekspluateerimise. Nüüd mida see tegelikult tähendab? Ja see on tõsi päris hull süntaks, kuid olgem vähemalt venitama mõned huvitavaid aspekte. Nii et siin on mõned süntaks, mis näeb natuke tuttav, vähemalt C ja programmeerimine üldisemalt. Ma näen mõned sulud semikoolonit, looksulg, ja selline, kuid selgub, et käesoleva loll asi siin kollasega sisuliselt funktsiooni et ei tee midagi. Koolon vahenditega midagi teha, ja semikoolon tähendab enam ei tee midagi. Nii seest neist looksulg asjaolu, et mul on võrdsed kirjutada vasakule, seda on sisuliselt luua käsu või muutuja nimetatakse x ja antakse see et kollane natuke kood seal. See võiks olla midagi "kaja tere "või" öelda piiks "või midagi mis sarnaneks. Aga teate, kui silmad tiir veelgi paremale, seal on rohkem seda joont kui lihtsalt lõpuks, et semikoolon. "Kaja haavatav," ja seejärel pärast, et seal on isegi rohkem. Teine semikoolon, bash-c :. Nii pikk lugu lühike, see koodirida on piisab mõjuvatel arvuti, mis on tundlikud midagi et sa tahad seda teha, sest seal on viga Bash mille kuigi Bash pidi lõpetama lugemist ridade käsu õigus seal peale kollane tekst 20-pluss aastat vana viga, Bash on tegelikult lugemine kaugemale, et semikoolon ja päris palju seda, mida ta ütles. Mis siis kaudselt Selle lõpuks? Ma ütlesin "echo tere" või "echo haavatav," aga mis siis, kui sa tegid midagi tegelikult pahatahtlik, nagu rm -rf mida sa ei pruugi on kunagi kirjutatud enne, ja ausalt öeldes sa ilmselt ei tohiks liiga kiiresti, sest sa võid teha palju kahju ta. Miks? rm mida teeb, muidugi? Eemaldab. * Tähendab mida? Kõik. Nii et see on n-ö jokker, nii et see tähendab, kustutada kõik jooksvasse kataloogi. r juhtub tähenda rekursiivne, mis tähendab, kui see, mida sa kustutamine on kataloog, ja seal sees on muid faile ja teisi katalooge, rekursiivselt sukelduda seal ja kustutada kõik, et. Ja -f on halvim neist kõigist. Kas keegi teab, mida -f tähendab siin? Force. Nii sunnib vahendeid, isegi kui see on halb mõte, seda küsimata mind Täiendava kinnituse. Niisiis, sa tead, me naerma , aga ausalt, ma ilmselt tüüp seda mitu korda päev, sest reaalsus on see kiireim viis kustutada terve hunnik asju. Aga isegi olen teinud mõningaid kahjustusi. Aga kui sa olid trikk arvuti määratlemisest mõned loll muutuja või funktsiooni nimetatakse x, kuid siis petab arvuti täidesaatva piiridest väljapoole, et funktsioon peale selle, semikoolon, siis võiks tõesti trikk arvuti arvesse täidesaatva midagi rm -rf või E-mail käsk või Copy käsk. Midagi sõna-sõnalt, mida saate teha koos arvuti, kas see kustutab faile, failide loomine, spämmi keegi, rünnata mõned server eemalt, kui saate seda väljendada käsu peale, siis saab trikk arvuti tehes. Nüüd sellest, mis on näide sellest, kuidas te võite seda teha? Noh, seal on palju arvuteid Internetis töötab Bash. Kõik meist Mac kasutajad on nende seas. Palju Linux serverite vahel neid hästi ja Unix serverite. Windows uuesti saab suhteliselt pigist arvatud juhul, kui olete installinud spetsiaalne tarkvara. Nüüd palju servereid eest Näiteks veebiserverite käitamine, ja tegelikult Linux on ehk Populaarseim operatsioonisüsteemi sõitma arvutid internetis mis teenindavad up veebilehti. Nüüd, kui me näeme hiljem aastal semester, kui saadate taotluse Sinu browser-- Chrome, Internet Explorer, whatever-- serveritega, Selgub, et kuigi sa lihtsalt kirjutada www.example.com, Teie brauser saadab sõnumi et see on natuke rohkem keerulisse, niimoodi. Aga teate natuke midagi imelikku. Esimesed kaks rida Ma pole kunagi varem näinud, kuid nad ei vaata eriti hirmutav. Aga teate, mida ma olen varastatud kolmandat rida siia. Kui paha poiss olnud, et saata sõnum Taoline tema arvuti haavatavasse Mac või haavatavamad Linux server, Naljakas on see, et Bash, Nii lihtne vähe käsureale on kõikjal ja on sageli Kasutatud sisuliselt täita sisu sõnumi, et ta saab. Ja selle loogika, saate trikk veebiserver, mistõttu saates midagi User-agent, mis tavaliselt peaks ütlema nime oma brauserisse. Kasutaja agent Chrome, User-Agent Internet Explorer, User-Agent Firefox, see on lihtsalt oma brauseri välja selgitada ise. Aga kui paha poiss väga kavalalt ütleb, mm-mm, ma olen ei ütle teile, Mis minu brauser on, Ma asemel läheb teile saata see segasena ilmega asi rm -rf * See, võite sõna otseses mõttes petta haavatav veebiserver internetis arvesse täidesaatva täpselt, et seal kustutate kõik failid. Ja ausalt öeldes, see ei ole isegi kõige hullem. Te ei saa midagi teha. Võiksite alustada laiali teenuste keelamise rünnak kui te läkitas Kogu kimpu veebiserverite ja siis oli neid kõiki laskuda jaoks Näiteks on Harvard.edu serverid, ja saate sortida bang kuradit välja neid poolt võrguliiklust, mis oli muidu vallandas see paha poiss. Nii, pikk lugu lühike, peaaegu kõik selles ruumis, kes omab Mac on tundlikud seda. Hõbedane vooder on see, et kui sa oled töötab veebiserver oma sülearvuti, ja kui sa oled tegelikult on seadistatud ta lubada midagi SSH sinna, sa oled tegelikult ohutu. See on haavatav, kuid seal ei ole üks üritab saada oma sülearvuti, nii saab omamoodi kindel. Kuid Apple varsti Uuendame fix selle eest. Maailma Linux on juba vabastatud arv määratakse Fedora ja Ubuntu ja muid versioone Linux, ja tõepoolest kui sa jooksed uuendatud 50 seadet, isegi, et liiga on ajakohastada ja parandada. Aga et liiga ei ole tegelikult on haavatavad, sest kui sa oled tinkered seadme ja teha oma sülearvuti avalikult kättesaadavaks Internetis, mis ei ole vaikimisi olete tegelikult häda olnud, sest kohta firewalling ja muud tehnikat. Aga see on äärmuslik näide viga et me oleme elanud sõna otseses mõttes 20 aastat, ja kes teab, kui keegi Kogu selle aja on teada seda? Ja tegelikult on see üks oluliste probleemidega, et me näeme hiljem semester turvalisus, on see, et just nagu reaalses maailmas, head poisid on hetkel kahjuks. Et hoida halvad poisid välja, me peame veenduge, et iga uks on lukus, et iga aken on turvaline, et iga sisenemise kohas kodus on turvaline hoida halvad poisid välja. Aga mida see paha poiss on teha, et tegelikult ohustavad teie kodus ja varastada sinult? Ta lihtsalt on leida üks lukustamata uks, üks katkine aken või midagi selles suunas, ning see on sama asi arvuti turvalisust. Me võime kirjutada miljoneid rida programmeerimine kood ja kulutada sadu või tuhandeid tundi üritavad seda parandada, kuid kui sa teed ainult üks viga õigsust, võite panna kogu süsteemi ja tõepoolest sel juhul kogu Interneti ja maailm ohus. Niisiis, kui soovite rohkem teada saada sellest, minge selle URL siia. Ei ole mingit vajadust võtta meetmeid täna, kui sa oled nende seas mugavam, et käinud oma veebilehe server, mille puhul teil peaks Tegelikult uuendada oma tarkvara. Ja ka see on tiitel kõnes ja nüüd paberi, et me oleme seotud kohta Muidugi kodulehel täna. See oli poolt kaaskodanike nimega Ken Thompson, kes oli nõustudes väga kuulus auhinna infotehnoloogia, ja ta andis selle kõne mõned aastad tagasi sisuliselt seda sama teemat. Küsid inimesed küsimus, peaks tõesti usaldus lõppkokkuvõttes tarkvara olete saanud? Näiteks on meil kõigil Enda kirjutatud programme, ja oleme kogunud neid rõkkama. Ja kui te teate, olete kirjutanud kõikides programmides CS50 kus on tagaukse kehvasti, ei tee et paha poiss, kui töötab oma programmi võiks üle võtta oma arvuti? Tõenäoliselt mitte, eks? Mario ja ahne ja Credit. Need kõik on üsna väikesed programmid. Sa pead olema üsna Halb, kui sa tegelikult tegi kogu oma arvuti haavatavaks pärast kirjalikult 10 või 20 rida koodi, või vähemalt teadlikud mõned Euroopa julgeolekut. Sest ma ütlen, et naljatades, aga me näeme täna ja sel nädalal, see on tegelikult tõesti väga lihtne olla halb ja teha veelgi lühike programmid haavatav. Aga nüüd, vähemalt, mõistma et küsimus küsitakse siin on umbes rõkkama in tõlkija. Miks ei ole meid usaldades rõkkama viimase kahe või kolme nädala jooksul? Kes on öelda, et igaüks, kes kirjutas rõkkama ei ole "kas" seisund on et sisuliselt süstida mõned nullid ja need igasse programmi koostades mis ei lase tal juurdepääs arvuti, kui sa magad ja sülearvuti kaas on avatud ja arvuti töötab? Eks ole? Meil on selline au süsteemi paremale Nüüd, kus me usume, et rõkkama on legit. Sa usaldad, et seade on legit. Sa kindel, et sõna otseses mõttes iga programmi Mac või PC on usaldusväärne. Ja seda lihtsat viga näitab, isegi kui see ei ole pahatahtlik, see on absoluutselt mitte tõenäoliselt olla. Nii et sa peaksid olema hirmul nagu põrgu. Ausalt öeldes, ei ole lihtne Lahendus sellele teisi kui omamoodi ühiskondlikku teadlikkust kasvavat keerukust et me oleme hoone peal meie arvutisüsteemid, ja kuidas üha haavatavamaks me võiks väga hästi olla. Nüüd seda öelnud, Breakout. Nii Breakout on probleem seatud kolm, ja Breakout on mäng Läinud et te võite meelde tuletada, kuid meie jaoks probleem seatud kolm, see võimaldab meil võtta asjad varundada piir nii, et kui me kirjutame programmide isegi Terminal aknas niimoodi, saame reaalselt sõita, lõpuks graafilise programmid ei erinevalt meil oli juurdepääsu Scratch. Nii et see on töötajate rakendamise Breakout, mis on just see telliskivi purustamine mäng, et sa liikuda oma mõla tagasi edasi, ja sa lüüa palli nende vastu, värvi tellised üleval. Nii et see toob meid omamoodi tagasi sinna, kus suutsime väga kiiresti Scratch ja nüüd C, rakendamiseks oma graafilised kasutajaliidesed. Kuid üle, et see probleemi set kujutab esimest milles me anname sa hunnik koodi. Ja tegelikult, ma toon selgesõnaline tähelepanu sellele, sest eriti neile vähem mugav, see probleem määrata, vähemalt esmapilgul, läheb tunne, oleme võtnud it up pügala. Sest me oleme teile, mõnede otsing ja sorteerimine probleeme pset, hunnik koodi, et me kirjutasime, ja paar kommentaari et öelda "teha" kus sa pead täitma lüngad. Nii et mitte liiga hirmutav, kuid see on esimene kord, me teisaldus sa kood, mis teil on vaja kõigepealt lugeda, mõista ja seejärel lisada ja täiendab seda. Ja siis koos Breakout, me ei kavatse teha sama, andes sulle mõnikümmend rohkem ridu kood, mis ausalt öeldes teile palju raamistiku mängu, kuid peatuda rakendamise tellised ja palli ja mõla, aga meil rakendada mõningaid muid funktsioone. Ja isegi, et esmapilgul jällegi eriti kui see on vähem mugav, Võib tunduda, eriti hirmuäratav ja sa arvad, et on nii palju uusi funktsioone peate wrap meelt ümber, ja see on tõsi. Kuid pidage meeles, et see on päris nullist. Koefitsiendid on, et sa ei kasuta kõiki puzzle tükki Scratch. Koefitsiendid on, et sa ei hooli pakkima meelt umbes neid kõiki sest selleks oli kiire pilgu mõista, oh, see on, mida ma teha saan selle puzzle tükk. Ja tõepoolest, probleemide seatud 3 spec, näitame me sulle dokumentatsiooniga, mis tutvustada teile mõned uued funktsioonid, ja lõpuks programmeerimine konstrueerib, mida kasutate. Tingimused, silmad, muutujate ja funktsioonide mis on identne mida me oleme näinud siiani. Nii et tõesti, mida me anname sa on mõned proovi kood, mis saate luua aknas , mis näeb välja mitte nagu see, ja lõpuks muuta see midagi väga meeldib see. Nii et ära CS50, arutada tööaega ja rohkem, ja lohutama selles, et kogus kood, mida on vaja kirjutada tegelikult ei ole kõik, et palju. Esimene väljakutse on lihtsalt aklimatiseeruda ennast mingi kood oleme kirjutanud. Kõik küsimused on pset3, Shellshock või muul viisil? Sihtrühm: Tundus läbimas Breakout et kood on peaaegu objektorienteeritud stiilis aga ma arvasin, et C oli objektorienteeritud programmi. SPEAKER 1: väga hea küsimus. Nii et vaadata läbi XXX koodi, koodi me kirjutas pset3, Neile, kes teavad, et Tundub, et see on vähe objektorienteeritud. Lühike vastus on, see on. See ühtlustamine, kuidas võiks teha objektorienteeritud koodi kasutades keeles nagu C, kuid see on ikka lõpuks menetluslikke. Puuduvad meetodite sees muutujad, nagu näete. Aga see meenutab seda. Ja me näeme, et funktsiooni uuesti kui saame PHP ja JavaScript lõpu poole semestri. Aga nüüd, ma arvan et kui vihje, mis on tulemas. Hea küsimus. Olgu. Nii Merge sort oli, kuidas me Vasakul asjad viimast korda. Ja ühendada sort oli jahe selles mõttes, et see oli nii palju kiiremini, vähemalt põhineb põgus testid me tegime eelmisel nädalal, kui, ütleme, mull Sorteeri valiku sorteerida, sisestamise omamoodi. Ja mis oli puhas liiga lihtsalt kuidas lühidalt ja puhtalt saab väljendada. Ja mida me ütleme, et see oli ülemine seondunud sõiduaega ühendamine sorteerida? Jah? Sihtrühm: n log n? SPEAKER 1: n log n, eks. n log n. Ja me tuleme tagasi, mida see tegelikult tähendab või kui see pärineb, kuid see oli parem kui see, mida sõiduaega et nägime mull valik ja sisestamine sort? Nii n ruudus. n ruudus on suurem kui see, ja isegi kui see ei ole päris selge, tean, et log n on väiksem kui n, nii et kui sa seda n korda midagi väiksem n see saab olema väiksem kui n ruudus. See on natuke intuitsiooni seal. Aga me makstud hind selle eest. See oli kiirem, aga teema, mis algas tekkima eelmisel nädalal oli see kompromiss. Ma sain parema tulemuse ajaliselt, kuid mida Kas ma pean kulutama muude poolt, et saavutada seda? Sihtrühm: Memory. SPEAKER 1: Ütle uuesti? Sihtrühm: Memory. SPEAKER 1: Memory, või ruumi üldisemalt. Ja see ei olnud super ilmselged meie inimestel aga meelde tuletada, et meie vabatahtlikud oli samm edasi ja samm- tagasi, nagu oleks seal massiivi siin, ja nagu oleks seal Teise massiivi siin, et nad võivad kasutada, sest me vajalikku kuhugi ühendada need inimesed. Me ei saanud lihtsalt vahetada neid olemas. Nii liita omamoodi finantsvõimenduse on rohkem ruumi, mis me ei pea koos teiste algoritmide kuid tagurpidi, et see on palju kiirem. Ja ausalt öeldes, reaalses maailmas ruumi Nende days-- RAM, kõvaketas space-- on suhteliselt odav, ja nii see on ole tingimata halb asi. Võtame pilgu, vähe rohkem metoodiliselt, mida me tegime ja miks me ütlesime see oli n log n. Nii et siin on kaheksa numbrid ja kaheksa vabatahtlike oli meil viimast korda. Ja esimene asi, mis ühinevad Sorteeri käskis meil teha oli mis? Sihtrühm: jagatakse kaheks. SPEAKER 1: Ütle uuesti? Sihtrühm: jagatakse kaheks. SPEAKER 1: jagatakse kaheks, paremale. See on väga meenutab telefoniraamatust jaga ja vallutada üldisemalt. Nii et me vaatasime vasakule poole. Ja siis, kui me ütlesime, sort vasakul poolel elementide mida me järgmiseks öelda? Sorteeri vasakul pool vasakut pool, mis võimaldas meil, Pärast jagamisel kaheks keskendub neljale ja kaks. Kuidas sa saad nimekirja nüüd kollane, suurus kaks, kasutades Merge järgi? Noh jagada see pooleks, ja sorteeri vasakul pool. Ja see oli koht, kus asjad sain natuke loll lühidalt. Kuidas sa saad loend, mis on kohta suurus ühe, nagu see number neli here? See on järjestatud. Sa oled teinud. Aga kuidas sa saad nimekirja suurus ühe kui see on number kaks? Noh, sama asi, kuid nüüd, mis oli Kolmas ja oluline samm Merge järgi? Sul oli ühendada vasakul pool ja paremal pool. Ja kui me tegime, et me vaatasime neli, me vaatasime kaks. Me otsustasime kõik korras, ilmselt kaks on esimesel kohal, Niisiis panime kaks oma koht, millele järgnes neli. Ja nüüd on selline tagasikerimine, ja see on omamoodi iseloomulik algoritmi nagu Merge Sort, tagasi kerida mälus. Mis oli järgmisel real loo? Mida ma peaksin keskenduma edasi? Paremal pool vasakul poole, mis on kuus kuni kaheksa. Lubage mul samm selle kaudu ilma belaboring punkti liiga palju. Kuus kuni kaheksa, siis kuus on sorteeritud, kaheksa sorteeritakse. Liita need kokku niimoodi, ja nüüd on järgmine suur samm on muidugi sorteerida õige pool Esimene samm selle algoritmi. Nii et me keskendume üks, kolm, seitse, viis. Seejärel keskendutakse vasakul pool. Vasakul pool, et õige pool seda ja seejärel ühendada ühe ja kolm. Siis paremal pool, siis vasakule poole seda, siis parem pool sellest. Merge seda, ja nüüd, mida etapp jääb? Merge suur vasakul pool ja suur paremale poole, nii et üks läheb sinna, siis kaks, siis kolm, siis neli, siis viis, siis kuus, siis seitse, siis kaheksa. Nii et nüüd, miks on see lõpuks paljastavad, eriti siis, kui n ja logaritmid rohkem üldiselt pigem põgeneda sa, vähemalt viimastel mälu? Noh, teate kõrgust see asi. Meil oli kaheksa elemente, ja me jagatakse see kahega, kaks, kaks. Nii logige baasi kaks kaheksast annab meile kolm. Ja usu mind, et kui natuke udune sellel. Aga log alusega kaks kaheksa kolm, nii me oleme teinud kolm kihti ühendamiseks. Ja kui me ühendada elemente, kui palju elemente Kas me vaatame iga nende ridade? Kokku n, eks? Kuna ühendada esirea, kuigi me tegime seda tükkhaaval, me lõpuks puudutanud iga number üks. Ja teises reas, et ühendada need nimekirjad suurus kaks, meil oli puudutada iga element ühe korra. Ja siis siin tõesti selgelt viimases reas, meil oli puudutada iga nimetatud elemendid kord, kuid ainult üks kord nii siin on siis meie n log n. Ja nüüd lihtsalt teha asju veidi ametlikum hetkeks, kui te olid nüüd analüüsida seda juures omamoodi kõrgema ja proovida, et otsustada, ka kuidas võiks minna umbes väljendades sõiduaega Selle algoritmi lihtsalt vaadates seda mitte kasutades kunstlik näide? Noh, kui palju aega sa ütleksid samm niimoodi kollane võtaks, kui n <2 edasi-tagasi? See on suur O mida? Nii et ma näen ühte, nii et üks samm, võibolla kaks sammu, sest see on kui ja siis tagasi, kuid see on konstantset aega, eks? Nii me ütlesime O (1), ja see on kuidas ma väljendada seda. T, lihtsalt sõiduaega. n on suurus sisendi nii T (n), lihtsalt fancy viis öelda jooksvate aeg antud sisendi suuruse n saab olema järjekorras konstantse aja O (1). Aga muidu, mis sellest? Kuidas te väljendada töötamise aeg see kollane joon? T, mis? Võite liiki petta siin ja mu küsimusele vastata tsükliliselt. Nii et kui töötab aeg üldiselt me ​​lihtsalt öelda, on T (n). Ja nüüd sa oled omamoodi punting siin ja ütles ka, justkui vasakule poole, ja siis saad õige pool. Kuidas võiks me sümboolselt esindama töötamise aeg see kollane joon? T, mis? Mis suurus sisend? n üle kahe. Miks ma ei lihtsalt öelda, et? Ja siis see on teine ​​T (n / 2) ja siis uuesti, kui ma ühendada kaks sorteeritud pooleks, kui palju elemente ma lähen on puudutada kokku? n. Nii et ma ei saa väljendada seda, lihtsalt olla selline fancy, kui jooksvat aega üldiselt. T (n) on just töötamise aeg T (n / 2), pluss T (n / 2), vasakule poole ja paremale poole, pluss O (n), mis on ilmselt n samme aga võib-olla, kui ma kasutan kahte sõrme, see on kaks korda nii palju samme, kuid see on lineaarne. See on teatud arv samme see tegur n, nii me saame väljendada seda kui see. Ja see on koht, kus nüüd me punt kuni tagasi meie keskkooli matemaatika õpik me oleme selle kordumise lõpuks jõuab võrdub see, n korda log n, kui seda tegelikult välja matemaatika ametlikumalt. Nii et see on lihtsalt kahest aspektist. Üks arvuliselt koos kodeeritud tüüpilise näite kasutades kaheksat numbreid ja rohkem üldiselt vaadata, kuidas me sinna jõudsime. Aga mis on tõesti huvitav siin on jällegi see mõiste jalgrattaga. Ma ei kasuta jaoks silmuseid. Ma olen selline määratlemine midagi nii ennast, mitte ainult käesoleva matemaatiline funktsioon, vaid ka selle pseudo kood. See pseudo kood on rekursiivne et selle kaks rida sisuliselt ütleb, et minna kasutada ise lahendada väiksemaid probleem väiksuse ja siis uuesti ja uuesti ja uuesti, kuni me nikerdama see alla selle nn aluspõhimõtted. Nii et olgem tegelikult teha rohkem kaalukaid kaasavõetavateks selle järgmiselt. Lubage mul minna gedit ja võtta mõningaid tänapäeva lähtekoodi, eriti see näide siin. Sigma 0, mis ilmselt lisab numbreid ühest n. Nii et vaatame, mis on tuttav ja võõras siin. Esiteks on meil paar hõlmab nii midagi uut. Prototype. Olen natuke udune kohta Selle pärast paar päeva, kuid mida me öelda prototüüp funktsioon on? Sihtrühm: [kuuldamatu]. SPEAKER 1: Mis see on? Sihtrühm: Me kuulutab selle välja. SPEAKER 1: Me kuulutab selle välja. Nii et sa õpetad rõkkama, hei, tegelikult rakendatakse seda veel, kuid kuskil seda pilti, arvatavasti, läheb funktsiooni nimetatakse mida? Sigma. Ja see on ainult lubadus, et see saab välja nägema selline. See saab võtta täisarv kui input-- ja võin olla selgem ja öelda, int n --and see läheb tagasi int, kuid semikoolon vahendid, mm, ma saan ümber rakendada seda veidi hiljem. Jällegi rõkkama on loll. See on ainult kavatse tea, mida sa ütled seda ülevalt alla, nii et me peame vähemalt anda see vihje, mis on tulemas. Nüüd vaatame, peamine siin. Olgem keri siin ja vaata, mis peamine teeb. See ei ole nii pikk funktsiooni ja tegelikult konstrukt siin on tuttav. Kinnitan muutuja n, ja seejärel Ma vaevama kasutaja ikka ja jälle jaoks positiivne täisarv kasutades getInt, ja ainult väljumist läbi selle silmuse kui kasutaja on järginud. Kas Kuigi oleme harjunud vaevama kasutaja niimoodi. Nüüd see on huvitav. Kinnitan int nimetatakse "vastus." Ma määrata selle tagastamise väärtus ning funktsiooni nimetatakse "sigma." Ma ei tea, mida see veel, kuid Mäletan, kuulutatakse ta hetk tagasi. Ja siis ma möödaminnes Väärtus, mille kasutaja tipitud, n, ja siis ma aru vastus. Noh olgem liikuge tagasi hetkeks. Lähme edasi sellesse kataloogi, teha Sigma 0, ja tegelikult programmi käivitada ja vaata, mis juhtub. Nii et kui ma edasi minna ja joosta Selle programmi ./sigma-0, ja ma kirjuta positiivne täisarv nagu kaks, Sigma, nagu Kreeka sümbol viitab, on lihtsalt läheb küündivad kõiki numbreid null kuni kaks. Nii 0 pluss 1 pluss 2. Nii et see peaks loodetavasti annab mulle 3. See on kõik see teeb. Ja samamoodi, kui ma saan seda uuesti ja ma annan see number kolm, see on 3 pluss 2, nii et see 5 + 1 peaks mulle 6. Ja siis, kui ma saan tõesti hull ja hakake suuremad numbrid, see peaks mulle suuremaks summad. Nii et see on kõik. Mis siis sigma välja näeb? Noh, see on üsna lihtne. See, kuidas me võiksime rakendanud see on viimase paari nädala jooksul. "Väravavahi" saab olema tagasipöördumine tüüp. Sigma on nimi, ja see võtab Muutuja m asemel n. Ma muudan selle üleval. Siis on see lihtsalt mõistuse kontroll. Eks me näe, miks hetkel. Nüüd Kinnitan muu muutuja, mis summa, initsialiseerida see nulli. Siis ma pean seda loop iterating ilmselt selgust, alates i = 1 kuni = m, mis on olenemata kasutaja tipitud, ja siis ma juurdekasvu summa niimoodi. Ja siis tagasi summa. Nii paar küsimust. Üks, ma väita, minu kommentaar, et see väldib riski lõputu silmuse. Miks möödaminnes negatiivne arv esile kutsuda potentsiaalselt lõputu silmuse? Sihtrühm: Sa ei jõua kunagi m. SPEAKER 1: Mitte kunagi jõuda m. Aga m on vastu võetud, nii et olgem kaaluda lihtsa näite. Kui m on möödas poolt kasutaja on negatiivne. Sõltumata peamine. Main kaitseb meid Ka see, et ma olen lihtsalt on tõesti anal sigma ka veenduda, et sisend ei saa olla negatiivne. Nii et kui m on negatiivne, midagi negatiivsed. Mis siis juhtub? Noh, ma ei kavatse saada vormindatud ühe, ja siis ma ei kavatse olla väiksem või võrdne m? Olge valmis. See oli-- ärgem, olgem NIX see lugu. Ma ei küsinud seda küsimust, sest risk, et ma olen vihjates ei juhtu, sest ma ei alati saab olema suurem kui-- OK, Ma tõmbuda, et küsimus. OK. Olgem keskenduda ainult see osa siin. Miks ma kuulutada mõned väljaspool loop? Teatis line 49 ma olen deklareeritud i sees silmus, kuid online-48 Olen deklareeritud mõned väljaspool. Jah. Sihtrühm: [kuuldamatu]. SPEAKER 1: Muidugi. Nii et ennekõike ma kindlasti ei tahan kuulutada ja initsialiseerida summa nulli sees silmus iga iteratsiooni sest see oleks selgelt lüüa eesmärk summeerida numbrid. Ma hoiaks muutes raha tagasi nulli. Ja ka, mis on veel üks kauge Põhjus sama disain otsus? Jah. Sihtrühm: [kuuldamatu]. SPEAKER 1: Täpselt. Ma tahan kasutada seda väljaspool loop liiga, mida joon? On 53. Ja põhineb meie rusikareegel mõnest loenguid tagasi muutujad scoped tõesti, et looksulg, mis hõlmavad neid. Nii et kui ma ei deklareeri summa sees Nende välimise looksulg, Ma ei saa seda kasutada vastavalt 53. Teisisõnu, kui ma tunnistada summa sisse, või isegi Silmus, ma ei saanud seda kasutada 53. Muutuja tõhusalt läinud. Nii paar põhjust seal. Aga nüüd lähme tagasi ja vaata, mis juhtub. Nii sigma saab nn. See lisab kuni 1 pluss 2 või 1 pluss 2 pluss 3 ja seejärel tagastab väärtuse, salvestab selle vastuse ja printf siin Sellepärast ma näen ekraanil. Nii et see on see, mida me kutsume iteratiivne lähenemist, kus iteratsiooni lihtsalt tähendab silmust kasutades. For loop, samas silmus, Do Kuigi loop, siis midagi jälle ja uuesti ja uuesti. Aga sigma on selline puhas funktsiooni et ma võiks rakendada seda erinevalt. Aga see, mis lihtsalt olla selline lahe, las ma tõesti vabaneda on palju tähelepanu kõrvale kuna see funktsioon on tegelikult üsna lihtne. Olgem nikerdama maha lihtsalt oma nelja sisekihte ja vabaneda kõik Kommentaarid ja lokkis traksid. See on omamoodi Häkellyttävä alternatiiv rakendamist. Olgu, võib-olla ei pahanda puhub, aga see on selline seksikam, eks, vaadata seda nii palju lühidalt. Vaid neli rida koodi, Ma pean kõigepealt selle meelerahu kontrolli. Kui m on väiksem või võrdne null, Sigma ei ole mõtet. See on ainult pidi olema Sel juhul positiivse numbrid, nii et ma olen lihtsalt läheb tagasi nulli meelevaldselt nii et meil on vähemalt mõned nn aluspõhimõtted. Aga siin on ilu. Kogu see mõte, lisades numbritega 1 kuni n või m sel juhul saab teha sellist kulgeb Buck. Noh, mis on summa, 1 m? Noh, sa tead, mida? See sama summa m pluss summa 1 kuni m miinus 1. Noh tead mis? Mis sigma m miinus 1? Noh, kui sa omamoodi jälgida seda loogiliselt, see on sama nagu m miinus 1 pluss sigma m miinus 2. Nii saate liiki lihtsalt-- see on nagu, kui sa oled lihtsalt üritab tüütama sõbrale ja nad küsivad sult sa omamoodi vastata küsimusele, te võite seda hoida kulgeb Buck. Aga mis peamine on see, et kui te ei hoia tegemise küsimuse väiksemaid ja väiksemate, sa oled ei küsi, mis on sigma n, mis on sigma kohta n, mis on sigma n? Sa küsid, mis on Sigma n, mis on sigma n miinus 1, mis on sigma n miinus 2? Lõpuks oma küsimus hakkab muutuma mis? Mis on sigma ühe või null, mõned väga väike väärtus, ja niipea kui saada, et su sõber, te ei kavatse küsida sama küsimust uuesti, sa oled lihtsalt kavatse öelda, oh see on null. Me oleme valmis mängima selline loll tsükliline mängu. Nii rekursioon on tegu programmeerimine Funktsiooni kutsudes ise. See programm, kui kompileerida ja tööle, on kavatse käituda täpselt samamoodi, aga mis peamine on see, et sees ning funktsiooni nimetatakse sigma on rida koodi kusjuures et me nimetame end, mis on tavaliselt halb. Näiteks, mis siis, kui ma esimest korda koostas selle, nii et sigma-- teha sigma 1 ./sigma-1. Positiivne täisarv, siis 50 1275. Mida funktsioon tundub olema, mis põhineb ühel test, õige. Aga mis siis, kui ma saan natuke ohtlik kustutada niinimetatud baas juhul ja lihtsalt öelda, hästi ma lihtsalt tegemise seda keerulisem see on. Ütleme lihtsalt arvutada sigma võttes m ja seejärel lisades Sigma m miinus üks? Noh, mis juhtub siin? Lähme välja suumida. Olgem kompileerida programmi salvestada, kompileerida programmi ja siis valmis ./sigma-1 Suurendamine sisestage positiivne täisarv palun, 50. Kui paljud teist on valmis et fess kuni näeme, et? OK. Nii et see võib juhtuda mitmeid põhjuseid, ja ausalt öeldes sel nädalal oleme umbes teile rohkem neist. Kuid sel juhul proovida mõelda tagasi mis oleks võinud juhtuda siin? Segmenteerimine süü, me ütles eelmisel ajal, viitab segmendi mälu. Midagi halba ei juhtunud. Aga mis oli see mehaaniliselt, mis läks viltu siin, sest mu eemaldamine Selle niinimetatud baas juhul kui ma tagasi kodeeritud väärtus? Mis sa arvad valesti läks? Jah. Sihtrühm: [kuuldamatu]. SPEAKER 1: Ah. Hea küsimus. Nii suuruse arvu et olin summeerida sain nii suur, et see ületas suurus mälu. Hea mõte, aga mitte oluliselt läheb põhjustada krahhi. See võib põhjustada täisarv overflow, kus bitti lihtsalt flip üle ja siis viga on tõesti suur number nagu negatiivne arv, kuid mis ise ei põhjusta krahhi. Sest lõpuks päev int on veel 32 bitti. Sa ei kavatse kogemata varastada 33. bit. Aga hea mõte. Jah. Sihtrühm: [kuuldamatu]. SPEAKER 1: meetod kunagi seiskumist ja tõepoolest see kutsub ennast jälle ja uuesti ja uuesti ja uuesti ja uuesti, ja mitte ükski neid ülesandeid kunagi lõpetada, sest nende ainus rida kood nõuab iseenda ja jälle ja jälle. Ja mis on tegelikult siin toimub, ja nüüd me saab omamoodi teha seda piltlikult. Lubage mul minna üle pilt hetkeks. See on pilt, mis lõpuks täpsustada üksikasjalikumalt, mis toimub sees oma arvuti mällu. Ja selgub, et põhjas seda pilti on midagi, mida nimetatakse pinu. See on patakas mälu, patakas RAM, et lihtsalt kasutada igal ajal funktsiooni nimetatakse. Iga kord, kui sa, programmeerija, helistada funktsioon, operatsioonisüsteemi, nagu Mac OS, Windows või Linux, haarab kamp baiti, ehk paari kilobaiti, võibolla paar megabaiti mälu, ulatab neile teile ja võimaldab sa käivitada oma funktsiooni abil olenemata muutujad, mida vajate. Ja kui te siis helistada teise funktsioon ja teine ​​funktsioon, saad veel tükk mälu ja teise viilu mälu. Ja tõesti, kui need rohelised plaadid alates Annenberg esindavad seda mälu siin on, mida juhtub esimesel kord, kui helistada funktsioon sigma. See on nagu pannes aluse niimoodi kohta, mis on algselt tühi pinu. Aga siis, kui salv nimetab ennast niiöelda, kutsudes teise astme Sigma, mis on nagu paludes operatsioonisüsteemi ooh, vaja natuke rohkem mälu, anna mulle see. Ja siis ta saab kuhjatakse peal. Aga mis peamine on see, et Esimene plaat on ikka veel seal, sest ta tugines selle teise salve. Nüüd vahepeal sigma helistada sigma, see on nagu nõuavad rohkem mälu. Gets kuhjatakse siin. Sigma helistada sigma, see on teine salve, et saab kuhjatakse siin. Ja kui sa ikka seda teed, lõpuks, millist kaarti selle visuaalne selle diagrammi, mis hakkab juhtuda virna? See saab ületada summat mälu arvutil on. Ja niipea, kui see roheline plaat üle horisontaaljoone üle korstna ja üle selle sõna hunnik, mis me tuleme tagasi tulevikus mis on halb. Hunnik on erinevad segment mälu ja kui sa lased neid plaate kuhi ja vaia, sa lähed, et ületada oma segmendi mälu ja programm on tõepoolest kukku. Nüüd kui kõrvale, selle idee kohta rekursioon, seega selgelt põhjustada probleeme, kuid see ei ole tingimata halb asi. Kuna kaaluda pärast kõik, kuidas-- ja võibolla see võtab veidi harjumist et --how elegantne või kuidas lihtsate et rakendamise sigma oli. Ja me ei kavatse kasutada rekursioon kõik, et palju on CS50, kuid CS51, ja tõesti iga klassi kus sa manipuleerida andmestruktuurid nagu puud või pere puud, et mõned hierarhia, see on super, super kasulik. Nüüd, kui kõrvale, nii et sa kui ambitsioonikaid infotehnoloogid tunnevad mõned Google sees nalja, kui te lähete Google ja sa näed seda, mida on mõiste, ütleme, rekursioon, siseneda. Uh-huh. Nagu kõrvale, ma tõmmata paar. See oli nagu 10 minutit Viivitamine hommikul. Kui te ka Google "viltu" teade kallutades oma pead slightly-- ja siis see üks on võib-olla Kõige jõle kõik kuna keegi veetis nagu nende päev rakendamisel mõned aastad ago-- tule. Oh, Oota- see on viga. Nii töötab üks Maailma suurim veebilehed need tobedalt lihavõttemunad. Nad ilmselt tarbima nontrivial arv ridu koodi just nii, et meil on natuke nalja asjad niimoodi. Aga vähemalt nüüd sa mõned nendest inside nalju. Nüüd võtame pilk mõned White Lies oleme rääkinud hilja, ja alustada koorida tagasi mõned kihid tehniliselt nii et sa tõesti aru mis on kestnud ja te saate aru, mõned ohud, nagu Shellshock, et on nüüd hakanud muutuma esirinnas igaühe tähelepanu, vähemalt meedias. Nii et siin on väga lihtne ülesanne mis tagastab midagi, tühine. Tema nimi on swap. See võtab kahe muutuja ja ta naaseb midagi. Võtab ja b. Nii kiire demonstratsioon. Tõime need üles. Me võiksime sama hästi võtta veidi murda siin hetkeks ja on natuke midagi juua. Kui keegi ei pahanda ühendab mind siia hetkeks. Kuidas sa maroon särk? Tule. Lihtsalt üks täna. Aitäh, kuigi. Olgu, ja meil on tulemas, kes siin on? Mis su nimi on? SPEAKER 4: Laura. SPEAKER 1: Laura. Tule. Nii Laura, väga lihtne ülesanne täna. Meeldiv kohtuda yo. Olgu. Nii et meil on mõned piima siia ja meil on mõned apelsinimahl siia ja mõned tassid, et me laenatud Annenberg täna. SPEAKER 4: Laenatud. SPEAKER 1: Ja läheb minna ja teile pool klaasi seda. Olgu. Ja me anname teile pool klaas piima. Oh, ja just nii, et saate mäleta, mis see oli nagu, Mulle meenus, et tuua see üles ja täna. Okei. Kui sa ei pahanda, vaatame, me ei pane neid üle oma prillid kui soovite. Sellest saab maailma Laura silmis. Olgu. Nii et teie eesmärk, kuna kaks tassi vedel siin, piim ja apelsinimahl, on swap kaks sisu nii, et apelsinimahl läheb piim tassi ja piim läheb apelsinimahla tassi. SPEAKER 4: Kas ma saan veel ühe tassi? SPEAKER 1: ma olen nii rõõmus, et sa palusid, kuigi see oleks olnud palju parem kaadrid Kui te ei palunud. Aga jah, me võime pakkuda sulle kolmandat tass, mis on muidugi tühi. Olgu. Nii swap sisu olemas. Väga kena. Väga hea. Sa teed seda märkimisväärselt hoolikalt. Ja kolmas samm. Olgu. Suurepärane. Suur aplaus oleks hea Laura. Olgu. Meil on väike jumalagajätt kingitus teid, kuid lubage mul võtta neid. Tänan sind nii palju. Nii lihtne näide, kuigi näidata, et kui sa seda teed tahan vahetada sisu kahest konteinerist, või olgem nimetame neid muutujaid, teil on vaja mõned ajutine ladustamine lavastada üks sisu nii et tegelikult võite seda teha swap. Nii et tõesti, see lähtekoodi siia üles C on tüüpiline just nii. Kui apelsinimahla ja piim oli b, ja me tahtsime vahetada kaks, võid proovida midagi loomingulist valades ühest teise, kuid ilmselt ei lõpuks eriti hästi. Ja nii me kasutada kolmanda tassi, kõne see tmp, T-M-P, kokkuleppeliselt ja pane sisu ELT selles, siis vahetada üks tass, Seejärel pange ELT sisse originaal tassi, seega saavutamiseks, täpselt nii, nagu Laura tegi, swap. Teeme just nii. Lubage mul minna ja avada kuni näiteks see tegelikult nn "no vaheta ", sest see ei ole nii lihtsalt teha, kui võite arvata. Nii et selles programmis, märkate, et Ma kasutan stdio.h, meie vana sõber. Mul on prototüüp swap seal, mis tähendab selle rakendamine on ilmselt allapoole, ja vaatame, mis see peamine Programmi saab teha minu jaoks. Ma esimest kuulutada int x saab üks ja int y saab kaks. Nii et mõtle neist kui ELT ja piima, vastavalt. Ja siis ma lihtsalt printf öeldes x on see ja y on see, just nii ma ei visuaalselt näha, mis toimub. Siis olen printf väites et ma vahetada kaks, ja siis ma välja printida väidavad, et nad vahetasid, ja ma välja printida x ja y uuesti. Nii et siin on swap on täpselt, mida Laura tegi, ja täpselt, mida nägime ekraan hetk tagasi. Nii et lähme edasi ja väga pettunud. Tee ei swap ja joosta ei swap, suumides väljund siia. Sisesta x on 1, y 2, vahetades vahetaks. x on endiselt 1 ja y on endiselt 2. Nii et kuigi ausalt öeldes, see näeb täpselt nagu, kuigi tehniliselt, mida Laura tegi, ei tundu töö. Miks see nii on? Noh, tuleb välja, et kui me kirjutame programmi niimoodi , mis on nii põhi-, siin esile, ja siis teine ​​funktsioon, nagu swap, siin esile, mis see nõuab, maailma tundub veidi midagi Nende plaate hetk tagasi. Kui peamine esimene saab nimetada, see on nagu paludes operatsioonisüsteemi natuke mälu ja kõik kohalikud muutujad nagu x ja y, et peamine on, ja nad lõpuks sinna. Kuid kui peamine kõnesid vahetada ning peamised möödub vahetada kaks argumenti a ja b, apelsinimahl ja piim, see ei meeldi jagab apelsinimahl ja piim Laura. Mis arvuti teeb, on see läbib koopiad apelsinimahl ja koopiate piima Laura, et mis lõppkokkuvõttes sees selle salve on väärtus üks ja kaks või ELT ja piima, kuid nende koopiad, nii, et selles kohas lugu, seal on ELT ning piima iga plaate. Seal on üks ja kaks Kõigis neis plaate, ja swap funktsiooni tõepoolest töötab. See on nende vahetamisest sees Teise tähtsaim salve, kuid vahetada ei mõjuta. Ja põhinevad vaid mõned põhiprintsiip me oleme rääkis enne, ja tõepoolest vaid paar minutit tagasi, mida võib selgitada, miks muutuvad ja b sees swap puudub toime x ja y, kuigi Ma veetsin x ja y swap funktsiooni. Mis on siin võtmesõna, mis võib lihtsustatult seletada? Ma arvan, et ma kuulsin, et see siin on? Sihtrühm: Return. SPEAKER 1: Return? Ei tagasta. Lähme koos ühe teise. Mis see on? Sihtrühm: [kuuldamatu]. SPEAKER 1: OK, nii return-- saime tagasipöördumine tööd lugu, kuid seal on isegi lihtsam seletus. Sihtrühm: Reguleerimisala. SPEAKER 1: Reguleerimisala. Ma võtan ulatust. Nii ulatus, mäletan, kui meie x ja y kuulutatud. Nad kuulutatud sees Peamiste siin üleval. ja b, vahepeal on tõhusalt deklareeritud sees swap, mitte päris looksulg kuid siiski üldises ala swap. Ja nii tõepoolest ja b olemas ainult selles salves alates Annenberg see teine ​​patakas kood. Nii et me tõesti muutumas koopia, kuid see ei ole tõesti kõik, mis kasulik. Võtame pilk Selle veidi madalamale tasemele. Ma lähen tagasi Allikas Directory ja ma lähen esimesena suumimiseks siin ja lihtsalt kinnitada, et ma olen selles suurem terminali aknas Programmi ikka käituvad niimoodi. Oletame nüüd, et see ei ole tahtlik. Ilmselgelt tahtsin vahetus tööd, nii et tundub, nagu putukas. Nüüd ma võiks alustada lisades palju printf on minu kood, väljatrükk x siia, y üle siin, siin, b siia. Aga ausalt öeldes, see on ilmselt, mida olete teinud paar nädalat nüüd tööaega ja kodus töötades aasta psets püüdes leida mõned vead. Aga näete, kui te pole seda juba teinud, et probleem seatud kolm tutvustab teile et käsu nimeks GDB, kus GDB, GNU siluri, ise on terve hunnik funktsioone, mis tegelikult mõistkem olukordades meeldib see, kuid rohkem compellingly, lahendada probleeme ja leida vigu. Nii et ma teen seda. Selle asemel, et ./noswap, ma olen selle asemel jooksegi GDB ./noswap. Teisisõnu, ma saan oma Programm ei ole Bash, et meie uus sõber täna. Ma saan oma Programmi noswap sees selle teise programmi nimega GDB, mis on siluri, mis on programm, mis on mõeldud selleks, et sa inimene leida ja eemaldada putukaid. Nii et kui ma tabanud Jooks siin, seal jõle summa teksti et sa tõesti ei pea lugema. See on sisuliselt häiritud alates kiire, mis Ma lähen lüüa kontroll-L ärkama ülaosas on. See on GDB kiire. Kui ma tahan, et programmi käivitada kohe, kui see väike cheat sheet tänapäeva slaid näitab, Run on esimene käske, mida me eesmärk on tutvustada. Ja ma lihtsalt kirjutada eel siin sees GDB, ja tõepoolest see jooksis mu programmi. Nüüd on mõned täiendavad väljundid ekraani niimoodi, aga see GDB lihtsalt anal ja ütleb meile, mis toimub. Sa tõesti ei pea muretsema umbes need andmed kohe. Aga mis on tõesti lahe kohta GDB, kui ma teen seda again-- Kontroll-L puhastab screen-- lase mul minna ees ja tüüp "murda peamine," seega, kui ma vajuta Enter, milles mis nn murdepunkti juures noswap.c, real 16, mis on kui GDB arvasin, mu programm tegelikult on minu funktsioon tegelikult on. Seda me eirame nüüd aga see aadress mällu konkreetselt selle funktsiooni. Nüüd, kui ma tüüpi joosta, teate, mis on lahe siin. Minu programm katkeb line I ütles GDB peatamiseks täitmise juures. Nii et ma ei pea nüüd muuta oma koodi, lisada mõned printf-ndatel, kompileerida see, kordamisega see, muuta, lisada mõned printf-ndatel, salvestada, kompileerida see, käivitage see. Ma ei saa lihtsalt kõndida läbi minu programm samm-samm-sammult inimesel kiirus, mitte Intel-sees selline kiirus. Nüüd teate selle rea Siia ilmub, ja kui ma lähen tagasi minu programmi gedit, märgata, et see on tegelikult Kõige esimene rida koodi. On line 16 gedit. On line 16 jooksul GDB, ja isegi kuigi see musta ja valge pesaga ei ole kaugeltki nii kasutaja sõbralik, see tähendab, et liin 16 ei ole täidetud veel, kuid see on umbes olema. Nii tõesti kui ma tüüpi print x, mitte printf, lihtsalt print x, Ma saaksin võlts väärtus on null, sest x ei ole vormindatud veel. Nii et ma lähen järgmisena, või kui sa tahad olla väljamõeldud, vaid n järgmisel. Aga kui ma järgmisena siseneda, nüüd teate see liigub edasi line 17. Seega loogiliselt, kui ma olen täide line 16 ja nüüd kirjuta print x, Mida ma peaksin vaatama? Üks. Ja nüüd on see küll segadusse. $ 2 on lihtsalt fancy viis, kui te tahan viidata, et väärtus hiljem sa ei saa öelda "dollar kirjutama kaks." See on nagu tagasi alles. Aga nüüd, lihtsalt ignoreerida. Mis huvitav on see, mida on paremal võrdusmärki. Ja nüüd, kui ma järgmisena uuesti ja printida y, ma näha 2. Võin ka nüüd printida x taas, ja ausalt öeldes, kui ma saan natuke segaduses, kus ma olen, ma ei kirjuta nimekirjast nimekirja ja lihtsalt vaadata mõned kontekstis ümber hetkel ma olen ka tegelikult. Ja nüüd ma ei kirjuta Järgmise, ja seal x on 1. Nüüd ma järgmisena. Oh, y 2. Ja veel, see on segane, sest GDB väljund on segatud oma toodangut. Aga kui te meeles pidama, mida põrkav edasi-tagasi oma koodi või milles see välja poole kõrval olla, siis saad näha, et tegelikult ma olen lihtsalt astutakse läbi minu programmi. Aga teate, mis juhtub, sõna otseses mõttes. Siin on line 22. Lubage mul minna üle, mis liigub 23 ja kui ma print x nüüd, veel üks. Ja kui ma printida y nüüd, veel üks. Nii et see ei ole kasulik kasutada. Nii et olgem uuesti seda. Lubage mul minna tagasi üles top ja tüüp run uuesti. Ja ta ütleb programm mis kuramuse silumisel on alanud juba, alustas algusest peale. Jah, teeme seda jälle. Ja seekord teeme järgmise, Next kõrval kõrval, kõrval, kuid nüüd asjad huvitavad. Nüüd ma tahan astuda swap, nii et ma ei kirjuta järgmine. I tüüpi samm, ja nüüd märgata hüppas mulle noswap.c line 33. Kui ma lähen tagasi gedit, mis on line 33? See on esimene tegelik koodirida sees swap. Mis on kena, sest nüüd ma saan liiki tuhnima ja uudishimulik selle kohta, mis toimub tõeliselt olemas. Lubage mul printida tmp. Vau. Miks tmp on mõned hull, võltsi prügi väärtus? Sihtrühm: See ei ole vormindatud. SPEAKER 1: See ei ole vormindatud. Ja tõepoolest, kui sa jooksed programmi sulle antakse terve hunnik mälu operatsioonisüsteemi, kuid sa pole vormindatud tahes väärtusi, nii et mida iganes bitti oled näeme siin, kuigi see see hull suur negatiivne number, vaid seda, et need on jäänuseid mõne varasema kasutuse, et RAM, kuigi ma ei ole ise vaja seda veel. Nii et nüüd ma lähen edasi minna ja tüüp Järgmise, ja kui ma nüüd kirjuta print tmp, Mida ma peaksin vaatama? Ükskõik väärtus oli on esimene argument, vaid nagu x oli esimese asi on vastu võetud, nii ja x peaks olema sama, nii printida tmp peaks printida mulle üks. Niisiis, mida te näete probleemi komplekt kolm on juhendaja kehvasti on GDB, kuid mõistab, et see on algusest on pilk vahend, mis tegelikult aidata teil lahendada probleeme nii palju efektiivsemalt. Mida me oleme lõpuks teeme kolmapäeval on alustada koorida tagasi paar kihti ja kõrvaldada mõned abirattad. See asi, mida nimetatakse stringi Me oleme mõnda aega kasutatud, me aeglaselt ära võtta sinult ja hakata rääkima midagi esoterically tuntakse paalia * kuid me teeme seda kena ja esmalt ettevaatlikult, kuigi vihjeid, nagu neid kutsutakse, on võimalik teha mõningaid väga halbu asju, kui kuritarvitanud, vaadates veidi claymation alates meie sõber Nick Parlante Stanfordi Ülikooli professor arvuti teadust, kes pani koos Selle eelvaate ja mis tulemas sel kolmapäeval. [VIDEO PLAYBACK] Hei, Binky. Ärka üles. On aeg pointer lõbus. Mis see on? Lugege vihjeid? Oh, tüdruk! [END VIDEO PLAYBACK] SPEAKER 1: mis ootab sind kolmapäeval. Näeme siis. [VIDEO PLAYBACK] Ja nüüd, Deep Mõtted, poolt Daven Farnham. Miks on meil õppida C? Miks mitte +? [Naer] [END VIDEO PLAYBACK]