[Tónlist spila] 

Ræðumaður 1: Allt í lagi, þetta er CS50, og þetta er byrjun á viku fjórum, og eins og þú gætir hafa heyrt eða lesa, heimurinn hefur verið að ljúka. Fara um allan netið hefur verið þekkingu og skilning af galla í a program, a tungumál forritun heitir Bash. Þetta hefur verið frábærlega vörumerki sem ShellShock, eða Bash dyr, en greinar eins og þessir hafa ekki verið óalgengt. Og í raun, margir af þeim koma minningar um Heartbleed, sem þú gætir hafa tekið eftir í ýta aftur síðastliðið vor, sem var álíka nokkuð dramatísk. Nú þeirra af þér hér í dag, hversu margir ykkar hafa, jafnvel ef þú skilur ekki hvað það er allt um, heyrt um ShellShock? Allt í lagi, og hversu margir af ykkur hafa tölvur sem eru viðkvæm? OK, það ætti að vera langt, langt fleiri hendur upp núna, af ástæðum sem við munum sjá. 

Við skulum taka a líta á það sem er verið að fara á í fjölmiðlum og síðan útskýrt það svolítið hér fyrir okkur tæknilega. 

Ræðumaður 2: Öryggi sérfræðingar hafa varað við því að alvarlegur galli gat verið um að hafa áhrif á hundruð milljónir netnotendum heimsins. Svo hvaða einmitt er villan sem hefur verið kallaður ShellShock, og hvað þýðir það að gera? Jæja, ShellShock er einnig þekkt sem Bash galla, the hugbúnaður er hetjudáð. Tölvusnápur nota veira grannskoða varnarlaus kerfi keyra Linux og Unix stýrikerfi og þá smita þau. Bash er a stjórn lína skel. Þetta leyfir notendum mál skipanir um að ráðast áætlanir og aðgerðir innan hugbúnaður með því að slá inn texta. Það er oftast notuð af forriturum, og ætti ekki að vera opin fyrir umheiminum, þó ShellShock breytingar sem. 

Jæja, worringly, sumir sérfræðingar vara það gæti verið stærri ógn, því ShellShock leyfir lokið stjórn sýktu vél, en Heartbleed aðeins leyft tölvusnápur að njósna um tölvur. Það er svo alvarlegt, að það er verið metinn á 10 af 10 fyrir alvarleika af Landsbókasafni Veikleikar Gagnasafn. 2/3 af öllum vefþjónum eru á hætta, þar á meðal nokkrum Mac tölvum. Jæja, vertu viss um að plástur kerfi núna. Einhver hýsa heimasíðu gangi sjúkt stýrikerfi ætti að taka til aðgerða eins fljótt og auðið er. Einhver sem hefur efni á það ætti að líta að fylgjast með og vefur umsókn þeirra eldveggir til að líta út fyrir öllum árásum. Ræðumaður 3: Versta hlutur sem gæti gerst er að einhver myndi skrifa kóða sem myndi sjálfkrafa fara og skanna internetið og hefði áhrif á allar þessar tölvur. Og þegar þeir gera það vel, það versta sem þeir gætu gert er bara eyða öllu, eða leggja þær síður niður. Þannig að við gætum séð skemmdir frá þeim sjónarhóli, þar sem við myndum hafa illgjarn fólk sem bara ákveða að valda eyðilegging með því að koma kerfi niður eða eyða skrár og hlutir eins og þessi. Ræðumaður 2: Sumir segja að þetta er eitt af mest erfitt að mæla bugs í ár, og það getur tekið vikur eða jafnvel mánuði til að ákveða endanlega áhrif hennar. 

Ræðumaður 1: Svo er allt það satt, en fyndna er, nánast allt á myndmáli sem þú sást bara, nema kannski lyklaborðið, hefur ekkert að gera með villan neinu tagi. Netþjónum og vír og svo framvegis, það er tegund af snertistefnu tengt, en kjarninn er það í raun nokkuð þekki hvað er að gerast hér. Í raun, láta mig fara inn í CS50 tæki okkar. Leyfðu mér að fara á undan og hámarka flugstöðinni glugga hér. Og þið hafið verið að nota þetta, eða embed útgáfa þess, í gedit til að skrifa forrit, slá skipanir, og svo framvegis, og þetta er í raun, og hefur verið í margar vikur, Bash, B-A-S-H. Þetta er Bourne-aftur skel, sem er bara fínt leið til að segja, þetta er forrit sem hefur blikkandi hvetja, í raun, sem situr þar að bíða fyrir inntak fyrir þig. Og það er stjórn lína tengi með sem þið hafið verið að keyra skipanir og lokum að setja saman og þá stendur forrit. 

En Bash er líka forritun tungumál í eftirfarandi skilningi. Þú veist að það eru skipanir eins CD og LS og einnig clang og aðrir, en þú getur skilgreint eigin skipanir með því að innleiða þá í Bash. Nú erum við ekki að fara að fara í smáatriðum að Bash í forritunarmál, en vita, til dæmis, að á því augnabliki, það er engin skipun sem kallast "halló." Þannig að það er hægt að finna í einn af þessum pakka. Það er ekki sett upp á tölvunni minni. Spurðu kerfisstjóra. En ef ég vil það að vera program kallað "halló" í Bash eða hvetja mína, Ég get í raun notað setningafræði sem er alveg eins og C. Það er ekki alveg það sama, en það lítur mjög svipað á virka, að vísu vantar einhverjar upplýsingar. Ekkert virðist gerast, en nú ef ég tegund "halló" þú getur í raun skrifað á áætlun, ekki á C, ekki í Java, ekki í öðru forritun tungumál, en í Bash sig. 

Nú er lykillinn hér, að ég skrifaði nefna að ég vildi gefa þessu nýja stjórn, og svigum eru einnig táknrænt þetta vera virka. Sem innskot, er einnig hægt að gera gaman hlutir, og í raun, jafnvel á Mac OS, þetta er forrit sem heitir Terminal. Það kemur innbyggður inn í einhver er tölva sem hefur Mac í þessu herbergi, og þú getur gert svipaða hluti í Mac OS, en þú getur farið meira út fyrir það. Og þetta er svolítið snertir, en það er góður af gaman. Ég var minntur morgun, þegar að hugsa þetta í gegnum, við smá leik ég nota til að spila með eitt af fyrrum TFS CS50 er þar hvenær hann myndi ganga í burtu frá Lyklaborðið hans með skjá hans opið, Ég myndi framkvæma skipun eins this-- "segja halló." Og nú einhver tími sem hann kom aftur til hans hljómborð eftir að ég ruddi skjáinn og hann vildi setjast niður, reyna að gera sumir vinna, lista innihald directory-- hans 

[Hljóð spilun] 

-Hello. Halló. 

Ræðumaður 1: Svo í sanngirni, það var í raun ekki "halló." Það var yfirleitt eitthvað meira í ætt við that-- [Hljóð spilun] -Beep. Ræðumaður 1: --that ég would-- svo tölvan hans vildi sver á hann hvenær sem hann í raun og veru settist á lyklaborðinu hans. Og mjög fljótt mynstrağur hann út ekki að yfirgefa skjár hans opið. En þetta bendir til þess að einhverskonar af heimskur gaman að þér getur haft með eitthvað eins og Bash. En það er lítið meira alvarlegar til að vera viss, en það. Og í raun er þetta eitt af Hættulegustu og langvarandi galla sem hefur í raun högg the veröld heimsvísu. Þessi villa hefur verið í kring fyrir um 20 árum, og þú munt vera laust í aðeins stund með hlutfallslegt einfaldleiki þess. 

Þannig að þetta er fulltrúi stjórn að ef þú eiga Mac, bókstaflega núna þegar þú hefur lokið opinn, þú getur prófað að slá inn í það forrit sem heitir Terminal. Terminal er undir Umsóknir Utilities-- einu sinni, gera Windows-notendur hafa ekki að hafa áhyggjur af þessu tiltekna threat-- en þá með Macs getur slegið þetta í glugga eins og ég mun gera hér, og ef þú slærð að í þessu forriti heitir Terminal, eins og ég mun gera núna, ef þú sérð orðið "viðkvæm" tölvan er viðkvæm fyrir misnotkun. 

