[Daqq ta mużika] SPEAKER 1: Kull dritt, dan huwa CS50, u dan huwa l-bidu ta 'erba' ġimgħat, u kif inti tista smajt jew aqra, id-dinja kienet jispiċċa. Going kollha madwar l-internet għandha Kien għarfien u l-kuxjenza ta 'bug fi programm, a lingwa ta 'programmar imsejħa Bash. Dan ġie wonderfully marka bħala Shellshock, jew il-bieb Bash, imma artikoli bħal dawn ma ġewx komuni. U fil-fatt, ħafna minnhom iġġib memorji lura ta Heartbleed, li jista 'jkollok ndunat fil- agħfas lura din ir-rebbiegħa passat, li kien similarment pjuttost drammatika. Issa ta 'dawk minnkom hawn illum, kemm għandek, anki jekk inti ma jifhmux dak dan kollu dwar, semgħu Shellshock? Kull dritt, u kif ħafna minnkom jkollhom kompjuters li huma vulnerabbli? OK, għandu jkun hemm ħafna, ferm aktar hands up dritt issa, għal raġunijiet ser naraw. Ejja tagħti ħarsa lejn x'hemm ilu għaddej fil-midja u mbagħad jispjegaw daqsxejn hawn għalina teknikament. SPEAKER 2: Esperti tas-Sigurtà ikollhom wissa li difett serju jkunu jistgħu jkun ta 'madwar li jaffettwaw mijiet ta' miljuni ta 'utenti tal-web-dinja. Allura x'inhi eżattament l-bug li kien iddabbjati Shellshock, u dak ma tagħmel? Ukoll, Shellshock hija magħrufa wkoll bħala l- Bug Bash, is-software li hu jisfrutta. Hackers jużaw il-virus li scan vulnerabbli sistemi running Linux u Unix sistemi operattivi u mbagħad jinfettaw lilhom. Bash huwa qoxra kmand tal-linja. Dan tikri utenti kwistjoni jikkmanda biex tniedi programmi u l-karatteristiċi fi ħdan software billi tittajpja test. Huwa tipikament użati mill-programmers, u m'għandhiex tkun miftuħa għal dinja usa ', għalkemm Shellshock bidliet li. Ukoll, worringly, xi analisti twissi din tista 'tkun ta' theddida akbar, minħabba Shellshock tippermetti kompluta kontroll ta 'magna infettati, billi Heartbleed permess biss hackers biex spy fuq il-kompjuters. Huwa tant serja, huwa ġiet stmata għal 10 minn 10 għas-severità mill-Awtorità Nazzjonali Database Vulnerabbiltà. 2/3 ta 'servers kollha web huma fi riskju, inklużi xi kompjuters Mac. Ukoll, aċċerta ruħek li garża sistemi tiegħek issa. Kulħadd tospita websajt running is-sistemi operattivi affettwati għandha tieħu azzjoni kemm jista 'jkun malajr. Kulħadd li jistgħu jaffordjaw li għandu look għall-monitoraġġ u l-web-applikazzjoni tagħhom firewalls li għandek toqgħod attent għal xi attakki. SPEAKER 3: ħaġa Agħar li jista 'jiġri huwa li xi ħadd se jikteb kodiċi li awtomatikament imorru u scan l-internet u jaffettwa b'mod kollha ta 'dawn il-kompjuters. U ladarba dawn jagħmlu dan, ukoll, l-agħar ħaġa li tista 'tagħmel huwa biss ħassar kollox, jew shut-siti isfel. Allura nistgħu naraw ħsara minn dak il-lat, fejn aħna se jkollu nies malizzjużi li sempliċiment jiddeċiedu li jikkawżaw havoc minn sistemi jġibu isfel jew tħassir fajls, u affarijiet bħal dik. SPEAKER 2: Xi wħud jgħidu li dan huwa wieħed mill-aktar diffiċli biex jitkejjel bugs fis-snin, u dan jista 'jieħu ġimgħat jew saħansitra xhur biex tiddetermina l-impatt aħħari tagħha. SPEAKER 1: Allura kollha ta 'dan huwa veru, imma l-ħaġa umoristiċi hija, kważi kollha tal-xbihat inti biss raw, ħlief għall forsi l-keyboard, għandha x'taqsam xejn mal- l-bug tkun xi tkun. Servers u wajers u ibqa 'sejjer hekk, huwa relatat tip ta tanġenzjali, iżda fil-qalba huwa attwalment pretty familjari x'inhu għaddej hawn. Fil-fatt, let me go fis appliance CS50 tagħna. Let me imorru quddiem u timmassimizza -tieqa terminal hawn. U inti guys kienu qegħdin jużaw dan, jew il-verżjoni integrati tiegħu, fil gedit sabiex jiktbu programmi, tip jikkmanda, u oħrajn, u dan huwa fil-fatt, u għandu ilha għal ġimgħat, Bash, B-A-S-H. Dan huwa l-Bourne-ġdid qoxra, li huwa biss mod fancy ta 'tgħid, dan huwa programm li għandu Teptip fil-pront, b'mod effettiv, li tpoġġi hemm stennija għal input għalik. U huwa l-kmand interface on-line permezz tagħhom inti guys ġew running jikkmanda u finalment kompilazzjoni u mbagħad running programmi. Iżda Bash huwa wkoll l-ipprogrammar lingwa fis-sens li ġejja. Inti taf li hemm jikkmanda bħal cd u ls u wkoll clang u oħrajn, imma int tista 'tiddefinixxi jikkmanda tiegħek stess billi l-implimentazzjoni tagħhom fl Bash. Issa aħna mhux qed tmur biex mur fid-dettal ħafna bħala li bash l-lingwa ta 'programmar, iżda taf, per eżempju, li fil-mument, hemm l-ebda kmand imsejħa "bonjour." Allura li jista 'jinstab fil- wieħed minn dawn il-pakketti. Mhuwiex installat fil-kompjuter tiegħi. Staqsi amministratur tiegħek. Imma jekk jien tixtieq li jkun hemm programm imsejħa "bonjour" fil Bash jew fuq pront tiegħi, I jistgħu attwalment jużaw sintassi thats pjuttost simili C. Huwa pjuttost mhux l-istess, iżda jistenna pretty simili għal funzjoni, għalkemm nieqsa xi dettalji. Xejn jidher li jiġri, imma issa jekk I tip "hello," inti tista 'attwalment jiktbu programm, mhux fis-C, mhux fl Java, mhux fl-ipprogrammar ieħor lingwa, iżda Bash innifsu. Issa l-prinċipali hawnhekk hija li I kiteb l- isem I riedu jagħtu dan il-kmand ġdid, u l-parentesi huma wkoll simboliku ta 'dan huwa funzjoni. Bħala twarrib, inti tista 'ukoll tagħmel gost affarijiet, u fil-fatt, anke fuq OS Mac, dan huwa programm imsejjaħ Terminal. Jidħol mibnija fis tal ħadd kompjuter li għandu Mac f'din il-kamra, u inti tista 'tagħmel affarijiet simili fl Mac OS, imma int tista 'tmur aktar lil hinn minn dak. U dan huwa ftit tanġenzjali, imma hija tip ta 'gost. I kien fakkar dalgħodu, meta ħsieb dan permezz, ta 'logħba ftit I użati biex jilagħbu ma 'waħda mill TFS preċedenti CS50 tal li bih kwalunkwe żmien li kien ikun walk away minn keyboard tiegħu bl-iskrin tiegħu jinfetaħ, Nixtieq tesegwixxi kmand bħal this-- "jgħidu bonjour." U issa xi darba hu daħal lura tiegħu keyboard wara I kklerjat l-iskrin u li kieku joqogħdu bilqegħda, jipprova jagħmel xi xogħol, lista tal-kontenut ta 'directory-- tiegħu [AUDIO Daqq] -Hello. Hello. SPEAKER 1: Allura, fl-ekwità, ma kienx fil-fatt "bonjour." Kien normalment xi ħaġa aktar viċin għall that-- [AUDIO Daqq] -Beep. SPEAKER 1: --that I would-- hekk kompjuter tiegħu kieku naħlef fi lilu kwalunkwe ħin hu attwalment sib stabbiliti fuq tastiera tiegħu. U malajr ħafna hu dehret ma jħallu l-iskrin tiegħu jinfetaħ. Iżda dan jissuġġerixxi t-tip ta 'gost stupid li inti jista 'jkollha ma' xi ħaġa bħal Bash. Iżda huwa ftit aktar serja, biex tkun ċert, minn dak. U fil-fatt, dan huwa wieħed mill- aktar bugs perikolużi u fit-tul li tkun verament laqat il-dinja globalment. Dan bug kien madwar għal xi 20 sena, u tkun taf tkun laqat fi ftit mument mill-sempliċità relattiva tiegħu. Allura dan huwa rappreżentattiv kmand li jekk inti stess a Mac, litteralment dritt issa meta jkollok għatu tiegħek miftuħa, inti tista 'tipprova ittajpjar f'dak programm imsejjaħ Terminal. Terminal huwa taħt Applikazzjonijiet Utilities-- għal darba, Windows utenti ma jkollhom joqogħdu jinkwetaw dwar dan threat-- partikolari iżda dawk tal inti ma MACs tista tip dan fi tieqa bħal I ser nagħmlu hawnhekk, u jekk inti tip li fis dan il-programm imsejħa Terminal, bħal I ser tagħmel issa, jekk tara l-kelma "vulnerabbli," kompjuter tiegħek huwa vulnerabbli għall-isfruttament. Issa dak li ma attwalment jfisser? U dan huwa ċertament xi sintassi pretty crazy, imma ejja mill-inqas jiġbed out xi wħud mill-aspetti interessanti. Allura hemm xi sintassi li jistenna ftit familjari, mill-inqas minn C u l-ipprogrammar aktar ġenerali. I tara xi parentesi, semicolons, braces kaboċċi, u bħal dawn, iżda jirriżulta li dan Ħaġa stupid hawn isfar huwa essenzjalment funzjoni li ma xejn. Il-mezzi kolon ma tagħmel xejn, u l- virgola ifisser tieqaf tagħmel xejn. Allura ġewwa minn dawn braces kaboċċi, il-fatt li għandi ugwali jiffirmaw għall-xellug, din huwa essenzjalment ħolqien kmand, jew varjabbli, imsejħa x, u assenjazzjoni tiegħu li ftit isfar tal-kodiċi hemmhekk. Dan jista 'jkun xi ħaġa bħal "eku bonjour "jew" jgħidu ħoss "jew xi ħaġa simili għal dak. Iżda avviż jekk l-għajnejn tiegħek wander aktar lejn il-lemin, hemm aktar din il-linja minn biss it-tmiem ta 'dak il virgola. "Echo vulnerabbli," u mbagħad lil hinn minn dak hemm anke aktar. Punto virgola, -C Ieħor bash :. Allura qasir storja twila, din il-linja tal-kodiċi hija biżżejjed għall konvinċenti kompjuter li l- vulnerabbli li jagħmlu xi ħaġa li inti tixtieq li tagħmel, għaliex hemm bug fil biha Bash anki jekk Bash kien suppost biex tieqaf linji qari ta 'dritt kmand hemm wara t-test isfar, għal sena 20-plus bug qodma, Bash ikun attwalment ġie qari lil hinn minn dik virgola u pretty ħafna jagħmlu dak li huwa qal. Allura x'inhu l-implikazzjoni ta 'dik finalment? I biss qal "eku bonjour" jew "eku vulnerabbli," imma dak jekk inti għamilt xi ħaġa attwalment malizzjużi, bħal rm -rf *, li inti tista 'ma qatt ittajpjat qabel, u franchement inti probabilment m'għandhomx wisq malajr, għaliex inti tista 'tagħmel ħafna ħsara magħha. Għaliex? rm ma dak, tal-kors? Ineħħi. * Ifisser liema? Kollha. Allura huwa l-hekk imsejħa wild card, hekk dan ifisser ħassar kollox fil l-direttorju kurrenti. -r jiġri li jfisser rikursivi, li jfisser li jekk dak li qed jitħassru huwa direttorju, u ġewwa ta 'hemmhekk hija fajls oħra u direttorji oħra, recursively adsa fis hemmhekk u ħassar kollha ta 'dak. U -f huwa l-agħar minnhom kollha. Xi ħadd jaf liema -f jfisser hawn? Forza. Allura seħħ tfisser, anke jekk din hija idea ħażina, tagħmel dan mingħajr suġġeriment me Għal konferma aktar. Allura, inti taf, aħna tidħaq dan, imma franchement, I probabbilment din it-tip ħinijiet multipli kuljum, għaliex ir-realtà huwa huwa l-aktar mod li tħassar mazz sħiħ ta 'għalf. Iżda anke I għamlu xi ħsara. Imma jekk ġejt biex trick kompjuter fis tiddefinixxi xi varjabbli stupid jew funzjoni msejħa x, iżda mbagħad tricking l-kompjuter fis eżekuzzjoni lil hinn mill-konfini ta 'dik funzjoni, lil hinn minn dak virgola, inti tista 'tabilħaqq trick kompjuter fis eżekuzzjoni xi ħaġa bħal rm -rf jew l-kmand Email jew l-kmand Kopja. Xejn litteralment inti tista 'tagħmel ma' l- kompjuter, kemm jekk huwa tħassar files, ħolqien ta 'fajls, spamming ħadd, jattakkaw xi server remot, jekk inti tista 'tesprimi lilha bi kmand, inti jista trick kompjuter fis tagħmel dan. Issa x'hemm eżempju ta ' kif inti tista 'tagħmel dan? Ukoll, hemm ħafna ta 'kompjuters fuq l-Bash internet running. Kollha ta 'l-utenti minna Mac huma bejniethom. A lott ta 'servers Linux huma fost lilhom ukoll, u servers Unix. Windows darb'oħra gets relattivament off-ganċ sakemm inti ħadthom installati software speċjali. Issa ħafna ta 'servers, għal Pereżempju, servers mill-web run, u fil-fatt Linux hija forsi l- aktar sistema operattiva popolari li jimxu fuq kompjuters fuq l-internet li huma jservu up paġni web. Issa kif Ser naraw aktar tard fil-semestru, meta inti tibgħat talba minn Chrome browser-- tiegħek, Internet Explorer, whatever-- ma 'server remot, jirriżulta li anki jekk inti biss ittajpjat www.example.com, browser tiegħek hija li jibgħat messaġġ thats ftit aktar arcane, bħal dan. Imma tinnota ftit xi ħaġa stramba. L-ewwel żewġ linji Stajt qatt qabel, iżda dawn ma tfittex partikolarment theddida. Imma avviż dak li stajt misruqa għat-tielet linja hawnhekk. Jekk Guy ħażina kienu li jibgħat messaġġ bħal din mill-kompjuter tiegħu jew tagħha għal Mac vulnerabbli jew server Linux vulnerabbli, il-ħaġa umoristiċi hija li Bash, li sempliċi kmand ftit pront, huwa omnipreżenti u huwa spiss użati biex tesegwixxi essenzjalment il-kontenut ta ' messaġġ li hija tirċievi. U billi li l-loġika, inti tista ' trick web server, għalhekk, billi jibgħat xi ħaġa simili User-aġent, li normalment huwa suppost li jgħidu l- isem tal-browser tiegħek. User-aġent Chrome, User-aġent Internet Explorer, User-aġent Firefox, dan huwa biss browser tiegħek mod ta 'identifikazzjoni ta innifsu. Imma jekk Guy ħażina ħafna cleverly jgħid, mm mm, jien mhux ser jgħidlek dak browser tiegħi huwa, Jien minflok ser inti tibgħat dan cryptic li tħares ħaġa ma '-rf rm * Fiha, inti tista litteralment trick web server vulnerabbli fuq l-internet fis eżekuzzjoni eżattament dak fl hemm għal tħassir kollha tal-fajls. U franchement, li mhux anke l-agħar ta 'dan. Tista 'tagħmel xejn. Inti tista 'tibda mqassma ċaħda ta 'attakk servizz jekk inti mibgħut dan il-messaġġ lil għenieqed sħaħ ta 'servers mill-web u mbagħad kellhom lilhom kollha jinżlu, għal Pereżempju, fuq servers Harvard.edu, u inti tista sort ta bang l-Heck barra minnhom minn netwerk tat-traffiku li kien triggered mod ieħor minn dan Guy ħażina. Allura, storja twila fil-qosor, kważi kulħadd f'din il-kamra li tipposjedi Mac hija vulnerabbli għal dan. Il-kisja tal-fidda huwa li sakemm int tmexxija ta 'web server fuq laptop tiegħek, u sakemm inti ħadthom attwalment konfigurati biex jippermetti li xi ħaġa bħal SSH fis dan, int attwalment sikur. Huwa vulnerabbli, iżda hemm ebda wieħed tipprova tikseb fis-laptop tiegħek, sabiex inti tista 'tip ta' mistrieħ assigurat. Madankollu, Apple dalwaqt jkun aġġornament jiffissaw għal dan. Id-dinja tal-Linux diġà rilaxxati numru ta 'jiffissa għall Fedora u Ubuntu u verżjonijiet l-oħra tal-Linux, u tabilħaqq jekk inti tmexxi aġġornament 50 fl-appliance, anki li wisq se tkun aġġornati u korretti. Iżda li wisq ma jkunx ġie verament vulnerabbli, għaliex sakemm inti stajt tinkered mal-appliance u magħmula laptop tiegħek pubblikament aċċessibbli fuq l-internet, li mhuwiex kontumaċja, inti stajt attwalment ġiet multa minħabba ta firewalling u tekniki oħra. Imma hija eżempju estrem ta 'bug li aħna ve għexet għal ta litteralment 20 snin, u li jaf jekk xi ħadd dan il-ħin ikun magħruf dwar dan? U fil-fatt, dan huwa wieħed ta ' l-isfidi fundamentali li aħna ser tara aktar tard fil- semestru dwar is-sigurtà, li huwa biss bħal fid-dinja reali, l-guys tajba huma fil-iżvantaġġ. Biex iżommu l-guys ħżiena out, għandna biex kun żgur li kull bieb ikun imsakkar, li kull tieqa hija sigura, li kull punt ta 'dħul fis-dar huwa sikur biex iżommu l-guys ħżiena out. Imma dak ma l-Guy ħażina jkollu tagħmel biex attwalment kompromess dar tiegħek u steal mill inti? Hu jew hi biss trid li ssib wieħed imsakkar bieb, tieqa waħda miksur, jew xi ħaġa flimkien dawk il-linji, u huwa l- istess ħaġa fil sigurtà tal-kompjuter. Nistgħu jiktbu miljuni ta ' linji ta 'kodiċi ta' programmazzjoni u jonfqu mijiet jew eluf ta 'sigħat tipprova tikseb dan korretta, imma jekk inti tagħmel wieħed biss żball fl korrettezza, inti tista 'tpoġġi s-sistema kollha u tabilħaqq f'dan il-każ, l-internet kollu u fid-dinja f'riskju. Mela jekk inti tixtieq titgħallem aktar dwar dan, mur dan il-URL hawn. M'hemm l-ebda ħtieġa għal azzjoni tonight sakemm int fost dawk aktar komdu li ġew running web tiegħek stess server, f'liema każ inti għandek, fil-fatt, taġġorna software tiegħek. U dan ukoll huwa t-titlu ta ' diskors, u issa karta, li konna marbuta fuq il- websajt kors għall-lum. Kien minn sħabi jismu Ken Thompson, li kien jaċċetta famużi ħafna għoti fix-xjenza tal-kompjuter, u hu taw dan id-diskors xi snin ilu, essenzjalment fuq dan l-istess suġġett. Tistaqsi folks il-kwistjoni, Jekk You verament fiduċja, finalment, il- software inti ħadthom ġiet mogħtija? Per eżempju, ilkoll għandna ġie kitba programmi, u konna qegħdin jiġbru bl Clang. U biex l-għarfien tiegħek, qatt bil-miktub xi programmi għall CS50 fejn hemm l- bieb lura ta 'tipi, hemm mod li Guy ħażina, jekk running program tiegħek, setgħet tieħu f'idejha l-kompjuter tiegħek? Probabbilment le, id-dritt? Mario, u greedy, u Credit. Dawn huma programmi kollha pretty żgħar. Youd għandek tkun pretty ħażina jekk inti fil-fatt magħmula sħiħa tal-kompjuter tiegħek vulnerabbli wara bil-miktub 10 jew 20 linji ta 'kodiċi, jew għall-inqas konxji ta 'xi wħud ta 'l-implikazzjonijiet ta' sigurtà. Now I ngħid li facetiously, imma aħna qed tmur biex tara llum u din il-ġimgħa huwa attwalment tassew, tassew faċli li jkun ħażin u tagħmel anke programmi qosra vulnerabbli. Iżda għal issa, mill-inqas, tirrealizza li l-kwistjoni qed jintalbu hawn huwa dwar Clang fil kompilatur. Għaliex aħna ġew fidu Clang għall-aħħar żewġ jew tliet ġimgħat? Min hu ngħid li kull min kiteb Clang ma kellux "jekk" kundizzjoni fil hemm li essenzjalment injettat xi żerijiet u dawk fis-kull programm jikkompila li let lilu jew lilha aċċess kompjuter tiegħek meta int rieqed u għatu laptop tiegħek hija miftuħa u l-kompjuter tiegħek tkun qed taħdem? Right? Għandna din it-tip tad-dritt sistema unur issa fejn aħna fiduċja li Clang huwa leġittimu. Inti fiduċja li l-appliance huwa leġittimu. Inti fiduċja li litteralment kull programm fuq Mac tiegħek jew PC hija affidabbli. U kif tissuġġerixxi din bug sempliċi, anki jekk mhuwiex malizzjużi, li assolutament ma probabbli li jkun il-każ. Allura inti għandek tkun jibża bħala infern. Franchement, hemm ebda sempliċi soluzzjoni għal din ieħor minn tip ta 'kuxjenza tas-soċjetà tal-kumplessità dejjem tiżdied li aħna qed tibni fuq nett ta 'sistemi tal-kompjuter tagħna, u kif dejjem aktar vulnerabbli nistgħu tajjeb ħafna 'jkun. Issa ma 'dak imsemmi, tbegħid. Allura tbegħid huwa problema stabbiliti tlieta, u Tbegħid hija logħba mill-imgħoddi li inti tista 'recall, iżda għalina fil-problema sett tlieta, dan jippermetti li tieħu affarijiet back up a talja b'tali mod li meta aħna bil-miktub programmi, anki fil-tieqa Terminal bħal dan, nistgħu tmexxi effettivament, finalment, programmi grafika mhux b'differenza ta 'dawk kellna aċċess fil Scratch. Allura dan huwa l-tal-persunal implimentazzjoni ta 'tbegħid, li huwa biss dan l-briks-tkissir logħba, li inti timxi jaqdfu tiegħek lura u lura, u inti laqat il-ballun kontra dawk briks kkulurita top up. Allura dan huwa li jġibu us tip ta 'lura lejn fejn konna kapaċi li jkunu malajr ħafna ma Scratch, u issa ma 'C, implimentazzjoni tagħna stess interfaces għall-utenti grafika. Iżda aktar minn dan, din sett problema tirrappreżenta l-ewwel li aħna qed tagħti inti mazz ta 'kodiċi. U fil-fatt, I iġibu espliċita attenzjoni għal dan, għaliex speċjalment għal dawk inqas komdi, dan problema stabbiliti, mill-inqas fl-ewwel daqqa t'għajn, huwa se jħossu bħal aħna ħadt it up a talja. Għaliex aħna ve tak, għal xi wħud mill-tfittxija u l-għażla l-problemi fil-pset, mazz ta 'kodiċi li aħna kiteb, u l-koppja ta 'kummenti li jgħidu "li tagħmel," fejn inti għandek timla l-vojt. Allura mhux wisq scary, iżda huwa l-ewwel darba aħna qed għoti inti kodiċi li għandek bżonn biex ewwel taqra, tifhem, u mbagħad żid sa u titlesta. U mbagħad mal tbegħid, aħna qed tmur biex jagħmlu l-istess, giving you tużżana ftit aktar linji tal-kodiċi li, franchement, jagħtik lott tal-qafas għall- il-logħba imma waqfa qasira tal-implimentazzjoni tal-briks u l-ballun u l-jaqdfu, iżda nagħmlu jimplimentaw xi karatteristiċi oħra. U anki li ewwel daqqa t'għajn, għal darb'oħra, speċjalment jekk inqas komdi, jista 'jidher partikolarment kbar u taħseb li hemm funzjonijiet ġodda tant għandek bżonn biex nagħlaq moħħ tiegħek madwar, u dan huwa veru. Iżda jżomm f'moħħu, huwa pjuttost simili Scratch. Odds huma inti ma tuża kollha ta ' il-biċċiet puzzle fil Scratch. Odds huma inti ma 'kura biex nagħlaq moħħok madwar kull wieħed minnhom minħabba li kull ma ħadet kien t'għajn malajr biex jifhmu, oh, dan huwa dak I tista 'tagħmel ma dik il-biċċa puzzle. U fil-fatt, fil-problema sett 3 spec, aħna ser punt inti fil-dokumentazzjoni li se jintroduċu inti għal xi funzjonijiet ġodda, u finalment l-ipprogrammar constructs tuża. Kundizzjonijiet, loops, varjabbli, u funzjonijiet se jkun identiku għal dak li aħna stajt tidher s'issa. Allura fil-fatt, dak li aħna ser jagħtuk inti xi kodiċi tal-kampjun li ihallik toħloq tieqa li jistenna ma b'differenza dan, u finalment jibdluh xi ħaġa pjuttost bħal dan. Sabiex jieħdu vantaġġ ta 'CS50, jiddiskutu ħinijiet tal-uffiċċju u aktar, u jieħdu l-kumdità fil-fatt li l-ammont tal-kodiċi inti ghandek tikteb huwa attwalment mhux kollha li ħafna. L-ewwel sfida hija biss biex aklimatizza lilek innifsek biex xi kodiċi konna bil-miktub. Kwalunkwe mistoqsijiet dwar pset3, Shellshock, jew inkella? UDJENZA: Huwa dehret qisha għaddejjin ma tbegħid li l-kodiċi huwa kważi stil oġġett orjentati lejn, imma ħsibt C kien programm oġġett orjentati lejn. SPEAKER 1: An kwistjoni eċċellenti. Allura meta tħares permezz tal- kodiċi ta 'distribuzzjoni, il-kodiċi aħna kiteb għall pset3, għal dawk familjari, huwa qisu huwa ftit oġġett orjentati lejn. Risposta qasira hija, huwa. Huwa ta 'approssimazzjoni ta' kif inti tista 'tagħmel kodiċi oġġett orjentati lejn użu lingwa bħal C, iżda huwa xorta finalment proċedurali. M'hemm l-ebda metodi ġewwa ta il-varjabbli, kif tkun taf tara. Iżda huwa reminixxenti ta 'dak. U aħna ser tara li karatteristika darb'oħra meta nikbru biex PHP u JavaScript lejn l-aħħar tal-semestru. Iżda għal issa, jaħsbu li bħala ħjiel ta 'dak li ġejjin. Mistoqsija tajba. Kull dritt. Allura jingħaqdu sort kien kif aħna affarijiet xellug aħħar darba. U jingħaqdu sort kien jibred fil- sens li kien tant ħafna aktar mgħaġġla, mill-inqas ibbażat fuq it-testijiet ta 'malajr għamilna aħħar ġimgħa, minn, ngħidu aħna, bubble sort, sort għażla, sort inserzjoni. U dak kien pulita wisq huwa biss kif konċiż u nadif inti tista 'tesprimi lilha. U dak ma ngħidu li kien ta 'fuq marbuta fuq il-running time ta jingħaqdu sort? Yeah? UDJENZA: n log n? SPEAKER 1: n log n, id-dritt. n log n. U aħna ser terga 'lura għal dak li verament ifisser jew fejn dik ġejja minn, iżda dan kien aħjar minn dak iż-żmien running li rajna għal bubble għażla u sort inserzjoni? Allura n kwadrat. n kwadrat hija akbar minn dan, u anki jekk mhuwiex pjuttost ovvju, jafu li log n huwa iżgħar minn n, hekk jekk inti tagħmel n darbiet xi ħaġa iżgħar minn n, li għaddej biex tkun inqas minn n kwadrat. Huwa daqsxejn ta intwizzjoni hemmhekk. Iżda aħna mħallsa prezz għal dan. Kien aktar mgħaġġel, iżda tema li beda jitfaċċaw aħħar ġimgħa kien dan tradeoff. I ltqajna prestazzjoni aħjar ħin għaqli, imma dak ma I jkollu jonfoq fuq l-oħra idejn, sabiex jintlaħaq dak? UDJENZA: Memorja. SPEAKER 1: Say mill-ġdid? UDJENZA: Memorja. SPEAKER 1: Memorja, jew spazju aktar ġenerali. U ma kienx super ovvja mal-bnedmin tagħna, iżda tfakkar li l-voluntiera tagħna kienu żżid l quddiem u t-tisħiħ lura bħallikieku hemm firxa hawn, u bħala għalkemm hemm tieni firxa hawnhekk li huma jistgħu jużaw, għaliex aħna someplace meħtieġa li jingħaqdu dawk folks. Aħna ma setgħux biss tpartit lilhom fil-post. Allura jingħaqdu leverage sort huwa aktar spazju, li aħna ma bżonn ma l-algoritmi oħra, iżda l-rasu hija li huwa ħafna aktar mgħaġġla. U franchement, fl-ispazju dinja reali dawn RAM days--, disk hard space-- huwa relattivament irħis, u b'tali mod li mhux bilfors ħaġa ħażina. Mela ejja tagħti ħarsa, ftit aktar metodiku, fuq dak li għamilna u għaliex aħna qal li kien n log n. Allura hawn huma l-tmien numri u l- tmien voluntiera kellna aħħar darba. U l-ewwel ħaġa li Merge Sort qalulna li tagħmel kien dak? UDJENZA: Divide fi tnejn. SPEAKER 1: Say mill-ġdid? UDJENZA: Divide fi tnejn. SPEAKER 1: Iddividi fi tnejn, id-dritt. Dan huwa ħafna reminixxenti ta ' il-ktieb tat-telefon, tal-firda u conquer aktar ġenerali. Allura ħarisna lejn in-nofs xellugi. U mbagħad darba għidna, sort in-nofs xellugi tal-elementi, dak li aħna ma jmiss ngħidu? Sort in-nofs xellugi tal-xellug nofs, li ħallietna nsiru, wara diviż fi tnejn, tiffoka fuq erba 'u tnejn. Kif inti sort lista issa, fl isfar, ta 'daqs tnejn, uża Jingħaqdu Sort? Ukoll jaqsam min-nofs, u sort l-nofs tax-xellug. U dan kien fejn l-affarijiet ltqajna qosor stupid ftit. Kif inti sort lista li l-ta daqs wieħed, bħal dan in-numru erbgħa hawn? Huwa magħżula. Inti qed isir. Imma allura kif taħseb sort lista ta ' daqs wieħed meta huwa n-numru tnejn? Ukoll, l-istess ħaġa, iżda issa dak li kien l- tielet u l-pass ewlieni fil Sort Merge? You kellhom jingħaqdu ix-xellug nofs u l-nofs tal-lemin. U ladarba għamilna li, ħarisna għal erbgħa, ħarisna lejn tnejn. Aħna iddeċieda id-dritt, ovvjament tnejn jiġi l-ewwel, hekk aħna tpoġġi tnejn fil tagħha post, segwit minn erbgħa. U issa inti għandek tip ta 'kontrina, u dan huwa tip ta 'karatteristika ta 'algoriżmu bħal Merge Sort, kontrina fil-memorja. Liema kienet l-linja li jmiss tal-istorja? X'għandi I jkun qed jiffoka fuq li jmiss? Id-nofs tal-lemin tal-xellug nofs, Liema hija sitta u tmienja. So let me biss pass permezz ta 'dan mingħajr belaboring il-punt wisq. Sitta u tmienja, allura sitta hija magħżula, tmienja huwa magħżul. Jingħaqdu flimkien bħal dik, u issa l-pass kbir li jmiss huwa, naturalment, isolvi l-nofs tal-lemin minn l-ewwel pass ta 'din algoritmu. Allura aħna niffukaw fuq waħda, tlieta, seba ', ħamsa. Aħna mbagħad tiffoka fuq in-nofs xellugi. Il-half-xellug ta 'dik, l-nofs tal-lemin tal- li, u mbagħad jingħaqdu f'waħda u tlieta. Imbagħad il-nofs tal-lemin, mbagħad titħalla nofs ta 'dan, allura l-nofs tal-lemin ta' dan. Jingħaqdu fil, u issa liema pass jibqa? Jingħaqdu in-nofs xellugi kbar u l-big nofs tal-lemin, sabiex wieħed jinżel hemmhekk, imbagħad tnejn, imbagħad tlieta, imbagħad erba, allura ħames, allura sitta, allura seba ', imbagħad tmienja. Allura issa għaliex dan huwa finalment tiżvela, speċjalment jekk nu logaritmi aktar ġeneralment pjuttost jaħarbu inti, inqas fil-memorja riċenti? Ukoll, avviż l-għoli ta 'dan il-ħaġa. Kellna tmien elementi, u aħna maqsuma lilha mill tnejn, minn tnejn, bi tnejn. Allura log bażi tnejn tmienja tagħtina tlieta. U trust me fuq li jekk a imċajpra ftit fuq dak. Iżda log bażi tnejn ta 'tmienja hija tlieta, hekk aħna ghamilt tliet saffi ta 'amalgamazzjoni. U meta aħna magħquda elementi, kif ħafna elementi ma nħarsu lejn fuq kull waħda minn dawk il-ringieli? A total ta n, id-dritt? Minħabba li jingħaqdu l-filliera ta 'fuq, anke jekk aħna ma kien frammentat, aħna finalment mimsus kull numru darba. U fit-tieni ringiela, biex jingħaqdu dawn il-listi ta 'daqs tnejn, kellna tmissx kull element darba. U allura hawnhekk verament b'mod ċar fl-aħħar ringiela, kellna tmissx kull wieħed minn dawk Elementi darba, imma darba biss, hekk hawnhekk tinsab, allura, log n tagħna n. U issa biss biex jagħmlu l-affarijiet ftit aktar formali għal ftit mument, jekk inti kellhom issa tanalizza din fuq tip ta 'livell ogħla u jippruvaw biex jiddeċiedu, sew kif jista inti tmur dwar jesprimu l-running time ta 'dan algoritmu biss billi tħares lejn dan u mhux bl-użu ta 'eżempju artifiċjali? Well, kemm ħin inti tgħid a pass bħal dan bl-isfar se tieħu, jekk n <2 ritorn? Li l-O kbira ta 'dak? So jien jaraw wieħed, hekk pass wieħed, forsi żewġ passi għaliex dan huwa jekk u mbagħad jirritornaw, imma hija ħin kostanti, id-dritt? Allura aħna qal O (1), u li l- kif I ser jesprimu dan. T, jkun biss running time. n huwa d-daqs ta 'l-input, hekk T (n), biss mod fancy ta 'tgħid it-tmexxija ħin input mogħti d-daqs n se tkun fuq l-ordni ta 'żmien kostanti, fil O (1). Iżda altrimenti, dak dwar dan? Kif inti tesprimi l- żmien ta 'din il-linja isfar running? T ta 'dak? Tista 'tip ta' iqarrqu hawn u iwieġeb il-mistoqsija tiegħi ċiklikament. Allura jekk il-ħin jibda fil ġenerali aħna biss ngħid huwa T (n). U issa int tip ta 'punting hawn u qal, ukoll, biss issolvi in-nofs xellugi, u mbagħad issolvi l-nofs tal-lemin. Kif tista aħna simbolikament jirrappreżentaw l-running time ta 'din il-linja isfar? T ta 'dak? X'hemm-daqs tal-input? n matul tnejn. Għaliex ma I biss jgħidu li? U allura dan hu T ieħor (n / 2) u mbagħad darb'oħra, jekk I jingħaqdu żewġ nofsijiet magħżula, kemm elementi ħafna jien ser li jkollhom tmissx total? n. So I tista 'tesprimi dan, biss sabiex ikunu tip ta 'fancy, bħala l-running time b'mod ġenerali. T (n) huwa biss il-ħin running ta 'T (n / 2), plus T (n / 2), ħalla nofs u nofs tal-lemin, plus O (n), li huwa probabbilment n passi, imma forsi, jekk jien jużaw żewġ swaba, huwa darbtejn daqs passi, imma hija lineari. Huwa xi numru ta 'passi li l-fattur ta 'n, hekk aħna jistgħu jifformulaw dan bħala dan. U dan huwa fejn issa aħna ser Punt għall- lura l-iskola għolja matematika textbook tagħna aħna qed li rikorrenza finalment jispiċċa daqs dan, n drabi log n, jekk inti fil-fatt tagħmel out l-matematika b'mod aktar formali. Allura dak biss żewġ perspettivi. Wieħed numerikament bi hard-kodifikati eżempju rappreżentattiv jużaw tmien numri, u aktar ħarsa ġenerali lejn kif sirna hemmhekk. Imma x'hemm verament interessanti hawn hija, għal darb'oħra, dan il-kunċett ta 'ċikliżmu. Jien ma jużaw għall loops. Jien tip ta 'tiddefinixxi xi ħaġa f'termini ta nnifisha, mhux biss ma 'dan funzjoni matematika, iżda wkoll f'termini ta 'dan il-kodiċi psewdo. Dan il-kodiċi psewdo huwa rikursivi f'dak tnejn ta 'linji tagħha huwa essenzjalment javżak li tmur jużaw ruħha li ssolvi iżgħar problema ta 'daqs iżgħar, u mbagħad għal darb'oħra u għal darb'oħra u għal darb'oħra sakemm aħna Whittle dan stabbiliti għal din l-hekk imsejħa każ bażi. Mela ejja attwalment jiġbed aktar konvinċenti take-away minn dan kif ġej. Let me go fis gedit u tieħu nħarsu lejn uħud mill-kodiċi sors tal-lum, b'mod partikolari f'dan l-eżempju hawn. Sigma 0, li apparentement żżid in-numri wieħed permezz n. Mela ejja ara x'hemm familjari u mhux familjari hawn. L-ewwel għandna koppja ta ' jinkludi, b'hekk m'hemm xejn ġdid. Prototip. Jien imċajpra ftit fuq dan wara ftit jiem, imma dak li ma aħna ngħidu prototip ta 'funzjoni hu? UDJENZA: [inaudible]. SPEAKER 1: X'hemm li? UDJENZA: Aħna jħabbar dan. SPEAKER 1: Aħna jħabbar dan. Allura inti qed jgħallmu Clang, ħej, mhux attwalment timplimenta dan għadu, iżda x'imkien fil dan il-fajl, preżumibbilment, se tkun funzjoni msejħa liema? Sigma. U dan huwa biss wegħda li li għaddej biex teżamina bħal dan. Huwa ser jieħu integer bħala input-- u I tista 'tkun aktar espliċita u jgħidu int n --and huwa ser jirritorna l int, iżda mezzi punto virgola, mm, jien ser tikseb madwar biex jiġi implimentat dan ftit aktar tard. Għal darb'oħra, Clang huwa dumb. Huwa biss ser tkun taf liema inti tgħid li fuq għal isfel, għalhekk għandna bżonn biex tagħti mill-inqas huwa ħjiel ta 'dak li ġejjin. Issa ejja nħarsu lejn prinċipali hawnhekk. Ejja iscroll hawn u ara dak prinċipali qed tagħmel. Mhuwiex dak twil ta 'funzjoni, u fil-fatt il tibni hawnhekk huwa familjari. Niddikjara n varjabbli, u mbagħad I jiffittaw bis-utent mill-ġdid u għal darb'oħra għal numru sħiħ pożittiv jużaw getInt, u biss ħruġ minn dan loop ladarba l-utent ikun ikkonforma. Do Filwaqt, konna użati biex jiffittaw bis-utent b'dan il-mod. Issa dan huwa interessanti. Niddikjara li int imsejħa "risposta." I tassenja din il-valur tar-ritorn ta 'funzjoni msejħa "sigma." I do not know dak li ma s'issa, iżda I remember tiddikjarah mument ilu. U mbagħad jien tgħaddi fil- valur li l-utent ittajpjat fil, n, u mbagħad I tirrapporta l-risposta. Well ejja iscroll lura għal ftit mument. Ejja imorru quddiem fis dan id-direttorju, jagħmlu sigma 0, u fil-fatt imexxu dan il-programm u tara x'jiġri. Mela jekk jien aqbad u run dan il-programm, ./sigma-0, u I tip fil pożittiva integer bħall tnejn, Sigma, bħala s-simbolu Grieg jimplika, huwa biss ser jammontaw-numri kollha mill- żero fuq sa tnejn. Allura 0 plus 1 plus 2. Allura dan għandu nisperaw tagħti me 3. Li kollox huwa qed jagħmel. U bl-istess mod, jekk I run dan jerġa u I tagħtiha n-numru tlieta, li għamilhom 3 plus 2, b'tali mod li 5, flimkien ma '1 għandu jagħti me 6. U mbagħad jekk niġi verament crazy u tibda ittajpjar f'numri akbar, hija għandha tagħti me somom akbar u akbar. Allura li kollox. Allura dak li ma sigma look like? Ukoll, huwa pjuttost sempliċi. Huwa mod kif aħna jista 'jkollha implimentati dan għall-aħħar ftit ġimgħat. "Int" se jkun it-tip ta 'ritorn. Sigma huwa l-isem, u li tieħu m varjabbli minflok n. I ser bidla li top up. Imbagħad din hija biss check sanità. Aħna ser tara għaliex fil-mument. Issa Niddikjara varjabbli ieħor, somma, initialize għal żero. Imbagħad I jkollhom din Għal loop mtennija, apparentement għaċ-ċarezza, mill-i = 1 fuq sa = m, li huwa ikun x'ikun l-utent ittajpjat fil, u mbagħad I inkrement-somma bħal dan. U mbagħad jirritornaw is-somma. Allura koppja ta 'mistoqsijiet. Wieħed, I jitolbu fil-kummenti tiegħi li dan jevita riskju ta 'loop infinita. Għaliex kieku tgħaddi f'numru negattiv jinduċu, potenzjalment, loop infinita? UDJENZA: Inti qatt ma ser ikollok jilħqu m. SPEAKER 1: Qatt jilħqu m. Iżda m huwa mgħoddi fil, so ejja jikkunsidraw eżempju sempliċi. Jekk m huwa mgħoddi fil mill- utent bħala wieħed negattiv. Irrispettivament ta 'prinċipali. Main jipproteġi lilna minn dan ukoll, hekk jien biss tkun verament anali ma ' sigma li wkoll tagħmel żgur li l-input ma tistax tkun negattiva. Mela jekk m huwa negattiv, xi ħaġa bħal waħda negattiva. X'hemm jiġri? Well, I se nikseb initialized għal wieħed, u mbagħad i se tkun inqas minn jew ugwali għal m? Stand by. Li was-- ejja ma, ejja nix din l-istorja. I ma jistaqsu din il-kwistjoni, minħabba ir-riskju li jiena jalludi għal huwa ma jiġri għaliex i huwa dejjem se jkun OK than-- akbar, I tinġibed din id-domanda. OK. Ejja tiffoka biss fuq din il-parti hawn. Għaliex ma Niddikjara xi barra tal-linja? Avviż fuq il-linja 49 stajt ddikjarat i ġewwa tal-loop, imma online 48 stajt ddikjaraw madwar barra. Yeah. UDJENZA: [inaudible]. SPEAKER 1: Sure. Allura l-ewwel u qabel kollox I ċertament ma tixtieq li tiddikjara u initialize somma għal żero ġewwa tal- loop fuq kull iterazzjoni, minħabba li dan itellef b'mod ċar l- għan tal jingħaddu up-numri. Nixtieq iżommu jinbidlu il-valur lura għal żero. U wkoll, x'hemm ieħor aktar arcane raġuni għal dik l-istess deċiżjoni disinn? Yeah. UDJENZA: [inaudible]. SPEAKER 1: Eżattament. Irrid li jkollhom aċċess għaliha barra tal-linja wisq fuq dak line? Fuq 53. U bbażat fuq ir-regola tagħna ta 'thumb minn koppja ta 'lectures ilu, varjabbli huma scoped, verament, l- braces kaboċċi li jinkludu lilhom. Mela jekk jien ma jiddikjarawx somma ġewwa ta 'dawn ċingi kaboċċi ta' barra, I ma tistax tużah fil-linja 53. Fi kliem ieħor, jekk I ddikjarat somma hawn, jew saħansitra fi ħdan il- Għal loop, I ma setax aċċess għaliha fi 53. Il-varjabbli tkun marret effettiv. Allura ftit ta 'raġunijiet hemmhekk. Imma issa ejja mmorru lura u tara x'jiġri. Allura sigma gets imsejħa. Hija żżid up 1 plus 2, jew 1 plus 2 plus 3, u mbagħad lura l-valur, taħżnu fil-tweġiba, u printf hawn huwa għaliex jien jaraw fuq l-iskrin. Allura dan huwa dak li aħna ser sejħa ta 'iterattiv approċċ, fejn iterazzjoni biss tfisser li tuża loop. A Għal loop, linja Filwaqt, Do Filwaqt loop, biss tagħmel xi ħaġa mill-ġdid u għal darb'oħra u għal darb'oħra. Iżda sigma huwa tip ta 'funzjoni pulita fil li I jista 'jimplimenta b'mod differenti. What dwar dan, li biss sabiex ikunu tip ta 'kessaħ, let me verament jeħles ta 'lott ta' distrazzjoni għaliex din il-funzjoni huwa verament pjuttost sempliċi. Ejja Whittle l-isfel biss għal-linji ewlenin tagħha erba u jeħles l- kummenti u braces kaboċċi. Dan huwa tip ta 'mind-blowing implimentazzjoni alternattiva. Kull dritt, forsi mhux nfiħ mind-, imma hija tip ta 'sexier, id-dritt, li tħares lejn dan tant aktar konċiż. Bil biss erba 'linji ta' kodiċi, I l-ewwel ikollhom dan il-kontroll sanità. Jekk m hija inqas minn jew ugwali għal żero, sigma jagħmel ebda sens. Huwa biss suppost li jkun F'dan il-każ għal numri pożittivi, hekk jien biss se ritorn żero arbitrarjament sabiex inkunu inqas ikollhom xi hekk imsejħa każ bażi. Iżda hawn l-sbuħija. Il-intier ta 'din l-idea, li żżid l- b'numri minn 1 sa n, jew m f'dan il-każ, jista 'jsir billi tip ta' tgħaddi l-Buck. Ukoll, dak li huwa s-somma ta '1 sa m? Well, inti taf liema? Huwa l-istess bħala s-somma ta 'm flimkien mat-total ta '1 sa m minus 1. Well inti taf liema? X'hemm sigma ta m minus 1? Ukoll, jekk inti tip ta 'ssegwi dan loġikament, huwa l-istess bħal m minus 1 plus sigma tat m minus 2. Allura inti tista 'tip ta' just-- dan huwa simili, jekk int biss jippruvaw idejqu xi ħabib u dawn nistaqsik mistoqsija, inti tip ta jirrispondu bil-kwistjoni, inti tista 'tip ta' jżomm tgħaddi l-Buck. Imma x'hemm importanti hu li jekk inti żżomm jagħmlu l-kwistjoni iżgħar u iżgħar, int ma tistaqsi x'hemm sigma ta n, x'hemm sigma ta n, x'hemm sigma ta n? Inti qed tistaqsi x'inhu sigma ta n, x'hemm sigma ta n minus 1, x'hemm sigma tal minus 2 n? Eventwalment mistoqsija tiegħek se ssir liema? X'inhu sigma ta 'wieħed jew żero, xi valur żgħir ħafna, u hekk kif inti nikseb li, ħabib tiegħek, inti mhux ser jistaqsu l-istess kwistjoni mill-ġdid, int biss se ngħid, oh huwa żero. We qed isir playing dan it-tip ta 'logħba ċiklika stupid. Allura recursion huwa l-att fil-programmazzjoni ta 'funzjoni ssejjaħ lilha nnifisha. Dan il-programm, meta miġbura u run, huwa ser jaġixxu eżattament l-istess mod, imma x'hemm importanti hija li fi ħdan ta 'funzjoni msejħa sigma, hemm linja ta 'kodiċi wherein aħna qed ssejjaħ lilna nfusna, li normalment jkun ħażin. Per eżempju, jekk dak I-ewwel kkompilata dan, sabiex tagħmel sigma-- jagħmlu sigma 1 ./sigma-1. Numru sħiħ pożittiv, jekk jogħġbok, 50 1275. Allura dak li l-funzjoni jidher li jkun, ibbażata fuq test wieħed, korretta. Imma x'jiġri jekk I jiksbu ftit perikolużi u ħassar l-hekk imsejħa każ bażi, u biss jgħidu, ukoll jien biss tagħmel dan aktar ikkumplikat milli hi. Ejja biss kkalkulata l-sigma billi mu mbagħad jiżdied fil sigma ta 'wieħed m nieqes? Ukoll, dak li jiġri hawn? Ejja zoom out. Ejja recompile-programm, isalvawh, recompile-programm, u mbagħad lesti ./sigma 1 zooming, jidħol numru sħiħ pożittiv jekk jogħġbok, 50. Kemm inti lest li fess li jaraw li? OK. Allura dan jista 'jiġri għal numru ta 'raġunijiet, u franchement din il-ġimgħa aħna qed waslet biex jagħtuk aktar minnhom. Iżda f'dan il-każ, ipprova għal raġuni lura x'seta 'ġara hawn? Tort Segmentazzjoni, għidna aħħar żmien, jirreferi għal segment ta 'memorja. Xi ħaġa ħażina ġara. Imma dak ma kien mekkanikament li marru awry hawnhekk għaliex ta 'tneħħija tiegħi ta 'dik hekk imsejħa każ bażi, fejn I lura valur hard-coded? What do you think marret ħażin? Yeah. UDJENZA: [inaudible]. SPEAKER 1: Ah. Mistoqsija tajba. Allura l-daqs tan-numru li kien I jingħaddu up ltqajna daqshekk kbira li jinqabeż id-daqs tal-ispazju memorja. Idea tajba, iżda mhux fundamentalment se jikkawżaw crash. Li jista 'jikkawża overflow numru sħiħ, fejn il-bits ftit flip fuq u allura aħna żball verament kbir numru simili għal numru negattiv, iżda li hi stess mhux se jikkawża crash. Minħabba fl-aħħar tal- jum ta int għadu 32 bits. Int mhux ser aċċidentalment steal daqsxejn 33. Iżda riflessjoni tajba. Yeah. UDJENZA: [inaudible]. SPEAKER 1: Il-metodu qatt tieqaf taħdem, u tabilħaqq hija ssejjaħ lilha nnifisha mill-ġdid u għal darb'oħra u għal darb'oħra u għal darb'oħra u għal darb'oħra, u ħadd minn dawk il-funzjonijiet qatt finitura minħabba linja unika tagħhom ta ' kodiċi jitlob themself ġdid u għal darb'oħra u għal darb'oħra. U x'hemm verament jiġri hawn, u issa aħna tista tip ta 'tiġbed dan pictorially. Let me go fuq għal stampa għal ftit mument. Din hija stampa, li eventwalment se tlaħħam f'aktar dettall, ta 'x'inhu għaddej ġewwa tal-memorja tal-kompjuter tiegħek. U jirriżulta li fuq il-qiegħ ta 'din l-istampa hija xi ħaġa imsejjaħ il-munzell. Din hija blokki ta ' memorja, blokki ta 'RAM, li jinsab biss jintuża kwalunkwe ħin funzjoni huwa msejjaħ. Kwalunkwe ħin li inti, programmer, sejħa funzjoni, is-sistema operattiva, bħal Mac OS, Windows, jew Linux, grabs mazz ta 'bytes, forsi ftit kilobytes, forsi ftit megabytes tal-memorja, idejn minnhom lilek, u mbagħad tikri inti tmexxi funzjoni tiegħek billi tuża kwalunkwe varjabbli għandek bżonn. U jekk inti mbagħad sejħa ieħor funzjoni u funzjoni oħra, ikollok porzjon ieħor ta 'memorja u porzjon ieħor ta 'memorja. U tabilħaqq, jekk dawn trejs aħdar minn Annenberg jirrappreżentaw li l-memorja, hawn hu dak li jiġri l-ewwel ħin inti sejħa sigma funzjoni. Huwa simili tqegħid trej bħal dan fuq x'hemm inizjalment munzell vojta. Iżda mbagħad jekk dik trej jitlob huwa stess, biex ngħidu hekk, ssejjaħ eżempju ieħor ta sigma, li l- simili tistaqsi s-sistema operattiva, ooh, jeħtieġ memorja ftit aktar, jagħtu me li. U allura jiġrilha piled fuq fuq nett. Imma x'hemm prinċipali hawnhekk hija li l-ewwel trej għadha hemm, minħabba li hu invokat din it-tieni trej. Issa sadanittant, sigma sejħa sigma, thats simili tistaqsi għall-memorja aktar. Gets piled fuq matul hawn. sigma sejħa sigma, li l-ieħor trej li gets piled fuq hawn. U jekk inti żżomm tagħmel dan, eventwalment, it-tip ta 'Mappa Dan viżwali għal dak chart, dak li għaddej biex jiġri bil-munzell ta 'dixxijiet? Huwa ser jaqbeż l-ammont tal-memorja tal-kompjuter tiegħek. U hekk kif dan trej aħdar jaqbeż il-linja orizzontali hawn fuq munzell u fuq din il-kelma borġ, li aħna ser terga 'lura għal fil-futur, li hija ħaġa ħażina. Il borġ huwa differenti segment ta 'memorja, u jekk inti let dawn trejs pile u pile fuq, int ser taqbeż segment tiegħek stess ta 'memorja, u programm huwa tabilħaqq se crash. Issa bħala twarrib, din l-idea ta recursion, għalhekk, b'mod ċar jista 'jwassal għal problemi, iżda mhuwiex neċessarjament ħaġa ħażina. Minħabba tikkunsidra, wara kollha, how-- u forsi dan jieħu xi jkollna użati li --how eleganti jew kif sempliċi li l-implimentazzjoni tal sigma kien. U aħna ma tkunx qed tmur għall-użu recursion kollha li ħafna fl CS50, iżda fil CS51, u verament xi klassi fejn inti jimmanipulaw data strutturi bħal siġar, jew siġar tal-familja, li għandhom xi ġerarkija, huwa super, super utli. Issa, bħala twarrib, sabiex inti bħala jaspiraw xjenzjati tal-kompjuter huma familjari ma 'wħud mill-Google ċajt ġewwa, jekk inti tmur biex Google u inti tfittex up dak huwa l- definizzjoni ta ', ngħidu aħna, recursion, jidħol. Uh-huh. Bħala twarrib, I jinġibed up ftit. Dan kien simili 10 minuta ta ' procrastination dalgħodu. Jekk inti wkoll Google "askew," avviż bl-inklinar ras tiegħek slightly-- u allura dan huwa wieħed forsi aktar atroċi ta 'kulħadd peress xi ħadd jintefqu bħal ġurnata tagħhom jimplimentaw din xi snin ago-- come fuq. Oh, wait-- thats bug. Allura taħdem fuq waħda mill- websajts akbar fid-dinja huma dawn il-bajd tal-Għid stupid ftit. Huma probabbilment jikkunsmaw numru nontrivial ta 'linji ta' kodiċi biss hekk li jista 'jkollna affarijiet gost ftit bħal dik. Imma l-anqas issa ikollok xi wħud minn dawk ċajt ġewwa. Issa ejja tagħti ħarsa lejn uħud mill- abjad tinsab konna kienu javżak ta tard, u tibda titqaxxar lura wħud mis-saffi teknikament sabiex inti verament jifhmu dak li kien għaddej u inti tista 'tifhem xi wħud mill-theddidiet, bħal Shellshock, li issa bdew isiru fuq quddiemnett ta 'l kulħadd attenzjoni, għall-inqas fil-midja. Allura hawnhekk hija funzjoni sempliċi ħafna li jirritorna xejn, bla effett. Isem tagħha huwa swap. Huwa jieħu f'żewġ varjabbli u dan jirritorna xejn. Jieħu fil au b. Allura dimostrazzjoni ta 'malajr. Aħna miġjuba dawn il-up. Aħna tista 'ukoll tieħu ftit break hawn għal ftit mument u jkollhom ftit xi ħaġa li tixrob. Jekk xi ħadd ma mind tgħaqqad me up hawn għal ftit mument. Kif dwarek fil-shirt maroon? Come fuq up. Just l-waħda llum. Grazzi, għalkemm. Kull dritt, u għandna ġejjin up li hawn? X'hemm isem tiegħek? SPEAKER 4: Laura. SPEAKER 1: Laura. Come fuq up. Allura Laura, sfida sempliċi ħafna llum. Nizza li jissodisfaw yo. Kull dritt. Allura aħna għandna xi ħalib matul hawn u għandna xi meraq tal-larinġ hawn fuq u xi tazzi li aħna misluf mill Annenberg llum. SPEAKER 4: Mislufa. SPEAKER 1: U se jimxi 'l quddiem u jagħtuk nofs tazza ta 'dan. Kull dritt. U aħna ser jagħtuk nofs ħġieġ tal-ħalib. Oh, u biss sabiex inti tista ' ftakar dak li dan kien simili, I mfakkar li jġibu dan up u fuq llum. Okay. Jekk inti ma mind, ejja ara, irridu tista 'tpoġġihom fuq nuċċalijiet tiegħek stess jekk inti tixtieq. Dan ser ikun id-dinja mill-għajnejn Laura. Kull dritt. Allura mira tiegħek, jingħataw żewġ tazzi tal- likwidu hawn, ħalib u meraq tal-larinġ, hija tpartit iż-żewġ kontenuti hekk li l- meraq tal-larinġ tmur fil-tazza tal-ħalib u l-ħalib tmur fis l-tazza meraq tal-larinġ. SPEAKER 4: Do I nikseb tazza ieħor? SPEAKER 1: Jien ferħan inti tlabt, għalkemm kien ikun footage ħafna aħjar jekk inti ma kinux mitluba. Iżda iva, nistgħu noffrulek terz tazza li l-vojta, tal-kors. Kull dritt. Allura tpartit l-kontenut hemmhekk. Sbieħ ħafna. Tajjeb ħafna. Inti qed tagħmel dan rimarkabbilment b'attenzjoni. U pass tlieta. Kull dritt. Eċċellenti. A round kbir ta 'applause ikun tajjeb għall Laura. Kull dritt. Għandna rigal firda ftit għalik, iżda let me jieħdu dawn. Grazzi tant. Allura eżempju sempliċi, għalkemm, biex turi li jekk inti tagħmel tixtieq li tpartit l-kontenut ta 'żewġ kontenituri, jew ejja jsejħulhom varjabbli, għandek bżonn xi ħażna temporanja għal stadju wieħed tal-kontenuti fil-każ li inti tista 'attwalment jagħmlu l-swap. Allura fil-fatt, dan is-sors kodiċi up here fl C huwa rappreżentattiv tal eżattament dak. Jekk il-meraq tal-larinġ kien u l-ħalib kien b, u ridna li tpartit it-tnejn, inti tista 'tipprova xi ħaġa kreattiva billi tferra wieħed fil-oħra, iżda li probabbilment ma jispiċċaw partikolarment tajjeb. U hekk aħna jużaw tazza terz, call dan TMP, T-M-P b'konvenzjoni, u tpoġġi l-kontenut tal- ĠU f'dak, allura tpartit tazza waħda, allura tpoġġi l-ĠU fil- tazza oriġinali, b'hekk kisba, eżattament kif Laura għamlet, l-swap. Mela ejja do eżattament dan. Let me imorru quddiem u tiftaħ up eżempju li l- attwalment imsejħa "l-ebda tpartit, "għaliex din m'hijiex kif sempliċement isir kif inti tista 'taħseb. Allura f'dan il-programm, avviż li Jien jużaw stdio.h, ħabib antik tagħna. Għandi l-prototip għall swap up hemm, li tfisser l-implimentazzjoni tagħha probabbilment stabbiliti hawn taħt, u ejja ara dak dan prinċipali programm għaddej biex tagħmel għalija. I ewwel niddikjara int x gets wieħed, u int y gets tnejn. Allura taħseb ta 'dawk bħala ĠU u ħalib, rispettivament. U mbagħad I biss ikollhom printf qal x hija din u y huwa dan, biss hekk I tista ' viżwalment tara x'inhu għaddej. Imbagħad I printf titlob li jien iskambji it-tnejn, u mbagħad I jistampa jsostnu li dawn qed biddlu, u I jistampa xuy darb'oħra. Allura stabbiliti hawn fl swap hija eżattament dak Laura għamlet, u eżattament dak li rajna fuq l-iskrin mument ilu. Mela ejja imorru quddiem u jkun sorely diżappuntat. Jagħmlu l-ebda tpartit, u run ebda swap, zooming fl fuq l-output hawn. Ikteb x hija l-1, y huwa 2, jagħmlu skambju skambjat. x għadu 1, u y għadu 2. Allura anke jekk, franchement, dan jistenna eżattament simili, għalkemm aktar teknikament, dak Laura għamilt, ma jidhirx li jaħdmu. Allura għaliex huwa li? Ukoll, jirriżulta li meta aħna tikteb programm bħal dan li tkun kemm prinċipali, enfasizzat hawnhekk, u mbagħad funzjoni oħra, bħal tpartit, enfasizzat hawnhekk, li jitlob, id-dinja jistenna ftit xi ħaġa bħal dawn trejs mument ilu. Meta prinċipali ewwel gets imsejħa, thats simili tistaqsi sistema operattiva għal daqsxejn ta 'memorja għal kwalunkwe lokali varjabbli bħall x u y li għandu prinċipali, u jispiċċaw hemm dritt. Imma jekk jitlob ewlenin tpartit, u prinċipali jgħaddi tpartit żewġ argumenti, A u B, meraq tal-larinġ u l-ħalib, mhuwiex simili għoti-meraq tal-larinġ u l-ħalib għall Laura. What a kompjuter ma, huwa tgħaddi kopji tal-meraq tal-larinġ u kopji tal-ħalib li Laura, b'tali mod li x'hemm finalment ġewwa ta 'dan trej huwa l-waħda valur u tnejn, jew ĀU u tal-ħalib, iżda kopji tagħhom, hekk li f'dan il-punt fl-istorja, hemm huwa ĠU u ħalib f'kull wieħed minn dawn dixxijiet. Hemm wieħed u tnejn f'kull wieħed minn dawn dixxijiet, u l-funzjoni tpartit tabilħaqq taħdem. Huwa iskambji minnhom ġewwa tat-trej tieni topmost, iżda li iskambji m'għandha l-ebda impatt. U bbażata fuq ftit biss prinċipju bażiku konna tkellmu dwar qabel, u tabilħaqq ftit minuti ilu, liema jista 'jispjega għaliex qed jinbidlu au b ġewwa ta 'swap m'għandha l-ebda effett fuq xu y, anki jekk I għadda xuy għall-funzjoni tpartit. X'hemm-kelma ewlenija hawnhekk li jista simplistikament jispjegaw? I think I smajt li hawn? UDJENZA: Ritorn. SPEAKER 1: Ritorn? Mhux ritorn. Ejja jmorru ma waħda oħra. X'hemm li? UDJENZA: [inaudible]. SPEAKER 1: OK, hekk return-- nistgħu jagħmlu x-xogħol tar-ritorn fl-istorja, iżda hemm spjegazzjoni saħansitra aktar sempliċi. UDJENZA: Ambitu. SPEAKER 1: Ambitu. I ser tieħu ambitu. Allura ambitu, ftakar fejn x tagħna uy iddikjarat. Huma qed iddikjarata ġewwa tad ewlenija dritt up here. au b, sadanittant, huma ddikjarat b'mod effettiv ġewwa tal tpartit, pjuttost mhux fil l-braces kaboċċi iżda xorta fil-qasam ġenerali ta 'swap. U għalhekk tabilħaqq, au b jeżistu biss fi ħdan dan trej minn Annenberg, dan tieni blokki ta 'kodiċi. Allura aħna qed tabilħaqq jinbidlu l-kopja, iżda li mhux verament dak kollu li utli. Mela ejja tagħti ħarsa lejn dan il-livell ftit iktar baxx. Jien se jmorru lura fis il Sors Directory, u jien ser ewwel zoom fil hawn, u biss biex tikkonferma li jien f'dan tieqa terminal akbar, il-programm għadu iġib ruħu bħal dik. Ejja ngħidu issa li din mhuwiex intenzjonat. Ovvjament jien ridt swap biex xogħol, u għalhekk iħoss bħal bug. Now I tista 'tibda żżid lott ta 'printf lejn kodiċi tiegħi, stampar x hawn fuq, y fuq Hawnhekk, hawn, b hawn fuq. Iżda franchement, dan huwa probabbilment dak inti kont qed tagħmel għal ftit ġimgħat issa, fil-ħinijiet tal-uffiċċju u fid-dar meta jkunu qed jaħdmu fuq psets jippruvaw isibu xi bugs. Imma int ser tara, jekk inti ma jkunux diġà, dik il-problema sett tlieta tintroduċi inti għal kmand imsejħa GDB, fejn GDB, debugger GNU, nnifisha jkollha mazz sħiħ ta ' karatteristiċi li jistgħu attwalment ejjew nifhmu sitwazzjonijiet bħal dan, iżda aktar compellingly, isolvu problemi u jsibu bugs. So jien ser jagħmlu dan. Minflok ./noswap, jien minflok tmur jiddekorri ./noswap GDB. Fi kliem ieħor, jien ser jimxu tiegħi programm mhux Bash, ħabib ġdid tagħna llum. Jien ser jimxu tiegħi noswap programm ġewwa ta 'dan il-programm l-oħra msejħa GDB, li huwa debugger, li huwa programm li, imfassla biex tgħin inti bnedmin isibu u neħħi bugs. Mela jekk jien hit Run hawn, hemm ammont atroċi tat-test li int verament qatt ma għandek taqra. Huwa essenzjalment distrazzjoni mill-pront, li Jien ser hit Control-L biex tikseb up fil-quċċata hemmhekk. Dan huwa l-GDB pront. Jekk I tixtieq li tmexxi dan il-programm issa, kif dan iqarrqu folja ftit fuq illum slide jissuġġerixxi, Run hija l-ewwel jikkmanda li aħna fisser li tintroduċi. U jien biss ser tip run up here ġewwa tal GDB, u tabilħaqq dam programm tiegħi. Issa hemm xi addizzjonali riżultati tal-iskrin bħal dan, iżda li GDB sempliċement anali u tgħidilna x'inhu għaddej. Inti ma verament ikollhom għalfejn tinkwieta dwar dawn id-dettalji dritt issa. Imma x'hemm verament jibred dwar GDB, jekk nagħmel dan again-- Kontroll-L ikklerja l screen-- let me go quddiem u tip "break prinċipali," u b'hekk, meta I hit Ikteb, iffissar x'hemm tissejjaħ punt tal-qasma fil noswap.c, linja 16, li huwa fejn GDB dehret-programm tiegħi attwalment huwa, funzjoni tiegħi fil-fatt hu. Dan aħna ser ninjoraw għal issa iżda li l-indirizz fil-memorja speċifikament ta 'din il-funzjoni. Allura issa meta I tip run, Avviż x'hemm jibred hawn. Programm My waqfiet fil-linja I qal GDB li nieqaf eżekuzzjoni fi. So I ma jkollhomx biex issa bidla kodiċi tiegħi, żid xi tal printf, recompile dan, terġa 'ssir dan, bidla, żid ftit tal printf, isalvawh, recompile dan, run. I tista 'biss walk permezz tal-programm tiegħi pass pass pass fil-veloċità tal-bniedem, mhux fil-tip Intel-ġewwa ta 'veloċità. Allura issa avviż din il-linja jidher hawn, u jekk immur lura program tiegħi fil gedit, avviż li dan huwa attwalment l-ewwel linja tal-kodiċi. Hemm linja 16 gedit. Hemm linja 16 fi ħdan GDB, u anki għalkemm dan interface iswed u abjad mhuwiex kważi bħala utent friendly, dan ifisser dik il-linja 16 ma tkunx ġiet esegwita s'issa, iżda huwa dwar li jkun. So tabilħaqq jekk I tip print x, mhux printf, biss print x, I nikseb xi valur fittizji hemmhekk ta 'żero, minħabba x ma ġiex initialized s'issa. So jien ser tip li jmiss, jew, jekk inti tixtieq li tkun fancy, biss N għal li jmiss. Imma meta I tip li jmiss tidħol, issa Avviż timxi fuq linja 17. Allura loġikament, jekk stajt esegwiti linja 16 u I issa tip print x, x'għandi tara I? Wieħed. U issa dan huwa ċertament konfuża. $ 2 huwa biss mod fancy ta ', jekk inti tixtieq li jirreferu għal dak il-valur aktar tard, inti tista 'tgħid "dollaru sinjal tnejn." Huwa simili referenza lura. Iżda għal issa, biss jinjoraha. X'hemm interessanti hija x'hemm dwar id-dritt tas-sinjal ugwali. U issa jekk jien tip li jmiss darb'oħra u y print, I għandha tara 2. I tista 'wkoll issa jistampaw x darb'oħra, u franchement, jekk jien jkollna ftit konfuż dwar fejn I am, I tista 'tip-lista għall-lista u biss tara xi kuntest madwar il-punt jien attwalment fi. U issa I tista tip jmiss, u hemm x hija l-1. Now I tip li jmiss. Oh, y hija 2. U għal darb'oħra, huwa konfużjoni, minħabba output GDB tal qed jiġi mħalltin ma output tiegħi stess. Imma jekk inti żżomm f'moħħu, billi glancing quddiem u lura fil-kodiċi tiegħek jew li out ġenb ġenb forsi, inti ser tara li verament jien biss titjib permezz tal-programm tiegħi. Imma avviż x'jiġri li jmiss, litteralment. Hawn linja 22. Let me go fuqha, u b'hekk miexja fuq sa 23, u jekk I jistampaw x issa, xorta waħda. U jekk I jistampaw y issa, xorta waħda. Allura din mhix eżerċizzju utli. Mela ejja jerġa 'jagħmel dan. Let me jmorru lura sa l- top u t-tip run darb'oħra. U huwa qal il-programm thats qed debugged bdiet diġà, beda mill-bidu. Iva, ejja tagħmel dan mill-ġdid. U din id-darba ejja do jmiss, jmiss, li jmiss, li jmiss, li jmiss, iżda issa l-affarijiet nikseb interessanti. Issa nixtieq li pass lejn tpartit, so I ma tip li jmiss. I tip pass, u issa jindunax bih qabża me għal-linja noswap.c 33. Jekk immur lura għal gedit, x'hemm linja 33? Dik hija l-ewwel reali linja tal-kodiċi ġewwa ta 'swap. Liema huwa sbieħ, għaliex issa nista tip ta 'poke madwar u nikseb kurjużi dwar x'inhu għaddej verament fil hemmhekk. Let me jistampaw TMP. Whoa. Għaliex ma TMP għandhom xi crazy, valur żibel fittizji? UDJENZA: Ma ġiex initialized. SPEAKER 1: Ma ġiex initialized. U fil-fatt, meta inti tmexxi programm, int tingħata mazz sħiħ ta 'memorja mis-sistema operattiva, imma int ma initialized xi valuri, sabiex ikun x'ikun bits int jaraw hawn, anke jekk huwa dan negattiv big crazy numru, ifisser biss li dawk huma l-fdalijiet mill- xi użu qabel ta 'dak RAM, anki jekk I ma jkunux myself meħtieġa encore. Allura issa jien ser jimxi 'l quddiem u t-tip jmiss, u jekk I issa tip TMP print, x'għandi tara I? Tkun xi tkun il-valur ta 'kien, a huwa l-ewwel argument, biss bħall x kienet l-ewwel Ħaġa jiġu mgħoddija fi, hekk u x għandu jkun l-istess, hekk jistampaw TMP għandhom jistampaw me wieħed. Allura dak li inti ser tara fil sett problema tliet huwa tutorja ta 'tipi fuq GDB, iżda jirrealizzaw li dan huwa l-bidu ta ħarsa lejn għodda li se attwalment jgħinuk issolvi l-problemi għalhekk ħafna aktar effettiv. Dak li aħna qed finalment se jagħmlu l-Erbgħa hija tibda titqaxxar lura ftit saffi u neħħi xi roti ta 'taħriġ. Li ħaġa imsejħa string li konna użati għal xi żmien, aħna qed tmur biex bil-mod jieħdu dik l bogħod minn int u jibda jitkellem dwar xi ħaġa aktar esoterically magħrufa bħala char *, imma aħna qed tmur biex tagħmel dan sbieħ u b'ġentilezza fl-ewwel, anke jekk pointers, kif dawn qed jissejjaħ, tista 'tagħmel xi affarijiet ħżiena ħafna jekk abbużati, billi tħares lejn claymation ftit minn ħabib tagħna Nick Parlante minn Stanford University, professur fil-kompjuter xjenza li tpoġġi flimkien dan preview ta dak li ġejjin dan l-Erbgħa. [Daqq ta 'video] -Hey, Binky. Wake up. Wasal iż-żmien għall-gost pointer. Liema-li? Tgħallem dwar pointers? Oh, Goody! [END daqq ta 'video] SPEAKER 1: Li jistenna inti nhar l-Erbgħa. Aħna ser tara int imbagħad. [Daqq ta 'video] -U Issa, Ħsibijiet Deep, billi Daven Farnham. -Għaliex Aħna jitgħallmu C? Għaliex ma A +? [Rires] [END daqq ta 'video]