Nú hvað þýðir það í raun þýtt? Og þetta er vissulega sumir laglegur brjálaður setningafræði, en við skulum að minnsta kosti draga úr nokkrar af áhugaverðum þáttum. Svo er það einhver setningafræði sem lítur smá þekki, að minnsta kosti frá C og forritun almennt. Ég sé nokkrar sviga, semikommum, hrokkið axlabönd, og svo, en það kemur í ljós að þetta heimskur hlutur hér í gulu er fyrst og fremst fall sem gerir ekki neitt. The ristill þýðir ekkert gert, og semíkommu þýðir að hætta að gera ekki neitt. Svo inni af þessum hrokkið axlabönd, sú staðreynd að ég hef jafn undirrita til vinstri, þetta er fyrst og fremst að skapa stjórn, eða breytu, kallað x, og gaf því að gult hluti af kóða þar. Það gæti verið eitthvað eins og "echo halló "eða" segja píp "eða eitthvað í ætt við það. En taka eftir ef augun reika lengra til hægri, það er meira að þessari línu en bara enda þeim semíkommu. "Echo viðkvæm," og þá utan að það er jafnvel meira. Annar semíkommu, bash -c :. 

Svo löng saga stutt, þessi lína af kóða er nóg fyrir sannfærandi tölva sem er viðkvæmt að gera eitthvað sem þú vilt að hún geri, vegna þess að það er padda í Bash þar jafnvel þótt Bash átti að hætta lesa línur stjórn hægri þar eftir gulu texta, fyrir 20-plús ár gamall galla, Bash hefur í raun verið að lesa umfram það semíkommu og falleg mikið að gera það sem það er sagt. 

Svo er það vísbendingu um það á endanum? Ég sagði bara "echo halló" eða "echo viðkvæmt," en hvað ef þú gerðir eitthvað reyndar illgjarn, eins Rm -Rf *, sem þú might ekki hafa alltaf slegið áður, og hreinskilnislega þú sennilega ætti ekki of fljótt, vegna þess að þú getur gert mikið af skemmdum við það. Hvers vegna? RM gerir hvað, að sjálfsögðu? Fjarlægir. * Þýðir hvað? Allt. Svo er það svokölluð villtur nafnspjald, svo það þýðir eyða öllu í núverandi möppu. -r gerist að meina endurkvæma, sem þýðir að ef það sem þú ert að eyða er skrá og inni þar er aðrar skrár og aðrar möppur, endurkvæmt kafa í það og eyða öllu um það. Og -f er það versta af þeim öllum. Einhver veit hvað -f þýðir hér? Force. Svo valdi leið, jafnvel ef þetta er slæm hugmynd, gera það án þess að vekur mig til frekari staðfestingar. Svo, þú veist, hlæja við á þetta, en hreinskilnislega, ég líklega slá þetta mörgum sinnum á dag, vegna þess að veruleika er það fljótlegasta leiðin til að eyða a heild búnt af efni. En jafnvel ég hef gert nokkrar skemmdir. 

En ef þú varst að plata tölvu í að skilgreina nokkur heimskur breytu eða virka kallast x, en þá svikull tölvuna í framkvæmd út fyrir mörk sem virka, umfram það semíkommu, þú gætir örugglega bragð tölvu í framkvæmd eitthvað eins rm -Rf eða Email stjórn eða Afrita stjórn. Nokkuð bókstaflega hægt að gera með tölva, hvort sem það er að eyða skrá, búa skrár, ruslpóstur einhvern, ráðast sumir framreiðslumaður lítillega, ef þú getur tjáð það með stjórn, þú getur bragð tölva í að gera það. 

Nú er það dæmi um hvernig þú gætir gert þetta? Jæja, það er a einhver fjöldi af tölvum á internetið gangi Bash. Allar okkur Mac notendur eru meðal þeirra. A einhver fjöldi af Linux netþjónum eru meðal þá eins og heilbrigður, og Unix netþjóna. Windows fær aftur tiltölulega í friði nema þú hafir sett upp sérstakur hugbúnaður. Nú a einhver fjöldi af netþjónum, fyrir dæmi, hlaupa vefur framreiðslumaður, og í raun Linux er kannski Vinsælasta stýrikerfi að keyra á tölvum á internetinu sem eru að þjóna upp vefsíður. Nú eins og við munum sjá síðar í önn, þegar þú sendir beiðni frá browser-- Chrome, Internet Explorer, whatever-- til a fjarlægur framreiðslumaður, það kemur í ljós að jafnvel þótt þú gafst bara www.example.com, Vafrinn þinn er að senda skilaboð það er lítið meira Bogagöng, eins og þetta. 

En eftir a lítill eitthvað skrítið. Fyrstu tvær línur Ég hef aldrei séð áður, en þeir líta ekki sérstaklega ógnandi. En taka það sem ég hef stolið fyrir þriðju línu hér. Ef slæmur voru að senda skilaboð svona úr tölvunni hans eða hennar viðkvæmt Mac eða viðkvæm Linux miðlara, það fyndna er að bash, að einfaldur lítill stjórn hvetja, er omnipresent og er oft notaður til að í raun framkvæma innihald a skilaboð sem hún fær. Og eftir að rökfræði, þú getur bragð vefþjón, því með því að senda eitthvað svona User-Agent, sem yfirleitt er ætlað að segja sem nafn í vafranum þínum. User-Agent Króm, User-Agent Internet Landkönnuður, User-Agent Firefox, þetta er bara vafrinn þinn er leið að skilgreina sig. En ef slæmur mjög snjall segir mm-mm, ég er ekki að fara að segja þér hvað vafrinn minn er, Ég stað að fara að senda þér þetta Cryptic-útlit hlutur með Rm -Rf * Í það, getur þú bókstaflega bragð a viðkvæm vefur framreiðslumaður á internetinu í framkvæmd nákvæmlega að í þar til að eyða öllum skrám. Og hreinskilnislega, það er ekki jafnvel verstu henni. Þú getur gert hvað sem er. Þú gætir byrjað að úthluta afneitun af árás þjónustu ef þú sendir þessi skilaboð til heil bunches af vefþjónum og þá hafði þeim öllum niður, til dæmi, á Harvard.edu netþjóna, og þú getur flokkað af Bang Heck út af þeim með net umferð sem var annars af stað með þetta slæmur strákur. 

Svo, löng saga stutt, næstum í þessu herbergi sem á Mac allir er viðkvæmt fyrir þessu. Silfur fóður er að ef þú ert keyra vefþjón á fartölvuna þína, og nema þú hafir í raun stillt það að leyfa eitthvað eins SSH inn í það, þú ert í raun öruggur. Það er viðkvæmt, en það er engin einn að reyna að komast inn í fartölvuna þína, svo þú getur konar treyst. Hins vegar, Apple mun brátt að uppfæra a festa fyrir þetta. The veröld af Linux hefur þegar gefið út fjölda fastur fyrir Fedora og Ubuntu og aðrar útgáfur af Linux, og reyndar ef þú keyrir uppfærslu 50 í tækið, jafnvel að of vilja vera uppfærð og leiðrétt. En það líka er ekki raunverulega verið varnarlaus, því nema þú hafir tinkered með tækið og gerði fartölvu opinberlega aðgengileg á internetinu, sem er ekki sjálfgefið, hefur þú reyndar verið fínt því af firewalling og aðrar aðferðir. 

En það er sérstakt dæmi um galla að við höfum búið til fyrir bókstaflega 20 ár, og hver veit nema að einhver allan þennan tíma hefur vitað um það? Og í raun er þetta ein af grundvallar áskoranir að við munum sjá síðar í önn um öryggi, er það bara eins og í hinum raunverulega heimi, góður krakkar eru í óhag. Til að halda slæmur krakkar út, verðum við að ganga úr skugga um að sérhver hurðin er læst, að sérhver gluggi er öruggt, að hvert komustað inn á heimili er öruggt að halda slæmur krakkar út. En hvað þýðir slæmur strákur hefur að gera til raunverulega málamiðlun þinn heimili og stela frá þér? Hann eða hún hefur bara að finna einn ólæstum dyr, einn brotinn gluggi eða eitthvað meðfram þeim línum, og það er sama í öryggi tölvunnar. Við getum skrifað milljón línur af forritun kóða og eyða hundruð eða þúsundir klukkustundir að reyna að fá það rétt, en ef þú gerir bara einn mistök í réttar, þú getur sett allt kerfið og örugglega í þessu tilfelli, allt Netið og heimurinn í hættu. 

Svo ef þú vilt læra meira um þetta, fara á þessa slóð hérna. Það er engin þörf fyrir aðgerð kvöld nema þú sért meðal þeirra öruggari að hafa verið að keyra eigin þinn vefur miðlara, en í því tilviki sem þú ættir, í raun, uppfæra hugbúnaðinn. 

Og þetta er of titilinn ræðu, og nú grein, að við höfum tengt á Vefsíða Auðvitað er í dag. Það var eftir manni heitir Ken Thompson, sem var samþykkt mjög frægur verðlaun í tölvunarfræði, og hann gaf þetta mál nokkur ár síðan, fyrst og fremst um þetta sama efni. Asking fólkinu spurningin, ættir þú virkilega traust, að lokum, hugbúnaður sem þú hefur verið gefið? Til dæmis, við höfum öll verið að skrifa forrit, og við höfum verið að setja saman þá með Clang. Og þekkingu þína, hefur þú skrifað einhver forrit fyrir CS50 þar sem það er a bak dyrnar konar, there 'a vegur að a slæmur strákur, ef keyra forritið þitt, gæti tekið yfir tölvuna þína? Sennilega ekki, ekki satt? Mario og gráðugur, og Credit. Þetta eru allt mjög lítil forrit. Þú vilt verða að vera nokkuð slæmt ef þú í raun heill tölvan varnarlaus eftir að skrifa 10 eða 20 línur af kóða, eða að minnsta kosti ókunnugt um nokkur af öryggi flækjur. Nú er ég að segja að facetiously, en við erum að fara að sjá í dag og í þessari viku það er í raun virkilega, virkilega auðvelt að vera slæmt og gera jafnvel stutt forrit varnarlaus. 

En nú, að minnsta kosti, að átta sig á að spurningin sé spurt hér er um Clang í þýðanda. Hvers vegna höfum við verið að treysta Clang á undanförnum tveimur eða þremur vikum? Hver er að segja að sá sem skrifaði Clang ekki hafa "ef" ástand þarna sem í raun sprautað nokkrum núllum og sjálfur í hvert forrit það safnar sem myndi láta hann eða aðgangur hennar tölvan þín þegar þú ert sofandi og laptop lokið er opið og tölvan þín er í gangi? Ekki satt? Við höfum þetta svona heiður kerfi hægri nú þar sem við treystum því að Clang er legit. Þú treystir því að tækið er legit. Þú treystir því að bókstaflega hvert forrit á Mac eða PC er áreiðanleg. Og eins og þetta einfalt villa gefur til kynna, jafnvel ef það er ekki illgjarn, það er alls ekki líklegri til að vera raunin. 

Svo þú ættir að vera hræddur eins og helvíti. Frankly, það er engin einföld lausn á þessu annað en einhverskonar félagslegum vitund af vaxandi margbreytileika að við erum að byggja ofan tölvukerfa okkar, og hvernig sífellt viðkvæmari við gæti mjög vel verið. 

Nú með því að segja, Breakout. Svo Brot er vandamál setja þrjá og Brot er leikur frá fyrra að þú gætir muna, en fyrir okkur í vandamál setja þrjú, það gerir okkur kleift að taka hlutir aftur upp hak þannig að þegar við erum að skrifa forrit, jafnvel í Terminal glugga eins og þetta, getum við í raun að keyra, að lokum, myndræna forrit ekki ólíkt þeim sem við höfðum aðgang að í grunni. Svo er þetta starfsfólk er framkvæmd Brot, sem er bara þessi múrsteinn-brot leikur, sem þú færa paddle þinn aftur og framvegis, og þú högg the bolti gegn þeim lit múrsteinn upp ofan. Þannig að þetta er að koma okkur konar til baka þar við gátum til að vera mjög fljótt með grunni, og nú með C, framkvæmd okkar eigin myndræna notandi tengi. 

En meira en það, þetta Heimadæmi táknar fyrsta þar sem við erum að gefa þú fullt af kóða. Og í raun, ég boða skýr athygli á þessu, vegna þess að sérstaklega fyrir þá sem minna þægilegt, þetta Heimadæmi, að minnsta kosti við fyrstu sýn, er að fara að líða eins og Við höfum tekið það upp hak. Vegna þess að við höfum gefið þér, fyrir sumir af the leita og flokkun vandamál í pset, fullt af kóða sem við skrifaði, og a par af athugasemdum að segja "að gera," þar sem þú þarft að fylla út í eyðurnar. Svo ekki of skelfilegur, en það er í fyrsta skipti við erum fötlun þér kóðann sem þú þarft að fyrst að lesa, skilja, og þá bæta við og ljúka henni. 

Og þá með Brot, við erum að fara að gera slíkt hið sama, gefa þér nokkrar tugi fleiri línur af kóða sem hreinskilnislega, gefa þér a einhver fjöldi af ramma fyrir leikurinn heldur stoppa stutt að innleiða múrsteinn og boltinn og paddle, en við gerum framkvæma nokkrar aðrar aðgerðir. Og jafnvel að við fyrstu sýn, aftur, sérstaklega ef minna þægilegt, kann að virðast sérlega erfitt og þú heldur að það er svo margir nýir aðgerðir þú þarft að vefja huganum kring, og það er satt. En hafðu í huga, það er alveg eins og grunni. Stuðlar ert þú ekki að nota alla The ráðgáta stykki í grunni. Stuðlar ert þú ekki sama að vefja hugur þinn um alla þá vegna þess að allt það tók var fljótur litið að skilja, ó, það er það sem ég get gert með því ráðgáta stykki. Og reyndar, í vandamál setja 3. sérstakur, munum við benda þér á gögnum sem mun kynna ykkur í nýjum störfum, og að lokum forritun býr að nota. Aðstæður, lykkjur, breytur og aðgerðir mun vera eins og það sem við höfum séð hingað til. 

Svo reyndar, hvað við munum gefa þú er nokkur sýnishorn númer sem gerir þér kleift að búa til glugga sem lítur ekki ósvipað þessu, og að lokum snúa það inn í eitthvað alveg eins og þetta. Þannig að nýta CS50, ræða skrifstofutíma og fleira, og taka þægindi í þeirri staðreynd að upphæð af kóða sem þú þarft til að skrifa er í raun ekki allt sem mikið. Fyrsta áskorunin er bara að aðlagast sjálfur að einhverju kóða við höfum skrifað. 

Einhverjar spurningar um pset3, ShellShock, eða annað? 

Áhorfendur: Það virtist eins og fara í gegnum með Brot að kóðinn er næstum hlutbundin stíl, en ég hélt að C var hlutbundin forrit. Ræðumaður 1: Frábært spurning. Svo í að leita í gegnum dreifingu kóða, kóðinn við skrifuðum fyrir pset3, fyrir þá sem þekkja, það lítur út eins og það er lítið hlutbundin. Stutta svarið er, það er. Það er að samræma hvernig þér gæti gert hlutbundin kóðann með tungumál eins og C, en það er enn að lokum málsmeðferð. Það eru engar aðferðir inni breytur, eins og þú munt sjá. En það minnir á það. Og við munum sjá að lögun aftur þegar við komum til PHP og Javascript undir lok annarinnar. En nú, hugsa um það sem vísbending um hvað er að koma. Góð spurning. Allt í lagi. Svo Mergesort var hvernig við vinstri hluti síðasta skipti. Og sameina tegund var kaldur í vit að það var svo miklu hraðar, að minnsta kosti á grundvelli cursory prófunum við gerðum í síðustu viku, en, segjum, kúla tagi, val tagi, insertion sort. Og hvað var snyrtilegur líka bara hversu succinctly og hreinlegur þú getur tjáð það. Og hvað gerði við segja að það væri efri bundið á hlaupandi tíma á sameiningu raða? Já? 

Áhorfendur: n log n? 

Ræðumaður 1: n log n, ekki satt. n log n. Og við munum koma aftur til það sem í raun þýðir eða þar sem kemur frá, en þetta var betra en hvaða gangi tíma sem við sáum fyrir kúla val og insertion sort? Svo n veldi. n veldi er stærri en þetta, og jafnvel ef það er ekki alveg augljóst, vita að Log n er minni en n, þannig að ef þú gerir n sinnum eitthvað minni en n, það er að fara að vera minna en n veldi. Það er hluti af innsæi þar. En við greitt verð fyrir þetta. Það var hraðari, en þema sem byrjaði að koma í síðustu viku var þetta tradeoff. Ég fékk betri árangur tími vitur, en það gerði ég að eyða á öðrum vegar, í því skyni að ná því? 

Áhorfendur: Minni. Ræðumaður 1: Segja aftur? Áhorfendur: Minni. Ræðumaður 1: Minni, eða rúm almennt. Og það var ekki frábær augljóst með mönnum okkar, en muna að sjálfboðaliðum okkar voru stepping áfram og stepping aftur eins og það er fylki hér, og eins og það er annað array hér að þeir gætu notað, vegna þess að við þörf einhvers staðar að sameinast þeim gott fólk. Við gátum ekki bara skipta á þeim á sínum stað. Svo Mergesort skiptimynt er meira pláss, sem við þurftum engan með önnur reiknirit en kosti er að það er miklu hraðar. Og hreinskilnislega, í alvöru heiminum rúm þessir days-- RAM, harður diskur space-- er tiltölulega ódýr, og svo er það ekki endilega að vera slæmt. 

Svo skulum taka a fljótur líta, lítið meira skipulega, hvað við gerðum og hvers vegna ég sagði að það var n log n. Svo hér eru átta tölur og átta sjálfboðaliðar við höfðum síðast. Og það fyrsta sem Sameina Raða sagði okkur að gera var hvað? Áhorfendur: Divide í tvennt. Ræðumaður 1: Segja aftur? Áhorfendur: Divide í tvennt. Ræðumaður 1: Skiptu í tvennt, rétt. Þetta er mjög minnir á símaskrá, að skipta og sigra almennt. Svo litum við á vinstri helming. Og síðan einu sinni og ég sagði, flokka vinstri helminginn af þeim þáttum, hvað gerði við segja næst? Raða vinstri helminginn af vinstri helmingur, sem gerði okkur kleift að, eftir að skipta í tvennt, leggja áherslu á fjögur og tvö. 

Hvernig heldur þú að raða lista núna, í gulur, stærð tvö, með Mergesort? Jæja skipta því í tvennt, og raða vinstri helming. Og þetta var þar sem hlutirnir fékk smá heimskulegt stuttlega. Hvernig heldur þú að raða lista sem er á stærð eitt, eins og þetta númer fjögur hér? Það er raðað. Þú ert búinn. 

En þá hvernig þú flokkað lista yfir stærð eitt þegar það er númer tvö? Jæja, sama, en nú hvað var Þriðja og mikilvægt skref í Mergesort? Þú þurfti að sameina vinstri helmingur og hægri helminginn. Og þegar við gerðum það, leit við Á fjórum, leit við á tvo. Við ákváðum allt í lagi, augljóslega tveir kemur fyrst, svo við að setja tvö í sínum stað, eftir fjóra. Og nú þú ert að eins konar baka og þetta er tegund af eiginleika af reiknirit eins Sameina Raða, baka í minni. Hvað var næsta lína af sögunni? Hvað ætti ég að vera að einbeita sér næst? The hægri helminginn af vinstri helmingur, Sem er sex og átta. 

Svo láta mig stíga bara í gegnum þetta án belaboring benda of mikið. Sex og átta, þá er sex raðað, átta er raðað. Sameina þau saman eins og þessi, og nú er næsta stóra skref er, að sjálfsögðu, að raða rétt helming frá fyrsta skrefið í þessa reiknirit. Þannig að við leggjum áherslu á einn, þrír, sjö, fimm. Við leggjum áherslu þá á vinstri helming. The vinstri helminginn af því, hægri helminginn af það, og þá sameinast í eitt og þrjú. Þá hægri helminginn, þá að vinstri helmingi um það, þá hægri helminginn af því. Sameina það í, og nú hvað skref áfram? Sameina stóru vinstri helming og stór hægri helminginn, svo einn fer niður þarna, þá tvo, þá þrjár, þá fjórar, þá fimm, þá sex, þá sjö, þá átta. 

Svo nú hvers vegna er þetta að lokum að sýna, sérstaklega ef n og logariþmi meira almennt frekar flýja þig, að minnsta kosti í minnum? Jæja, eftir hæð þetta. Við höfðum átta þætti, og við skipt því með tveimur, og tvær, með tveimur. Svo skráðu þig stöð tvö af átta gefur okkur þrjú. Og treystu mér á að ef svolítið óljós um þetta. En log stöð tvö af átta er þrír, þannig að við höfum gert þrjú lög af samruna. Og þegar við sameinuð þætti, hversu margir þættir gerði við líta á um hvert þessara lína? Alls n, rétt? Vegna þess að sameina efri línuna, jafnvel þótt við gerðum það piecemeal, Við snert lokum hvert númer einu sinni. Og í annarri röð, til að sameinast þær lista af stærð tvö, við þurftum að snerta hvert frumefni einu sinni. Og þá er hér í raun greinilega í síðustu röðinni, við þurftum að snerta hver þeirra þættir einu sinni, en aðeins einu sinni, svo hér liggur, þá n þig n okkar. 

Og nú bara til að gera hlutina svolítið formlegri fyrir aðeins augnablik, ef þér voru að nú greina þetta í eins konar hærra stigi og reyna að ákveða, vel hvernig gætir þú fara um að tjá Keyrslutíminn þessarar reiknirit bara með því að horfa á það og ekki með því að nota háttuð dæmi? Jæja, hvernig mikill tími viltu segja stíga svona gular myndi taka, ef n <2 aftur? Það er stór O hvað? Þannig að ég ætla að sjá einn, svo eitt skref, kannski tvö skref vegna þess að það er ef og síðan aftur, en það er fasti tími, ekki satt? Svo við sögðum O (1), og það er hvernig ég ætla að tjá þetta. T, bara vera að keyra tíma. n er the stærð af the inntak, svo T (n), bara ímynda sér vegur að segja á gangi tími gefinn inntak af stærðinni n er að fara að vera á röð af föstu tíma, í O (1). 

En annars, hvað um þetta? Hvernig myndir þú tjá hlaupandi tími þessa gulu línu? T hvað? Þú getur konar svindl hér og svara spurningunni lotubundið. Svo ef Keyrslutíminn í almennt við segjum bara T (n). Og nú þú ert góður af Punting hér og segja, vel, bara raða vinstri helming, og þá raða rétt helminginn. Hvernig gætum við tákna táknrænt gangi tími þessa gulu línu? T hvað? Hvað er the stærð af the inntak? n yfir tvö. Af hverju get ég ekki bara sagt það? Og þá er þetta annar T (n / 2) og síðan aftur, ef ég sameina tvö flokkuð helminga, hversu margir þættir er ég að fara til að snerta alls? n. Svo ég get tjáð þetta, bara til að vera eins konar fínt, sem keyra tíma almennt. T (n) er bara að keyra tíma T (n / 2), plús T (n / 2), að vinstri helmingi og hægri helming, auk O (n), sem er sennilega n skref, en kannski, ef ég ætla að nota tvo fingur, það er tvisvar sinnum eins og margir skref, en það er línuleg. Það er einhver fjöldi af skrefum það er þáttur af n, svo við gætum tjáð þetta og þetta. Og þetta er þar nú við munum Punt til aftur menntaskóla stærðfræði okkar kennslubók við erum að endurkomu lokum endar jafna þetta, n sinnum log n, ef þú gerir í raun út stærðfræði meira formlega. 

Svo er það bara tvær sjónarmið. Eitt tölulega með harður-dulmáli dæmigert dæmi með átta tölustafi, og meira almennt líta á hvernig við komum þangað. En hvað er í raun áhugavert hér er, aftur, að þetta álit hjólreiða. Ég er ekki að nota fyrir lykkjur. Ég er góður að skilgreina eitthvað hvað varðar sjálfu sér, ekki aðeins með þetta stærðfræði virka, en einnig hvað varðar þessa sauðakóda. Þetta gervi kóða er endurkvæma í þeirri tveimur af línum er fyrst og fremst að segja það að fara nota sig til að leysa minni Vandamálið öllu minni um sig, og síðan aftur og aftur og aftur þangað til við tálga það niður að þessu svokallaða grunn tilfelli. 

Svo skulum raunverulega draga meira sannfærandi taka-burt frá þessu sem hér segir. Leyfðu mér að fara inn í gedit og taka líta á sumir af dag kóða, einkum þetta dæmi hér. Sigma 0, sem virðist bætir tölurnar einn í gegnum n. Svo skulum sjá hvað er kunnuglegt og framandi hér. Fyrst við hafa a par af felur í sér, þannig að ekkert nýtt þar. Frumgerð. Ég er svolítið óljós um þetta eftir nokkra daga, en hvað gerði við segja frumgerð af fall er? Áhorfendur: [inaudible]. Ræðumaður 1: Hvað er það? Áhorfendur: Við tilkynntum það. Ræðumaður 1: Við tilkynntum það. Svo þú ert að kenna Clang, hey, í raun ekki framkvæmd þetta ennþá, en einhvers staðar í þessari skrá, væntanlega, er að fara að vera fall sem heitir hvað? Sigma. Og þetta er bara loforð sem það er að fara að líta út eins og þetta. Það er að fara að taka heila tölu sem input-- og ég get verið skýr og segja int n --and það er fara að skila int, en semíkommu leið, mm, ég næ í kring að innleiða þetta stuttu seinna. Aftur, Clang er heimsk. Það er bara að fara að vita hvað þú segir það toppur til botn, þannig að við þurfum að minnsta kosti að gefa það vísbending um hvað er að koma. 

Nú skulum líta á helstu hér. Við skulum fletta niður hér og sjá hvað helstu er að gera. Það er ekki það langan falls, og í raun reisa hér er kunnugt. Ég lýsi breytilegt n, og þá Ég pester notanda aftur og aftur fyrir jákvæða heiltölu með getInt, og aðeins dyr þessa lykkju þegar notandi hefur farið. Að gera á meðan, höfum við notað til að pester notandann í þá áttina. Nú er þetta áhugavert. Ég lýsa int kallast "svar." Ég tengja það aftur gildi um aðgerð sem heitir "Sigma." Ég veit ekki hvað það gerir enn, en Ég man að lýsa því í smá stund síðan. Og þá er ég liggur í gildi sem notandinn slegið inn, n, og þá tilkynni ég svarið. Jæja við skulum fletta aftur fyrir aðeins augnablik. Við skulum fara á undan inn í þessa möppu, gera Sigma 0, og í raun að keyra þetta forrit og sjá hvað gerist. Þannig að ef ég fer á undan og hlaupa þetta forrit, ./sigma-0, og ég tegund í a jákvæð heiltala eins tveir, Sigma, sem grísk tákn gefur til kynna, er bara að fara að bæta upp allar tölur frá núll á allt að tvo. Svo 0 plús 1 plús 2. Þannig að þetta ætti vonandi að gefa mér 3. Það er allt það er að gera. Og sömuleiðis, ef ég keyra þetta aftur og ég gef henni í númer þrjú, það er 3 plús 2, þannig að það er 5, auk 1 ætti að gefa mér 6. Og þá ef ég fæ virkilega brjálaður og byrjar að slá í stærri tölur, það ætti að gefa mér stærri og stærri fjárhæðir. Svo er það allt. 

Svo hvaða hjartarskinn Sigma út? Jæja, það er nokkuð augljóst. Það er hvernig við gætum hafa innleitt þetta fyrir the fortíð par af vika. "Int" er að fara að vera aftur gerð. Sigma er nafnið, og það tekur a breytilegum m í stað þess að n. Ég ætla að upp efst. Þá er þetta bara geðheilbrigði stöðva. Við munum sjá hvers vegna í augnablikinu. Nú er ég að lýsa annað breytu, summa, frumstilla hana á núll. Þá hef ég þetta fyrir lykkju iterating, virðist til glöggvunar, frá i = 1 á þig til = m, sem er hvað notandinn slegið inn, og þá er ég vöxtur summan svona. Og síðan aftur summan. 

Svo a par af spurningum. Einn, ég kröfu á athugasemd mína því þetta forðast hættu á óendanlega lykkju. Hvers vegna vildi brottför á neikvæðan fjölda örva hugsanlega óendanlega lykkju? 

Áhorfendur: Þú munt aldrei ná m. 

Ræðumaður 1: Aldrei að ná m. En m er samþykkt í, þannig að við skulum íhuga einfalt dæmi. Ef m er samþykkt í því að notandi sem neikvæð einn. Óháð aðal. Helstu ver okkur frá þetta líka, þannig að ég er bara vera mjög endaþarms með Sigma einnig að ganga úr skugga að inntak getur ekki verið neikvæð. Þannig að ef m er neikvæð, eitthvað neikvætt. Hvað er að fara að gerast? Jæja, ég er að fara að fá frumstilla einn, og þá ég er að fara að vera minna en eða jafnt og m? 

Standa eftir. Það was-- skulum ekki, skulum nix þessa sögu. Ég vissi ekki að spyrja þessi spurning, því sú áhætta að ég vísa til er ekki að fara að gerast vegna þess að ég er alltaf að fara að vera meiri than-- lagi, Ég retract þeirri spurningu. OK. Skulum einblína á þessa hluti hér. Af hverju gerði ég lýsa sumir utan lykkju? Tilkynning á línu 49 ég hef lýst i inni í lykkju, en á netinu 48 Ég hef lýst sumir utan. Já. Áhorfendur: [inaudible]. Ræðumaður 1: Jú. Svo fyrst og fremst ég vissulega ekki langar að lýsa og frumstilla summan núlli innanverðu sem lykkja á hverjum endurtekning, vegna þess að þetta myndi augljóslega vinna bug á Tilgangur því upp tölurnar. Ég myndi halda að breytast gildi aftur í núll. Og einnig, hvað er annað meira Bogagöng Ástæðan fyrir því sama hönnun ákvörðun? Já. 

Áhorfendur: [inaudible]. Ræðumaður 1: Einmitt. Ég vil sjá það utan lykkja líka á hvaða línu? Á 53.. Og byggt á reglu okkar um þumalfingur frá a par af fyrirlestrum síðan, breytur eru scoped, í raun, að því hrokkið axlabönd sem fela þeim. Þannig að ef ég lýsi ekki summa inni þessara ytri hrokkið axlabönd, Ég get ekki notað það í samræmi 53.. Setjið annan hátt, ef ég lýsti Summa hér, eða jafnvel innan Fyrir lykkja, gat ég ekki opnað það í 53.. Breytan væri í raun farinn. Svo nokkrum ástæðum þar. En nú skulum fara aftur og sjá hvað gerist. Svo Sigma fær kallað. Það bætir upp 1 plús 2, eða 1 plús 2 plús 3, og þá skilar gildi, verslanir það í svar, og printf hér er ástæða þess að ég ætla að sjá á skjánum. Svo er þetta það sem við munum kalla endurtekningu nálgun, þar sem endurtekning bara þýðir að nota lykkju. A Fyrir lykkju, á meðan lykkja, a gera á meðan lykkja, bara að gera eitthvað aftur og aftur og aftur. 

En Sigma er góður af snyrtilegur virka í að ég gæti framkvæma það á annan hátt. Hvað um þetta, sem bara til að vera góður af kaldur, láta mig virkilega losna a einhver fjöldi af truflun vegna þessa aðgerð er í raun alveg einfalt. Tálga það skulum niður bara til fjögur algerlega línum og losna við alla athugasemdir og hrokkið axlabönd. Þetta er góður af a Mind-sprengja val framkvæmd. Allt í lagi, kannski ekki hug-blása, en það er góður af sexier, allt í lagi, að líta á þetta svo miklu meira succinctly. Með aðeins fjórum línum af kóða, Ég hef fyrst þetta geðheilsu stöðva. Ef m er minna en eða jafnt og núll, Sigma gerir ekkert vit. Það er bara ætlast til að vera í þetta mál fyrir jákvæðar tölur, þannig að ég ætla bara að fara að skila núll geðþótta svo að við að minnsta kosti hafa sumir svokallaða stöð ræða. 

En hér er fegurð. Í heild á þessa hugmynd, að bæta við tölur frá 1 til N, eða m í þessu tilfelli, er hægt að gera með því að einskonar brottför peninginn. Jæja, hvað er summan af 1 til m? Jæja, þú veist hvað? Það er það sama og summa m auk summan af 1 til m mínus 1. Jæja þú veist hvað? Hvað er Sigma á m mínus 1? Jæja, ef þú fylgir góður af þessu rökrétt, það er það sama og m mínus 1 auk Sigma af m mínus 2. Svo þú getur konar just-- þetta er eins og ef þú ert bara reyna að ónáða vini og þeir spyrja þig spurningu, þú svarar konar með spurningu, þú getur konar halda brottför peninginn. En hvað er lykillinn er að ef þú halda gera spurningin minni og minni og minni, þú ert ekki spyrja hvað er Sigma n, hvað er Sigma á n, hvað er Sigma n? Þú ert að spyrja hvað er Sigma n, hvað er Sigma af n mínus 1, hvað er Sigma af n mínus 2? Loksins spurningin er að fara að verða hvað? Hvað er Sigma eitt eða núll, sum mjög lítið gildi, og um leið og þú fá þessi, vinur þinn, þú ert ekki að fara að spyrja sama spurning aftur, þú ert bara að fara að segja, ó það er núll. Við erum hætt að spila svona af heimskur sveiflujöfnunar leik. 

Svo endurkvæmni er athöfn í forritun falls starf sig. Þetta forrit, þegar saman og hlaupa, er að fara að hegða sér á nákvæmlega sama hátt, en hvað er lykillinn að inni falls heitir Sigma, það er lína af kóða þarsem Við köllum okkur, sem myndi venjulega vera slæmt. Til dæmis, hvað ef ég fyrst unnin á þessu, svo gera sigma-- gera Sigma 1 ./sigma-1. Jákvæð heiltala, vinsamlegast, 50 1275. Svo hvaða hlutverk virðist vera, miðað við eitt próf, rétt. En hvað ef ég fæ smá hættulegt og eyða svokölluðum grunn tilfelli, og bara segja, og ég ætla bara að gera þetta flóknara en það er. Við skulum reikna bara Sigma með því að taka m og síðan að bæta í Sigma á m mínus einn? Jæja, hvað er að fara að gerast hér? Við skulum súmma út. Skulum laun program, vista það, laun program, og er þá tilbúin ./sigma-1 zooming í, sláðu jákvæða heiltölu vinsamlegast, 50. Hversu margir af þú ert tilbúin til fess að sjá það? 

OK. Þannig að þetta getur gerst fyrir a tala af ástæða, og hreinskilnislega í þessari viku erum við um að gefa þér meira af þeim. En í þessu tilfelli, reyna að ástæða afturábak hvað gæti hafa gerst hér? Skiptingu kenna, sagði við síðustu tíma, er átt við hluta af minni. Eitthvað slæmt gerðist. En hvað var það vélrænt sem gekk skakkur hér vegna þess að fjarlægja minn af því svokallaða grunn tilfelli, þar sem ég skilaði harða dulmáli gildi? Hvað finnst þér fór úrskeiðis? Já. 

Áhorfendur: [inaudible]. Ræðumaður 1: Ah. Góð spurning. Þannig að stærð á fjölda að ég var því upp fékk svo stór að hún fór yfir stærð minni. Góð hugmynd, en ekki í grundvallaratriðum að fara að valda hrun. Það gæti valdið integer flæða, þar sem bitar bara selbiti yfir og þá erum við mistök mjög stór tölu fyrir eins neikvæða tölu, en það sjálft mun ekki valda hrun. Vegna þess að við lok sem dagur int er enn 32 bita. Þú ert ekki að fara að óvart stela 33 bita. En góð hugsun. Já. 

Áhorfendur: [inaudible]. Ræðumaður 1: Aðferð aldrei hættir að keyra, og reyndar kallar það sig aftur og aftur og aftur og aftur og aftur, og enginn þau virka alltaf klára því eina línu þeirra númer kallar themself aftur og aftur og aftur. Og hvað er í raun gerast hér, og nú erum við getur konar draga þetta pictorially. Leyfðu mér að fara yfir til að mynd fyrir aðeins augnablik. Þetta er mynd, sem munu á endanum hold nánar, um hvað er að gerast inni minni tölvunnar. Og það kemur í ljós að á Neðst á þessari mynd er eitthvað sem kallast stafla. Þetta er klumpur af minni, klumpur af vinnsluminni, það er bara notað hvaða tíma fall er kallað. Í hvert sinn sem þú, forritari, hringja í aðgerð, stýrikerfi, eins og Mac OS, Windows eða Linux, grípur fullt af bætum, kannski Nokkrum kílóbæti, kannski nokkrar megabæti minni, hendur þær til þín, og þá lætur þú keyrir færni með hvað breytur sem þú þarft. Og ef þú hringja þá annað virka og annað virka, þú færð annað sneið af minni og annar sneið af minni. 

Og reyndar, ef grænu stæði frá Annenberg tákna að minni, hér er það sem gerist fyrsta skipti sem þú hringja virka Sigma. Það er eins og að setja bakka svona á hvað er upphaflega tómt stafla. En svo ef það bakki kallar sig, svo að segja, hringja annað dæmi Sigma, það er eins og að biðja um stýrikerfi, ooh, þarf smá meira minni, gefa mér það. Og þá fær það hlaðið á toppinn. En hvað er lykillinn hér er að fyrsta bakki er enn þar, vegna þess að hann beitti þessum seinni bakkanum. Nú á meðan, Sigma kalla Sigma, það er eins og að biðja um meira minni. Gets hlaðið hérna. Sigma kalla Sigma, það er annað bakki sem fær hlaðið hér. Og ef þú halda að gera þetta, lokum, eins konar landakort þetta sjón þeirri töflu, hvað er að fara að gerast með stafla af stæði? Það er að fara að vera hærri en fjárhæð minni tölvan þín hefur. Og um leið og þetta græna bakkanum umfram lárétta línu ofan stafla og ofan að orðinu hrúga, sem við munum koma aftur til í framtíðinni, það er a slæmur hlutur. The hrúga er öðruvísi hluti af minni, og ef þú lætur þetta stæði stafli og stafli á, þú ert að fara að fara yfir eigin hluti þinn af minni, og forritið er örugglega að fara að hrun. 

Nú sem innskot, þessa hugmynd af endurkvæmni, því greinilega getur leitt til vandamála, en það er ekki endilega slæmur hlutur. Vegna íhuga, eftir allt how-- og kannski þetta tekur nokkrar að sættast að --how glæsilegur eða hvernig einföld að framkvæmd sigma var. Og við erum ekki að fara að nota endurkvæmni allt að mikið í CS50, en í CS51, og í raun einhver hópur þar sem þú vinna gögn uppbygging eins og tré eða fjölskyldu tré, sem hafa einhvern stigveldi, það er frábær, frábær gagnlegt. Nú, eins og innskot, svo að þér sem upprennandi tölva vísindamenn eru kunnugir sum Google inni brandara, ef þú ferð á Google og þú lítur upp hvað er skilgreining á, segjum, endurkvæmni, inn í. Uh-ha. Sem innskot, ég dró upp nokkrar. Þetta var eins og 10 mínútna frá Procrastination í morgun. Ef þú líka Google "út og suður," tilkynningu með því að halla höfðinu slightly-- og þá er þetta einn kannski mest grimmilegur af öllu þar einhver varið eins dagur þeirra framkvæmd þessa nokkur ár ago-- koma á. Ó, wait-- það er padda. 

Svo í gangi á einu af Stærsta vefsíður heims eru þessar heimskur lítill Easter egg. Þeir neyta líklega nontrivial Fjöldi lína af kóða bara svo að við getum haft smá gaman hlutir eins og þessi. En að minnsta kosti nú að fá sumir af þeim inni brandara. 

Nú skulum taka a líta á sumir af the hvítt liggur við höfum verið að segja upp á síðkastið, og byrja að afhýða aftur sumir lög tæknilega þannig að þú skiljir virkilega hvað er verið að fara á og þú getur skilið sumir af the ógnir, eins ShellShock, sem sem nú hafa byrjað að verða í fararbroddi í allir er athygli, að minnsta kosti í fjölmiðlum. Svo er hér mjög einföld aðgerð sem skilar engu, ógilt. Nafn þess er skipti. Það tekur tvær breytur og það skilar engu. Tekur í a og b. Svo fljótur sýning. Við tókum þetta upp. Við gætum eins vel taka smá brjóta hér fyrir aðeins augnablik og hafa smá eitthvað að drekka. Ef einhver myndi ekki hug að taka þátt mér upp hér bara í smá stund. Hvernig um þig í maroon skyrtu? Komdu upp. Bara einn dag. Þakka þér, þó. Allt í lagi, og við höfum koma upp sem hér? Hvað er nafn þitt? 

Ræðumaður 4: Laura. 

Ræðumaður 1: Laura. Komdu upp. Svo Laura, mjög einfalt áskorun í dag. Gaman að hitta Yo. Allt í lagi. Þannig að við höfum mjólk hérna og Við höfum nokkrar appelsínusafa yfir hér og sumir bollar sem við láni frá Annenberg dag. 

Ræðumaður 4: láni. Ræðumaður 1: Og að fara að fara á undan og gefa þér hálft glas af þessu. Allt í lagi. Og við munum gefa þér hálf glas af mjólk. Ó, og bara svo að þú getur man hvað þetta var eins, Ég minntist á að koma þetta upp og á í dag. Allt í lagi. Ef þú vilt ekki huga, við skulum sjá, við getur sett þá yfir eigin gleraugun ef þú vilt. Þetta mun vera í heiminum frá augum Lauru. Allt í lagi. Svo markmið þitt, gefa tvo bolla af fljótandi hér, mjólk og appelsínusafa, er að skipta á tveimur innihald þannig að appelsínusafa fer í mjólk bikarnum og mjólk fer í appelsínusafa bolli. 

Ræðumaður 4: Þarf ég að fá annan bolla? Ræðumaður 1: Ég er svo ánægð með að þú spurt, þó það hefði verið miklu betra myndefni ef þú hefðir ekki spurt. En já, getum við boðið þér þriðja bolli sem er tóm, að sjálfsögðu. Allt í lagi. Svo skipta innihald þar. Mjög gott. Mjög gott. Þú ert að gera þetta ótrúlega vel. Og stíga þrjú. Allt í lagi. Excellent. Stórt umferð lófaklapp væri gott fyrir Laura. Allt í lagi. Við höfum smá skilnaði gjöf fyrir þig, en láta mig taka þetta. Þakka þér svo mikið. Svo einfalt dæmi, þó, að sýna fram á að ef þú gerir langar að skipta innihald af tveimur ílátum, eða við skulum kalla þá breytum, þú þarft sumir tímabundna geymslu að stigi einn af the innihald í því að þú getur raunverulega gera skipti. Svo reyndar, þetta Kóðinn upp hér í C er fulltrúi einmitt það. Ef appelsínusafa var og mjólk var b, og við vildum að skipta um tvo, þú gætir reynt eitthvað skapandi með því að hella einn í öðru, en það myndi sennilega ekki enda sérstaklega vel. Og svo við notum þriðja bolli, hringja það tmp, T-M-P eftir venju, og setja innihald OJ í það, þá skipta einn bolla, þá setja OJ inn í Upprunaleg, þannig ná, nákvæmlega eins og Laura gerði, þá skipti. 

Svo skulum gera einmitt það. Leyfðu mér að fara á undan og opna upp dæmi sem er reyndar kallað "nei skipta, "vegna þess að þetta er ekki eins einfaldlega gert eins og þú might hugsa. Svo í þessari áætlun, eftir að Ég er að nota stdio.h, gamli vinur okkar. Ég hef frumgerð fyrir skipti þarna, sem þýðir framkvæmd er þess líklega niður undir, og við skulum sjá hvað þetta helsta program er að fara að gera fyrir mig. Ég lýsi fyrst int x fær einn, og int Y fær tvö. Svo hugsa um þá eins og OJ og mjólk, hver um sig. Og þá hef ég bara printf segja x er þetta og y er þetta, bara svo ég get sjónrænt séð hvað er að gerast. Þá hef ég printf krafa að ég er að skipta á tvær, og þá prenta ég út halda því fram að þeir eru skiptasamningar, og ég prenta út x og y aftur. Svo hérna í skipti er nákvæmlega hvað Laura gerði, og nákvæmlega það sem við sáum á skjár í smá stund síðan. 

Svo skulum fara á undan og vera sárlega vonsvikinn. Gera ekki skipti, og keyra ekki skipti, zooming í á the framleiðsla hér. Sláðu x er 1, y er 2, skipta skipti. x er enn 1, og Y er enn 2. Svo jafnvel þó hreinskilnislega, þetta lítur nákvæmlega eins, að vísu meira tæknilega, hvað Laura gerði, virtist ekki að vinna. Svo hvers vegna er það? Jæja, það kemur í ljós að þegar við að skrifa forrit eins og þetta sem hefur bæði helstu, er lögð áhersla hér, og þá annað virka, eins og skiptasamninga, tilgreindir hér, sem það kallar, heimurinn lítur smá eitthvað eins þessi stæði fyrir augnabliki. Þegar helstu fyrst fær heitir, það er eins og að spyrja stýrikerfi fyrir smá minni allir heimamaður breytur eins x og y sem helstu hefur, og þeir enda rétt þar upp. En ef helstu símtöl skipta, og helstu fer að skipta tvær breytur, A og B, appelsínusafa og mjólk, það er ekki eins og fötlun appelsínusafa og mjólk til Laura. Hvað tölvan gerir, er það fer afrit af appelsínusafa og afrit af mjólk til Lauru, svo að hvað er að lokum inni þessa bakka er gildi eitt og tvö, eða OJ og mjólk, en afrit þeirra, svo að á þessum tímapunkti í sögunni, það er OJ og mjólk í öllum þessum bakka. Það er einn og tveir í öllum þessum stæði, og skipti aðgerð er örugglega að vinna. Það er að skipta þeim inni af seinni efsta bakki, en það swap hefur engin áhrif. Og byggt á aðeins nokkrum grundvallarregla sem við höfum talaði um áður, og raunar bara nokkrar mínútur síðan, hvað gæti útskýrt hvers vegna breyta a og b inni í skipti hefur engin áhrif á x og y, jafnvel þótt Ég stóðst x og y í skiptasamnings virka. Hvað er lykillinn orð hér að gæti simplistically útskýra? Ég held að ég heyrði það hér? Áhorfendur: Return. Ræðumaður 1: Return? Ekki aftur. Við skulum fara með einum öðrum. Hvað er það? 

Áhorfendur: [inaudible]. 

Ræðumaður 1: Allt í lagi, svo return-- við gátum gera vinnu aftur í sögunni, en það er jafnvel einfaldara skýring. Áhorfendur: Gildissvið. Ræðumaður 1: Gildissvið. Ég tek svigrúm. Svo umfang, man hvar x okkar og y lýst. Þeir eru lýst inni af helstu hægri upp hér. a og b, á meðan, eru raun lýst inni skipti, ekki alveg í the hrokkið axlabönd en samt í almennu svæði af skipti. Og svo reyndar, a og b aðeins til í þessari skúffu frá Annenberg þetta Annað klumpur af kóða. Þannig að við erum örugglega að breyta afrit, en það er í raun ekki allt sem gagnlegt. 

Svo skulum taka a líta á þetta svolítið lægri. Ég ætla að fara aftur í The Source Directory, og ég ætla að fyrst zoom í hér, og bara til að staðfesta að ég er í þessu stærri endastöðvar, forritið er enn að haga sér eins og þessi. Segjum nú að þetta er ekki viljandi. Augljóslega vildi ég skipti við vinna, svo finnst það eins og padda. Nú ég gæti byrjað að bæta upp mikið af printf til að númerið mitt, prenta út x hérna, y yfir hér, að hérna, b hérna. En hreinskilnislega, það er líklega það þú hefur verið að gera í nokkrar vikur nú, í skrifstofutíma og heima þegar að vinna á psets að reyna að finna einhverja galla. En þú munt sjá, ef þú hefur ekki nú þegar, þessi vandamál setja þrjú kynnir þér að skipun sem heitir GDB, þar GDB, GNU aflúsara, hefur sér það heild búnt af aðgerðir sem geta í raun láta okkur skilja aðstæður eins og þetta, en meira compellingly, leysa vandamál og finna galla. Þannig að ég ætla að fara að gera þetta. Í stað þess að ./noswap, ég er í staðinn að fara að keyra GDB ./noswap. Í öðrum orðum, ég er að fara að keyra minn áætlun ekki í Bash, ný vinur okkar í dag. Ég ætla að keyra minn Forritið noswap inni þessarar önnur forrit sem heitir GDB, sem er a aflúsara, sem er forrit sem er hannað til að hjálpa þú mönnum að finna og fjarlægja galla. Svo ef ég högg hlaupa hér, það er er grimmilegur magn af texta að þú virkilega aldrei að lesa. Það er fyrst og fremst truflun frá the hvetja, sem Ég ætla að lemja Control-L að komast upp á toppinn þar. Þetta er GDB hvetja. Ef ég vil að hlaupa þetta forrit núna, sem þetta litla svindlari lak á dag renna til kynna, hlaupa er fyrsta skipanir sem við þýddi að kynna. Og ég ætla bara að fara að slá hlaupa upp hér inni gdb, og reyndar hljóp forritið mitt. Nú er það einhver viðbótar framleiðsla af the skjár eins og þetta, en það er GDB bara vera endaþarms og segja okkur hvað er að gerast. Þú þarft í raun ekki að hafa áhyggjur um þessar upplýsingar núna. En hvað er raunverulega kaldur um GDB, ef ég geri þetta again-- Control-L hreinsar screen-- láta mig fara undan og tegund "brjóta helstu," þannig, þegar ég lenti inn, setja hvað er kallað brot lið á noswap.c, lína 16, sem er þar sem GDB mynstrağur út program minn raun er hlutverk mitt í raun og veru er. Þetta munum við að hunsa í bili en það er heimilisfangið í minni sérstaklega þessa aðgerð. Svo núna þegar ég pikka hlaupa, taka eftir hvað er flott hérna. Áætlun mín brýtur á línuna I sagði GDB til að gera hlé framkvæmd á. Þannig að ég þarf ekki að nú breytt númerið mitt, bæta nokkrum printf er, laun það, endursýning það, breyta, bæta við nokkrum printf er, vista það, að endurþýða hana, keyra hana. Ég get bara gengið í gegnum áætlun mína skref fyrir skref fyrir skref á mönnum hraða, ekki á Intel-inni konar hraða. 

Svo nú taka þessa línu birtist hér, og ef ég fer aftur til áætlun mína í gedit, eftir því að það er í raun The mjög fyrstur lína af kóða. Það er lína 16 í gedit. Það er lína 16 innan gdb, og jafnvel þó þetta svart og hvítt tengi er ekki nærri eins notanda vingjarnlegur, þetta þýðir þessi lína 16 hefur ekki verið keyrð enn, en það er um að vera. Svo örugglega ef ég tegund prenta x, ekki printf, bara prenta x, Ég fæ smá svikinn gildi þar af núll, því x hefur ekki verið forsniðin enn. Þannig að ég ætla að fara að skrifa næst, eða, ef þú langar að vera fínt, bara n í næsta. En þegar ég slæ inn næst inn, nú eftir það færist á línu 17. Svo rökrétt, ef ég hef framkvæmt lína 16 og ég gerð nú prenta x, hvað ætti ég að sjá? Einn. 

Og nú er þetta að vísu ruglingslegt. 2 $ er bara fínt leið, ef þú vilja til að vísa til þess virði síðar, þú getur sagt "dollaramerki tvö." Það er eins og a bak tilvísun. En nú, bara hunsa það. Hvað er áhugavert er það sem er á hægri jafn skilti. Og nú ef ég tegund næst aftur og prenta Y, ætti ég að sjá 2. Ég get nú einnig prentað x aftur, og hreinskilnislega, ef ég er að fá smá ruglaður í þar sem ég er, ég get slegið lista fyrir lista og bara sjá sumir samhengi um það sem ég er í raun á. Og nú get ég slegið næst, og þar sem x er 1. Nú er ég að slá næst. Oh, y er 2. Og aftur, það er truflandi, vegna framleiðslu gdb er er commingled með eigin framleiðslu mína. En ef þú geymir í huga, því að glancing fram og til baka á númerið þitt eða leggja það út hlið við hlið kannski, þú munt sjá að í raun er ég bara stepping gegnum áætlun mína. 

En eftir hvað gerist næst, bókstaflega. Hér er lína 22. Leyfðu mér að fara yfir það, þannig að flytja á til 23, og ef ég prenta x nú, enn einn. Og ef ég prenta y nú, enn eitt. Svo er þetta ekki gagnlegt æfa. Svo skulum endurtaka þetta. Leyfðu mér að fara aftur upp að efst og tegund hlaupa aftur. Og það er að segja forritið sem er verið að debugged hefur byrjað nú þegar, fór frá upphafi. Já, við skulum gera þetta aftur. Og að þessu sinni skulum gera næst, næst, næst, næst, næst, en nú hlutirnir fá áhugavert. Nú vil ég að stíga inn í skipti, þannig að ég slá ekki næst. Ég slá skref, og nú taka það hefur stökk mér að noswap.c línu 33. Ef ég fer aftur til gedit, hvað er lína 33? Það er fyrsta raun lína af kóða inni skipti. Sem er gott, því nú get ég konar pota í kring og fá forvitinn hvað er að gerast sannarlega þarna. Leyfðu mér að prenta tmp. Bíddu. Hvers vegna er tmp hafa sumir brjálaður, svikinn sorp gildi? Áhorfendur: Það hefur ekki verið forsniðin. Ræðumaður 1: Það hefur ekki verið forsniðin. Og reyndar, þegar þú keyrir forritið, þú ert að gefa í heild búnt af minni af stýrikerfi, en þú hafa ekki frumstilla allar gildi, svo hvað bitar sem þú ert sjá hér, jafnvel þó að það er þetta brjálaður stór neikvæð númer, bara þýðir að þeir eru leifar frá sumir fyrri notkun þess RAM, jafnvel þótt ég hafi ekki sjálfur þarf hann enn. Svo nú er ég að fara að fara á undan og tegund næst, og ef ég tegund núna prenta tmp, hvað ætti ég að sjá? Hvað sem gildi fyrir var, a er fyrsta rifrildi, bara eins X var fyrst hlutur berist í, svo og x ætti að vera sama, svo prenta tmp ætti að prenta mér eitt. 

Svo það sem þú munt sjá í Heimadæmi þrjú er eitthvert af tegund á gdb, en ljóst að þetta er upphaf af að líta á tæki sem mun í raun og veru hjálpa þér að leysa vandamál svo miklu meira í raun. Það sem við erum að lokum að fara að gera á miðvikudaginn er að byrja að afhýða aftur nokkrum lögum og fjarlægja sumir þjálfun hjól. Þessi hlutur sem kallast band sem við höfum notað í nokkurn tíma, við erum að fara að hægt að taka það í burtu frá þér og byrja að tala um eitthvað meira esoterically þekktur sem char *, en við erum að fara að gera þetta fallega og varlega í fyrstu, jafnvel þótt ábendingum, eins og þeir eru kallaðir, geta gera sumir mjög slæmur hlutur ef misnotuð, með því að horfa á smá claymation frá vinur okkar Nick Parlante frá Stanford University, prófessor í tölvunni vísindi sem setti saman þessa forskoðun af hvað er að koma þessum Miðvikudagur. 

[Vídeó spilun] -Hey, Binky. Vakna. Það er kominn tími til að bendillinn gaman. 

Hvað er það? Læra um ábendingum? Ó, Goody! [END vídeó spilun] Ræðumaður 1: Það bíður þér á miðvikudag. Við munum sjá þig þá. [Vídeó spilun] -Og Nú, Deep Thoughts, með Daven Farnham. 

Af hverju erum við að læra C? Hvers vegna ekki A +? 

[Hlátur] 

[END vídeó spilun]