1 00:00:00,000 --> 00:00:12,040 >> [Musika nagpe-play] 2 00:00:12,040 --> 00:00:16,460 >> Tagapagsalita 1: Ang lahat ng mga karapatan, ito ay CS50, at ito ang simula ng linggo apat, 3 00:00:16,460 --> 00:00:20,420 at bilang maaari kang narinig na o basahin, ang mundo ay nagtatapos. 4 00:00:20,420 --> 00:00:23,520 Pagpunta sa buong internet May naging kaalaman at kamalayan 5 00:00:23,520 --> 00:00:27,100 sa isang bug sa isang programa, ang isang programming language na tinatawag Bash. 6 00:00:27,100 --> 00:00:32,729 Ito ay na-branded wonderfully bilang Shellshock, o ang Bash pinto, 7 00:00:32,729 --> 00:00:35,485 ngunit ang mga artikulo tulad ng mga ito hindi naging pangkaraniwan. 8 00:00:35,485 --> 00:00:38,807 At sa katunayan, marami sa kanila ang dalhin bumalik mga alaala ng Heartbleed, 9 00:00:38,807 --> 00:00:41,640 saan ay maaari mong napansin sa pindutin muli ito nakaraang tagsibol, na 10 00:00:41,640 --> 00:00:43,980 ay katulad medyo dramatic. 11 00:00:43,980 --> 00:00:47,110 Ngayon ng mga mo dito ngayon, kung gaano karaming mga mayroon kang, 12 00:00:47,110 --> 00:00:50,330 kahit na hindi mo maunawaan kung ano ang lahat ng ito ay tungkol sa, Nalaman ng Shellshock? 13 00:00:50,330 --> 00:00:51,370 14 00:00:51,370 --> 00:00:54,245 Ang lahat ng mga karapatan, at kung paano marami sa inyo may mga computer na mahina? 15 00:00:54,245 --> 00:00:55,680 16 00:00:55,680 --> 00:01:00,250 OK, dapat ay mayroong malayo, malayo sa higit pang mga kamay hanggang ngayon, para sa mga kadahilanang ay dapat namin makita. 17 00:01:00,250 --> 00:01:02,580 >> Tingnan natin ang isang pagtingin sa kung ano ang nangyayari sa media 18 00:01:02,580 --> 00:01:05,304 at pagkatapos ay ipaliwanag ito ng kaunti dito para sa amin technically. 19 00:01:05,304 --> 00:01:07,670 20 00:01:07,670 --> 00:01:11,250 >> Tagapagsalita 2: Mayroon eksperto sa Seguridad nagbabala na ang isang seryosong flaw ng dati 21 00:01:11,250 --> 00:01:15,650 maging tungkol sa makakaapekto sa daan-daang milyun-milyong mga gumagamit ng web sa buong mundo. 22 00:01:15,650 --> 00:01:20,600 Kaya kung ano ang eksaktong ay ang bug na naging tinatawag Shellshock, at kung ano ang ginagawa nito? 23 00:01:20,600 --> 00:01:23,720 24 00:01:23,720 --> 00:01:28,910 Well, Shellshock ay kilala rin bilang Bash bug, ang software na ito nananamantala. 25 00:01:28,910 --> 00:01:33,230 Hacker gamitin ang virus upang i-scan mahina sistema ng pagpapatakbo ng Linux at Unix 26 00:01:33,230 --> 00:01:36,300 operating system at pagkatapos ay makaapekto sa mga ito. 27 00:01:36,300 --> 00:01:38,730 Bash ay isang command line shell. 28 00:01:38,730 --> 00:01:43,460 Ito ay nagbibigay-daan utos isyu mga gumagamit upang ilunsad mga programa at mga tampok sa loob ng software 29 00:01:43,460 --> 00:01:45,250 sa pamamagitan ng pag-type sa teksto. 30 00:01:45,250 --> 00:01:49,980 Karaniwang ginagamit ito sa pamamagitan ng mga programmer, at ay hindi dapat na bukas sa mas malawak na mundo, 31 00:01:49,980 --> 00:01:51,590 bagaman nagbabago Shellshock na iyon. 32 00:01:51,590 --> 00:01:54,160 33 00:01:54,160 --> 00:01:57,910 >> Well, worringly, ang ilang mga analyst balaan maaari itong isang mas malaking banta, 34 00:01:57,910 --> 00:02:01,580 dahil Shellshock nagbibigay-daan sa kumpletong kontrol sa isang nahawaang machine, 35 00:02:01,580 --> 00:02:06,030 samantalang Heartbleed pinapayagan lamang hacker upang Spy sa mga computer. 36 00:02:06,030 --> 00:02:09,130 Ito ay kaya malubhang, ito ay na-rate 10 sa 10 37 00:02:09,130 --> 00:02:11,900 para sa kalubhaan ng National Kahinaan Database. 38 00:02:11,900 --> 00:02:15,530 39 00:02:15,530 --> 00:02:20,015 2/3 ng lahat ng mga web server ay nasa panganib, kabilang ang ilang mga computer Mac. 40 00:02:20,015 --> 00:02:22,760 41 00:02:22,760 --> 00:02:25,600 Well, siguraduhin na patch ang iyong mga system ngayon. 42 00:02:25,600 --> 00:02:29,330 Sinuman isang tumatakbong mga website na nagho-host mga apektadong mga operating system 43 00:02:29,330 --> 00:02:31,800 dapat gumawa ng pagkilos sa lalong madaling panahon. 44 00:02:31,800 --> 00:02:35,390 Sinuman na kayang bayaran ito dapat na tumingin sa kanilang pagsubaybay at web application 45 00:02:35,390 --> 00:02:37,355 firewall upang tumingin out para sa anumang mga pag-atake. 46 00:02:37,355 --> 00:02:39,979 47 00:02:39,979 --> 00:02:41,770 Tagapagsalita 3: Pinakamahina ang bagay na maaaring mangyari ay 48 00:02:41,770 --> 00:02:45,080 na ang isang tao ay sumulat ng code na Gusto awtomatikong pumunta at i-scan 49 00:02:45,080 --> 00:02:48,280 ang internet at makakaapekto lahat ng mga computer. 50 00:02:48,280 --> 00:02:50,710 At sa sandaling gawin nila iyon, mahusay, ang pinakamasama bagay na maaari nilang gawin 51 00:02:50,710 --> 00:02:53,300 ay tanggalin lang ang lahat ng bagay, o shut ang mga site pababa. 52 00:02:53,300 --> 00:02:55,360 Kaya maaari naming makita pinsala mula sa na punto ng view, 53 00:02:55,360 --> 00:02:58,300 kung saan nais naming magkaroon ng nakahahamak na mga tao sino lamang magpasya na magdulot ng havoc 54 00:02:58,300 --> 00:03:02,534 pamamagitan ng pagdadala down na mga sistema o pagtanggal mga file, at mga bagay tulad na. 55 00:03:02,534 --> 00:03:05,200 Tagapagsalita 2: Ang ilang mga sabihin ito ay isa sa mga pinaka-mahirap na masukat 56 00:03:05,200 --> 00:03:08,080 mga bug sa taon, at ito ay maaaring tumagal ng mga linggo o kahit na 57 00:03:08,080 --> 00:03:10,820 buwan upang matukoy ang tunay na epekto nito. 58 00:03:10,820 --> 00:03:12,180 59 00:03:12,180 --> 00:03:15,560 >> Tagapagsalita 1: Kaya lahat ng iyon ay totoo, ngunit ang nakakatawa bagay ay, halos lahat 60 00:03:15,560 --> 00:03:18,330 ng koleksyon ng imahe na nakita mo lang, maliban sa siguro ang keyboard, 61 00:03:18,330 --> 00:03:20,930 May walang kinalaman sa ang bug kung ano pa man. 62 00:03:20,930 --> 00:03:23,960 Server at wire at iba pa, uri ng tangentially ito ay may kaugnayan, 63 00:03:23,960 --> 00:03:27,410 ngunit sa core ito ay talagang kaakit-akit pamilyar sa kung ano ang nangyayari sa dito. 64 00:03:27,410 --> 00:03:30,050 Sa katunayan, hayaan mo akong pumunta sa aming CS50 appliance. 65 00:03:30,050 --> 00:03:32,910 Hayaan akong sige at i-maximize ang terminal na window dito. 66 00:03:32,910 --> 00:03:36,020 At sa iyo guys na-gamit na ito, o ang naka-embed na bersyon nito, 67 00:03:36,020 --> 00:03:39,460 sa gedit upang isulat ang mga programa, i-type ang command, at iba pa, 68 00:03:39,460 --> 00:03:43,690 at ito ay talagang, at may naging para sa linggo, Bash, B-A-S-H. 69 00:03:43,690 --> 00:03:46,890 Ito ang Bourne-shell muli, na kung saan ay lamang ng isang magarbong paraan ng sinasabi, 70 00:03:46,890 --> 00:03:50,220 ito ay isang programa na may kumikislap prompt, epektibo, 71 00:03:50,220 --> 00:03:51,970 na nakaupo doon naghihintay para sa input para sa iyo. 72 00:03:51,970 --> 00:03:53,920 At ito ay ang command na line interface sa pamamagitan ng kung aling mga 73 00:03:53,920 --> 00:03:57,650 ka guys tumatakbo utos at sa huli kino-compile at pagkatapos ay tumatakbo 74 00:03:57,650 --> 00:03:58,400 mga programa. 75 00:03:58,400 --> 00:04:01,320 >> Ngunit Bash ding programming wika sa mga sumusunod na kahulugan. 76 00:04:01,320 --> 00:04:05,460 Alam mo na may mga utos tulad ng cd at ls at din clang at iba pa, 77 00:04:05,460 --> 00:04:09,580 ngunit maaari mong tukuyin ang iyong sariling mga utos sa pamamagitan ng pagpapatupad ng mga ito sa Bash. 78 00:04:09,580 --> 00:04:11,420 Ngayon hindi namin ang pagpunta sa pumunta sa mahusay na detalye 79 00:04:11,420 --> 00:04:16,089 bilang sa Bash ang programming language, ngunit alam, halimbawa, na sa sandaling ito, 80 00:04:16,089 --> 00:04:17,607 walang command na tinatawag na "kumusta." 81 00:04:17,607 --> 00:04:19,440 Kaya ito ay matatagpuan sa isa sa mga pakete. 82 00:04:19,440 --> 00:04:20,856 Hindi ito naka-install sa aking computer. 83 00:04:20,856 --> 00:04:21,870 Tanungin ang iyong administrator. 84 00:04:21,870 --> 00:04:26,030 Ngunit kung gusto ko bang maging isang programa na tinatawag na "kumusta" sa Bash o sa aking prompt, 85 00:04:26,030 --> 00:04:30,810 Maaari ko talagang gamitin ang syntax na medyo tulad ng C. Ito ay hindi masyadong ang parehong, 86 00:04:30,810 --> 00:04:35,020 ngunit mukha itong kaakit-akit na katulad ng isang function, albeit nawawala ang ilan sa mga detalye. 87 00:04:35,020 --> 00:04:38,090 Wala mukhang mangyari, ngunit ngayon kung nagta-type ako "kumusta," 88 00:04:38,090 --> 00:04:40,960 Maaari mong aktwal na magsulat ng isang programa, hindi sa C, hindi sa Java, 89 00:04:40,960 --> 00:04:44,280 hindi sa ibang programming wika, ngunit sa Bash mismo. 90 00:04:44,280 --> 00:04:47,630 >> Ngayon ang key dito ay na sinulat ni ko ang pangalanan Nais kong bigyan ang bagong utos, 91 00:04:47,630 --> 00:04:50,820 at ang mga panaklong ay rin symbolic ng pagiging isang function. 92 00:04:50,820 --> 00:04:54,010 Bilang isang bukod, maaari mo ring gawin masaya bagay, at sa katunayan, kahit na sa Mac OS, 93 00:04:54,010 --> 00:04:55,620 ito ay isang programa na tinatawag na Terminal. 94 00:04:55,620 --> 00:04:58,800 Nagmumula ito built in sa sinuman computer na iyon ay may isang Mac sa kuwartong ito, 95 00:04:58,800 --> 00:05:03,640 at maaari mong gawin katulad na bagay sa Mac OS, ngunit maaari kang pumunta nang higit pa lampas na iyon. 96 00:05:03,640 --> 00:05:07,110 At ito ay isang maliit na tangential, subalit ito ay uri ng masaya. 97 00:05:07,110 --> 00:05:09,715 Ako ay mapaalalahanan na ito umaga, kapag nag-iisip na ito sa pamamagitan, 98 00:05:09,715 --> 00:05:13,279 ng isang maliit na laro na ginamit ko upang i-play gamit ang isa sa dating TFs CS50 ni 99 00:05:13,279 --> 00:05:16,570 kung saan anumang oras siya ay lumakad ang layo mula sa ang kanyang keyboard sa kanyang screen unlock, 100 00:05:16,570 --> 00:05:23,611 Gusto ko magsagawa ng isang utos tulad ng this-- "kamustahin." 101 00:05:23,611 --> 00:05:26,610 At ngayon anumang oras siya ay dumating bumalik sa kanyang keyboard pagkatapos kong clear ang screen 102 00:05:26,610 --> 00:05:27,985 at siya ay umupo, subukan upang gumawa ng ilang trabaho, 103 00:05:27,985 --> 00:05:29,250 ilista ang mga nilalaman ng kanyang directory-- 104 00:05:29,250 --> 00:05:29,510 >> [Audio pag-playback] 105 00:05:29,510 --> 00:05:30,010 >> -Hello. 106 00:05:30,010 --> 00:05:31,621 107 00:05:31,621 --> 00:05:32,120 Hello. 108 00:05:32,120 --> 00:05:35,030 >> Tagapagsalita 1: Kaya, sa pagkamakatarungan, ay hindi ito talaga "kumusta." 109 00:05:35,030 --> 00:05:36,894 Ito ay karaniwang isang bagay higit pa Akın sa that-- 110 00:05:36,894 --> 00:05:37,560 [Audio pag-playback] 111 00:05:37,560 --> 00:05:37,750 -Beep. 112 00:05:37,750 --> 00:05:39,320 Tagapagsalita 1: --that would-- ko kaya ang kanyang computer na gagawin 113 00:05:39,320 --> 00:05:42,170 Sumusumpa sa kanya anumang oras niya talaga nakaupo pababa sa kanyang keyboard. 114 00:05:42,170 --> 00:05:46,265 At nang masyadong mabilis niya naisip out hindi mag-iwan unlock ang kanyang screen. 115 00:05:46,265 --> 00:05:48,730 Ngunit ito ay nagmumungkahi ng pag-uuri ng hangal masaya na sa iyo 116 00:05:48,730 --> 00:05:50,210 ay maaaring magkaroon ng may isang bagay tulad Bash. 117 00:05:50,210 --> 00:05:52,770 Ngunit ito ay isang kaunti pa malubha, upang matiyak, kaysa iyon. 118 00:05:52,770 --> 00:05:57,235 At sa katunayan, ito ay isa sa mga karamihan sa mga mapanganib at pang-pangmatagalang mga bug 119 00:05:57,235 --> 00:05:58,860 na talagang pindutin ang mundo sa buong mundo. 120 00:05:58,860 --> 00:06:02,060 Bug na ito ay hindi sa paligid para sa ilang mga 20 taon, 121 00:06:02,060 --> 00:06:05,780 at makikita mo na struck sa loob lamang ng sandali sa pamamagitan ng kamag-anak pagiging simple nito. 122 00:06:05,780 --> 00:06:07,990 >> Kaya ito ay isang kinatawan Command na kung iyong 123 00:06:07,990 --> 00:06:10,448 pagmamay-ari ng Mac, literal ngayon kapag mayroon kang nakabukas ang iyong takip, 124 00:06:10,448 --> 00:06:12,940 maaari mong subukan ang pag-type sa na programa na tinatawag na Terminal. 125 00:06:12,940 --> 00:06:15,410 Terminal sa ilalim ng Mga Application Utilities-- 126 00:06:15,410 --> 00:06:18,790 para sa isang beses, mga gumagamit ng Windows Hindi mo na kailangang mag-alala tungkol sa partikular na threat-- 127 00:06:18,790 --> 00:06:22,310 ngunit ang mga mo sa mga Mac ay maaaring i-type na ito sa isang window tulad ng makikita kong gawin dito, 128 00:06:22,310 --> 00:06:24,210 at kung ako nagta-type ka na sa program na ito 129 00:06:24,210 --> 00:06:28,830 na tinatawag na Terminal, tulad ng makikita kong gawin ngayon, kung nakita mo ang salitang "mahina," 130 00:06:28,830 --> 00:06:32,200 ang iyong computer ay mahina laban sa pagsasamantala. 131 00:06:32,200 --> 00:06:33,850 >> Ngayon kung ano ang aktwal na ibig sabihin? 132 00:06:33,850 --> 00:06:35,870 At ito ay admittedly ang ilang mga kaakit-akit na nakatutuwang syntax, 133 00:06:35,870 --> 00:06:39,050 ngunit hindi bababa sa gumuhit out ipaalam ang ilan sa mga kawili-wiling aspeto. 134 00:06:39,050 --> 00:06:42,567 Kaya mayroong ilang mga syntax na mukhang medyo pamilyar, hindi bababa sa mula sa C 135 00:06:42,567 --> 00:06:43,950 at ang mga programa sa mas pangkalahatang paraan. 136 00:06:43,950 --> 00:06:47,550 Nakakakita ako ng ilang mga panaklong, semicolons, kulot braces, at tulad, 137 00:06:47,550 --> 00:06:50,820 ngunit ito ay lumiliko out na ito hangal bagay dito sa kulay dilaw 138 00:06:50,820 --> 00:06:53,580 ay mahalagang isang function na gumagana wala. 139 00:06:53,580 --> 00:06:57,840 Ang colon paraan gawin wala, at ang Nangangahulugan semicolon ihinto sa wala kang ginagawa. 140 00:06:57,840 --> 00:07:00,250 Kaya sa loob ng mga kulot braces, ang katotohanan 141 00:07:00,250 --> 00:07:02,440 na mayroon akong isang katumbas mag-sign sa kaliwa, ito 142 00:07:02,440 --> 00:07:05,500 ay mahalagang paglikha isang command, o isang variable, 143 00:07:05,500 --> 00:07:09,520 na tinatawag na x, at nagtatalaga ito na dilaw bit ng code doon. 144 00:07:09,520 --> 00:07:14,040 Na maaaring maging isang bagay tulad ng "echo kumusta "o" sabihin beep "o isang bagay 145 00:07:14,040 --> 00:07:15,120 Akın upang iyon. 146 00:07:15,120 --> 00:07:17,780 Ngunit mapansin kung ang iyong mga mata maglibot sa karagdagang sa kanan, 147 00:07:17,780 --> 00:07:22,150 mayroon pa sa linyang ito kaysa sa lamang sa dulo ng na semicolon. 148 00:07:22,150 --> 00:07:25,160 "Echo mahina," at pagkatapos ay lampas na mayroong kahit na higit pa. 149 00:07:25,160 --> 00:07:26,530 Ang isa pang semicolon, Bash -c :. 150 00:07:26,530 --> 00:07:28,120 151 00:07:28,120 --> 00:07:34,050 >> Kaya mahaba kuwento maikli, ito linya ng code ay 152 00:07:34,050 --> 00:07:36,660 sapat na para sa nakapanghihimok isang computer na 153 00:07:36,660 --> 00:07:39,830 mahina laban sa paggawa ng isang bagay na nais mo itong gawin, 154 00:07:39,830 --> 00:07:44,290 dahil mayroong isang bug sa Bash kung saan kahit Bash ay dapat itigil 155 00:07:44,290 --> 00:07:48,980 pagbasa ng mga linya ng command na karapatan Mayroon bang matapos ang dilaw na teksto, 156 00:07:48,980 --> 00:07:52,520 para sa isang 20-plus na taong gulang bug, Bash ay talagang inalisan ng pagbabasa 157 00:07:52,520 --> 00:07:56,780 lampas na semicolon at kaakit-akit magkano ang ginagawa kung ano ito ay sinabi. 158 00:07:56,780 --> 00:07:59,070 >> Kaya kung ano ang mga implikasyon ng na ganap? 159 00:07:59,070 --> 00:08:01,340 Lamang ko sinabi "echo kumusta" o "echo mahina," 160 00:08:01,340 --> 00:08:05,449 ngunit kung ano kung ginawa mo ang isang bagay talaga nakahahamak na, tulad ng Rm -rf *, 161 00:08:05,449 --> 00:08:07,240 kung saan hindi mo maaari nag-type na dati, 162 00:08:07,240 --> 00:08:08,920 at tapat marahil dapat hindi masyadong lalong madaling panahon, 163 00:08:08,920 --> 00:08:10,700 dahil maaari mong gawin ang isang maraming pinsala sa mga ito. 164 00:08:10,700 --> 00:08:11,210 Bakit? 165 00:08:11,210 --> 00:08:12,990 Rm ginagawa kung ano ang, siyempre? 166 00:08:12,990 --> 00:08:14,270 Tinatanggal. 167 00:08:14,270 --> 00:08:15,930 * Ang ibig sabihin kung ano? 168 00:08:15,930 --> 00:08:16,430 Lahat. 169 00:08:16,430 --> 00:08:18,180 Kaya ito ay isang tinatawag na ligaw card, sa gayon ang ibig sabihin nito 170 00:08:18,180 --> 00:08:20,410 tanggalin ang lahat ng bagay sa ang kasalukuyang direktoryo. 171 00:08:20,410 --> 00:08:23,379 -r ang mangyayari sa ibig sabihin ng recursive, na nangangahulugan kung ano nagtatanggal ka 172 00:08:23,379 --> 00:08:26,420 ay isang direktoryo, at sa loob ng doon ay iba pang mga file at iba pang mga direktoryo, 173 00:08:26,420 --> 00:08:28,950 recursively sumisid sa doon at tanggalin ang lahat ng iyon. 174 00:08:28,950 --> 00:08:31,040 At -f ay ang pinakamasama sa mga ito ang lahat. 175 00:08:31,040 --> 00:08:32,580 Sinuman alam ano ang ibig sabihin -f dito? 176 00:08:32,580 --> 00:08:33,690 177 00:08:33,690 --> 00:08:34,360 Force. 178 00:08:34,360 --> 00:08:37,830 Kaya pilitin paraan, kahit na kung ito ay isang hindi magandang ideya, 179 00:08:37,830 --> 00:08:40,939 gawin ito nang walang pagdikta sa akin para sa karagdagang confirmation. 180 00:08:40,939 --> 00:08:43,230 Kaya, alam mo na, tumawa kami sa ito, ngunit tapat, ako marahil 181 00:08:43,230 --> 00:08:44,972 i-type ito nang maraming beses sa isang araw, dahil ang katotohanan 182 00:08:44,972 --> 00:08:47,210 ay ito ay ang pinakamabilis na paraan upang tanggalin ang maramihang mga bagay-bagay. 183 00:08:47,210 --> 00:08:48,590 Ngunit kahit na nagawa ko na ang ilang mga pinsala. 184 00:08:48,590 --> 00:08:53,100 >> Ngunit kung ikaw ay upang linlangin ang isang computer sa pagtukoy ng ilang mga variable hangal 185 00:08:53,100 --> 00:08:56,810 o function na tinatawag na x, ngunit pagkatapos ay tricking ang computer sa e-execute 186 00:08:56,810 --> 00:09:00,030 lagpas sa mga hangganan ng na function, lampas na semicolon, 187 00:09:00,030 --> 00:09:04,430 maaari mong linlangin sa katunayan isang computer sa e-execute ang isang bagay tulad Rm -rf 188 00:09:04,430 --> 00:09:07,810 o ang command na Email o ang Kopyahin command. 189 00:09:07,810 --> 00:09:11,400 Anumang bagay Literal na maaari mong gawin sa mga computer, kung ang pagtanggal nito file, 190 00:09:11,400 --> 00:09:15,350 paglikha ng mga file, nagspa-spam sa isang tao, attacking ilang mga server sa malayo, 191 00:09:15,350 --> 00:09:17,190 kung maaari mo itong ipahayag may isang command, mo 192 00:09:17,190 --> 00:09:19,120 Maaari linlangin ang isang computer sa paggawa na. 193 00:09:19,120 --> 00:09:21,510 >> Ngayon kung ano ang isang halimbawa ng kung paano mo maaaring gawin ito? 194 00:09:21,510 --> 00:09:24,300 Well, maraming ng mga computer sa internet tumakbo Bash. 195 00:09:24,300 --> 00:09:26,390 Lahat ng mga user sa amin Mac ay kasama ng mga ito. 196 00:09:26,390 --> 00:09:30,390 Ang isang pulutong ng mga server ng Linux ay kabilang sa ang mga ito pati na rin, at Unix server. 197 00:09:30,390 --> 00:09:32,630 Muli ay nakakakuha ng Windows medyo off ang hook 198 00:09:32,630 --> 00:09:34,590 maliban kung na-install mo espesyal na software. 199 00:09:34,590 --> 00:09:37,130 Ngayon ng maraming mga server, para sa Halimbawa, magpatakbo ng mga web server, 200 00:09:37,130 --> 00:09:39,840 at sa katunayan Linux ay marahil ang pinaka-popular na operating system 201 00:09:39,840 --> 00:09:43,060 upang tumakbo sa mga computer sa internet na paghahatid up sa mga web page. 202 00:09:43,060 --> 00:09:44,910 Ngayon dahil kakailanganin namin makita sa ibang pagkakataon sa semestre, kapag 203 00:09:44,910 --> 00:09:48,470 magpadala sa iyo ng isang kahilingan mula sa ang iyong browser-- Chrome, 204 00:09:48,470 --> 00:09:50,790 Internet Explorer, whatever-- sa isang remote server, 205 00:09:50,790 --> 00:09:53,730 ito ay lumiliko out na kahit na nai-type mo pa lang www.example.com, 206 00:09:53,730 --> 00:09:59,590 ay magpadala ng mensahe sa iyong browser na mas arcane ng kaunti, tulad nito. 207 00:09:59,590 --> 00:10:01,239 >> Ngunit mapansin ang isang maliit na isang bagay na kakaiba. 208 00:10:01,239 --> 00:10:03,030 Ang unang dalawang linya Hindi ko nakita bago, 209 00:10:03,030 --> 00:10:04,904 ngunit hindi sila tumingin lalo na pagbabanta. 210 00:10:04,904 --> 00:10:08,030 Ngunit mapansin kung ano ang ninakaw ko para sa ikatlong linya dito. 211 00:10:08,030 --> 00:10:13,390 Kung ang isang masamang tao ay magpadala ng mensahe tulad nito mula sa kanyang computer na 212 00:10:13,390 --> 00:10:17,270 sa isang mahina Mac o isang mahina laban sa Linux server, 213 00:10:17,270 --> 00:10:21,580 ang nakakatawang bagay ay na Bash, na simpleng maliit na command prompt, 214 00:10:21,580 --> 00:10:27,450 ay omnipresent at madalas na gamit na sa mahalagang maisagawa 215 00:10:27,450 --> 00:10:30,020 ang mga nilalaman ng mensahe na natatanggap nito. 216 00:10:30,020 --> 00:10:33,490 At sa pamamagitan ng na logic, maaari mong linlangin isang web server, samakatuwid, 217 00:10:33,490 --> 00:10:36,370 sa pamamagitan ng pagpapadala ng isang bagay tulad ng User-Agent, na karaniwang 218 00:10:36,370 --> 00:10:38,300 ay dapat na sabihin ang pangalanan ng iyong browser. 219 00:10:38,300 --> 00:10:42,420 User-Agent Chrome, User-Agent Internet Explorer, User-Agent Firefox, ito 220 00:10:42,420 --> 00:10:44,590 ay ang iyong browser lamang ni paraan ng tinutukoy ang sarili nito. 221 00:10:44,590 --> 00:10:46,605 Ngunit kung ang isang masamang tao napaka cleverly sabi, mm-mm, ako 222 00:10:46,605 --> 00:10:47,930 hindi pagpunta sa sabihin sa iyo kung ano ang aking browser ay, 223 00:10:47,930 --> 00:10:50,888 Sa halip Pupunta ako sa magpadala sa iyo na ito cryptic-naghahanap ng bagay na may Rm -rf 224 00:10:50,888 --> 00:10:55,840 * Sa loob nito, maaari mong literal na linlangin ang isang mahina web server sa internet 225 00:10:55,840 --> 00:10:59,055 sa e-execute nang eksakto na sa doon para sa pagtatanggal ng lahat ng mga file. 226 00:10:59,055 --> 00:11:00,930 At tapat, na hindi kahit na ang pinakamasama ng ito. 227 00:11:00,930 --> 00:11:01,763 Maaari kang gumawa ng kahit ano. 228 00:11:01,763 --> 00:11:04,480 Maaari kang magsimula ng isang ipinamamahagi pagtanggi ng pag-atake ng serbisyo 229 00:11:04,480 --> 00:11:07,030 kung nagpadala sa iyo ng mensahe na ito buong bunches ng mga web server 230 00:11:07,030 --> 00:11:10,256 at pagkatapos ay nagkaroon ng mga ito ang lahat ng bumaba, para sa Halimbawa, sa Harvard.edu mga server, 231 00:11:10,256 --> 00:11:12,130 at maaari mong uri-uriin ng putok ang heck out sa mga ito 232 00:11:12,130 --> 00:11:15,490 sa pamamagitan ng isang network ng trapiko na noon ay kung hindi man ay nag-trigger sa pamamagitan ng ito masamang tao. 233 00:11:15,490 --> 00:11:18,760 >> Kaya, mahaba kuwento maikli, halos lahat ng tao sa kuwartong ito na nagmamay-ari ng Mac 234 00:11:18,760 --> 00:11:20,240 ay mahina laban sa ito. 235 00:11:20,240 --> 00:11:24,100 Ang pilak lining ay na maliban kung ikaw ay pagpapatakbo ng isang web server sa iyong laptop, 236 00:11:24,100 --> 00:11:27,780 at maliban kung aktwal mong na-configure ito upang payagan ang isang bagay tulad ng SSH sa ito, 237 00:11:27,780 --> 00:11:28,670 ikaw ay talagang safe. 238 00:11:28,670 --> 00:11:31,710 Ito ay mahina, ngunit walang isa sinusubukan upang makapunta sa iyong laptop, 239 00:11:31,710 --> 00:11:33,290 upang maaari mong uri ng mag-aalala dahil. 240 00:11:33,290 --> 00:11:36,210 Gayunpaman, Apple ay sa lalong madaling panahon maging sa pag-update ng isang remedyo para sa na ito. 241 00:11:36,210 --> 00:11:39,660 Ang mundo ng Linux ay inilabas ng isang bilang ng mga pag-aayos para sa Fedora at Ubuntu 242 00:11:39,660 --> 00:11:43,790 at iba pang mga bersyon ng Linux, at sa katunayan kung nagpapatakbo ka ng update 50 sa appliance, 243 00:11:43,790 --> 00:11:45,930 kahit na masyadong magiging update at naitama. 244 00:11:45,930 --> 00:11:47,764 Ngunit na masyadong ay hindi talaga naging mahina, 245 00:11:47,764 --> 00:11:49,804 dahil maliban kung hindi mo tinkered sa appliance 246 00:11:49,804 --> 00:11:52,770 at ginawa sa publiko ang iyong laptop naa-access sa internet, na kung saan ay hindi 247 00:11:52,770 --> 00:11:54,910 sa pamamagitan ng default, hindi ka talaga naging fine dahil 248 00:11:54,910 --> 00:11:56,890 ng firewalling at iba pang mga diskarte. 249 00:11:56,890 --> 00:12:01,000 >> Ngunit ito ay isang matinding halimbawa ng isang bug na tumira kami para sa para sa literal 20 250 00:12:01,000 --> 00:12:04,050 taon, at kung sino ang nakakaalam kung may isang taong lahat ng oras na ito ay kilala tungkol dito? 251 00:12:04,050 --> 00:12:06,300 At sa katunayan, ito ay isa sa sa pangunahing mga hamon 252 00:12:06,300 --> 00:12:08,690 na ipapakita namin makita sa ibang pagkakataon sa semestre tungkol sa seguridad, 253 00:12:08,690 --> 00:12:13,020 ay na tulad lamang ng sa totoong mundo, ang mabuting guys ay nasa dehado. 254 00:12:13,020 --> 00:12:16,500 Upang panatilihing ang masamang guys out, mayroon kaming upang tiyakin na ang bawat pinto ay naka-lock, 255 00:12:16,500 --> 00:12:20,340 na ang bawat window ay ligtas, na bawat punto ng pagpasok sa isang bahay 256 00:12:20,340 --> 00:12:21,980 ay ligtas upang panatilihin ang mga masamang guys out. 257 00:12:21,980 --> 00:12:26,870 Ngunit ano ang ginagawa ng masamang tao mayroon sa gawin upang aktwal na ikompromiso ang iyong home 258 00:12:26,870 --> 00:12:28,200 at magnakaw mula sa iyo? 259 00:12:28,200 --> 00:12:32,574 Siya lamang ay may upang makahanap ng isang naka-unlock pinto, isa sirang window, o isang bagay na 260 00:12:32,574 --> 00:12:35,240 kasama ang mga linya, at ito ay ang parehong bagay sa seguridad computer. 261 00:12:35,240 --> 00:12:37,660 Maaari naming magsulat ng milyun-milyong mga linya ng programming code 262 00:12:37,660 --> 00:12:40,570 at paggastos daan-daan o libu-libong ng mga oras na sinusubukan mong makakuha ng mga ito tama, 263 00:12:40,570 --> 00:12:43,370 ngunit kung gumawa ka ng isa lang pagkakamali sa kawastuhan, 264 00:12:43,370 --> 00:12:47,030 maaari mong ilagay ang buong system at sa katunayan sa kasong ito, ang buong internet 265 00:12:47,030 --> 00:12:48,660 at mundo sa panganib. 266 00:12:48,660 --> 00:12:51,950 >> Kaya kung nais mong matuto nang higit pa tungkol ito, pumunta sa URL na ito dito. 267 00:12:51,950 --> 00:12:54,450 Hindi na kailangan para sa pagkilos ngayong gabi maliban kung ikaw ay 268 00:12:54,450 --> 00:12:57,116 kasama ng mga higit pang mga kumportableng na tumatakbo ang iyong sariling web 269 00:12:57,116 --> 00:12:59,810 server, kung saan dapat mong, sa katunayan, i-update ang iyong software. 270 00:12:59,810 --> 00:13:03,244 >> At ito masyadong ay ang pamagat ng isang salita, at ngayon ng isang papel, 271 00:13:03,244 --> 00:13:05,410 na na-link namin sa website kurso para sa araw na ito. 272 00:13:05,410 --> 00:13:07,600 Ito ay sa pamamagitan ng isang kapwa na may pangalang Ken Thompson, na 273 00:13:07,600 --> 00:13:10,120 ay tumatanggap ng isang napaka sikat award sa computer science, 274 00:13:10,120 --> 00:13:13,495 at ibinigay niya ito speech ilang taon nakaraan, mahalagang sa parehong paksa. 275 00:13:13,495 --> 00:13:18,250 276 00:13:18,250 --> 00:13:20,520 Na humihiling sa mga tao ang pinag-uusapan, dapat mo ba talagang 277 00:13:20,520 --> 00:13:23,480 tiwala, sa huli, ang software na iyong binigyan? 278 00:13:23,480 --> 00:13:26,100 Halimbawa, mayroon kaming lahat nagsusulat programa, 279 00:13:26,100 --> 00:13:27,820 at kami ay kino-compile ang mga ito gamit Clang. 280 00:13:27,820 --> 00:13:31,830 At sa iyong kaalaman, mayroon kang nakasulat na anumang mga programa para sa CS50 kung saan mayroong 281 00:13:31,830 --> 00:13:35,310 ng back pinto ng uri, mayroong isang paraan na isang masamang tao, kung tumatakbo ang iyong programa, 282 00:13:35,310 --> 00:13:37,410 Maaaring magtagal sa paglipas ng iyong computer? 283 00:13:37,410 --> 00:13:38,310 Marahil hindi, i-right? 284 00:13:38,310 --> 00:13:40,180 Mario, at sakim, at ng Credit. 285 00:13:40,180 --> 00:13:41,680 Ito ang lahat medyo maliit na mga programa. 286 00:13:41,680 --> 00:13:43,910 Gusto mo kailangang maging maganda masamang kung ikaw talaga 287 00:13:43,910 --> 00:13:47,310 ginawa madaling maapektuhan ang iyong buong computer na pagkatapos ng pagsusulat ng 10 o 20 mga linya ng code, 288 00:13:47,310 --> 00:13:49,690 o hindi bababa sa walang kamalayan sa ilang ng mga implikasyon sa seguridad. 289 00:13:49,690 --> 00:13:52,023 Ngayon sabihin ko na facetiously, ngunit kami ay pagpunta upang makita ngayon 290 00:13:52,023 --> 00:13:54,600 at sa linggong ito ito ay talagang talaga ito, talagang madali 291 00:13:54,600 --> 00:13:57,980 upang maging masama at gumawa ng kahit na maikling mga programa mahina. 292 00:13:57,980 --> 00:14:02,880 >> Ngunit sa ngayon, hindi bababa sa, mapagtanto na ang tanong na hinihingan dito 293 00:14:02,880 --> 00:14:04,850 ay tungkol Clang sa isang Compiler. 294 00:14:04,850 --> 00:14:08,360 Bakit na-kami nagtitiwala Clang para sa nakaraang dalawa o tatlong linggo? 295 00:14:08,360 --> 00:14:12,650 Sino ang upang sabihin na sinuman ay nagsulat Clang ay hindi magkaroon ng isang "kung" kalagayan doon 296 00:14:12,650 --> 00:14:17,680 na lubos na injected ilang mga zero at mga bago sa bawat programa ito compiles 297 00:14:17,680 --> 00:14:21,180 na ipaalam sa kanya ng access kapag ikaw ay natutulog sa iyong computer 298 00:14:21,180 --> 00:14:23,580 at ang iyong laptop panakip bukas at ang iyong computer ay tumatakbo? 299 00:14:23,580 --> 00:14:24,080 Mag-right? 300 00:14:24,080 --> 00:14:28,350 Mayroon kaming ang ganitong uri ng sistema ng karangalan karapatan ngayon kung saan kami pinagkakatiwalaan na Clang ay legit. 301 00:14:28,350 --> 00:14:30,000 Pinagkakatiwalaan mo na ang appliance ay legit. 302 00:14:30,000 --> 00:14:34,430 Pinagkakatiwalaan mo na literal bawat programa sa iyong Mac o PC ay mapagkakatiwalaan. 303 00:14:34,430 --> 00:14:37,510 At bilang na ito simpleng bug nagmumungkahi, kahit na ito ay hindi nakahahamak na, 304 00:14:37,510 --> 00:14:40,580 na talagang hindi malamang na ang kaso. 305 00:14:40,580 --> 00:14:42,350 >> Kaya dapat kang maging natakot bilang impiyerno. 306 00:14:42,350 --> 00:14:45,560 Tapat, walang simple solusyon sa iba pang mga 307 00:14:45,560 --> 00:14:48,185 kaysa sa isang uri ng kamalayan societal ng pagtaas ng pagiging kumplikado 308 00:14:48,185 --> 00:14:50,310 na aming pagbuo sa tuktok ng aming mga computer system, 309 00:14:50,310 --> 00:14:53,740 at kung paano lalong madaling maaaring napaka na rin kami. 310 00:14:53,740 --> 00:14:55,570 >> Ngayon na may sinabi na iyon, Breakout. 311 00:14:55,570 --> 00:14:59,889 Kaya itakda Breakout ay tatlong problema, at Breakout ay isang laro mula sa yesteryear 312 00:14:59,889 --> 00:15:02,180 na maaari mong isipin ang, ngunit para sa atin sa problema magtakda ng tatlo, 313 00:15:02,180 --> 00:15:04,450 ay nagbibigay-daan ito sa amin upang magsagawa ng mga bagay-back up ng isang bingaw 314 00:15:04,450 --> 00:15:08,880 upang kapag kami ay sumusulat programa, kahit na sa isang Terminal window na tulad nito, 315 00:15:08,880 --> 00:15:14,670 maaari naming aktwal na patakbuhin, sa huli, graphical na mga programa hindi 316 00:15:14,670 --> 00:15:17,800 hindi tulad ng mga namin ay may pag-access sa sa simula. 317 00:15:17,800 --> 00:15:20,910 Kaya ito ay ang mga tauhan pagpapatupad ng Breakout, 318 00:15:20,910 --> 00:15:23,930 na lamang ito brick-breaking laro, na ilipat mo ang iyong mga sagwan pabalik 319 00:15:23,930 --> 00:15:27,590 at pabalik, at pindutin mo ang bola laban sa mga may-kulay na brick up tuktok. 320 00:15:27,590 --> 00:15:30,020 Kaya ito ay nagdadala sa amin uri ng mga pabalik sa kung saan 321 00:15:30,020 --> 00:15:33,180 nagawa naming maging masyadong mabilis sa simula, at ngayon may C, 322 00:15:33,180 --> 00:15:35,800 pagpapatupad ng ating sariling graphical interface ng gumagamit. 323 00:15:35,800 --> 00:15:38,960 >> Ngunit higit sa na, ito set problema ay kumakatawan sa unang 324 00:15:38,960 --> 00:15:41,000 na kung saan kami ay nagbibigay sa sa iyo ng isang bungkos ng code. 325 00:15:41,000 --> 00:15:43,940 At sa katunayan, dalhin ako tahasang pansin sa mga ito, dahil lalo na 326 00:15:43,940 --> 00:15:47,090 para sa mga mas kumportable, ito itakda ang problema, hindi bababa sa unang tingin, 327 00:15:47,090 --> 00:15:49,170 ay pagpunta sa pakiramdam tulad ng nagsagawa kami ng mga ito up ng isang bingaw. 328 00:15:49,170 --> 00:15:51,540 Dahil binigyan ka namin, para sa ilan sa paghahanap 329 00:15:51,540 --> 00:15:54,930 at pagbubukod-bukod ng mga problema sa pset, isang bungkos ng code na aming sinulat ni, 330 00:15:54,930 --> 00:15:56,680 at isang pares ng mga komento na nagsasabing "gawin," 331 00:15:56,680 --> 00:15:58,221 kung saan mayroon kang upang punan ang mga blangko. 332 00:15:58,221 --> 00:16:00,020 Kaya hindi masyadong nakakatakot, ngunit ito ang unang pagkakataon 333 00:16:00,020 --> 00:16:03,370 kami ay handing mo code na kailangan mong basahin muna, nauunawaan, at pagkatapos ay idagdag sa 334 00:16:03,370 --> 00:16:04,290 at kumpletuhin ito. 335 00:16:04,290 --> 00:16:05,940 >> At pagkatapos ay may Breakout, kami ay pagpunta sa gawin ang parehong, 336 00:16:05,940 --> 00:16:08,740 na nagbibigay sa iyo ng ilang dosenang higit pang mga linya ng code na iyon, tapat, nagbibigay sa iyo 337 00:16:08,740 --> 00:16:11,490 ng maraming mga framework para sa ang laro ngunit ihinto ang maikling 338 00:16:11,490 --> 00:16:14,304 ng pagpapatupad ng mga brick at ang bola at ang sagwan, 339 00:16:14,304 --> 00:16:15,970 ngunit ginagawa namin ipatupad ang ilang iba pang mga tampok. 340 00:16:15,970 --> 00:16:18,280 At kahit na sa unang tingin, muli, lalo na kung mas kumportable, 341 00:16:18,280 --> 00:16:21,480 maaaring tila lalo na daunting at sa tingin mo ay may napakaraming mga bagong pag-andar 342 00:16:21,480 --> 00:16:24,070 kailangan mong i-wrap ang iyong isip sa paligid, at iyon ang totoo. 343 00:16:24,070 --> 00:16:26,281 Ngunit tandaan, ito ay medyo tulad ng simula. 344 00:16:26,281 --> 00:16:28,780 Logro ay hindi mo gamitin ang lahat ng ang puzzle piraso sa scratch. 345 00:16:28,780 --> 00:16:31,120 Logro ay hindi mo na mahalaga sa wrap ang iyong isip sa paligid ng lahat ng mga ito 346 00:16:31,120 --> 00:16:33,617 dahil ang lahat kinuha ito ay isang mabilis na pagsulyap upang maunawaan, oh, 347 00:16:33,617 --> 00:16:35,450 na kung ano ang maaari kong gawin may na piraso puzzle. 348 00:16:35,450 --> 00:16:38,260 At sa katunayan, sa problema nakatakda 3 spec, ipapakita namin ituro sa iyo 349 00:16:38,260 --> 00:16:41,370 sa dokumentasyon na gagawin kitang ipakilala sa ilang mga bagong pag-andar, 350 00:16:41,370 --> 00:16:43,570 at sa huli ang programming constructs mong gamitin. 351 00:16:43,570 --> 00:16:47,610 Kundisyon, loop, variable, at mga function 352 00:16:47,610 --> 00:16:50,720 ay magiging magkapareho sa kung ano ang nasaksihan namin sa gayon ay malayo. 353 00:16:50,720 --> 00:16:53,560 >> Kaya sa katunayan, kung ano ang ibibigay namin ikaw ay ilang sample code na 354 00:16:53,560 --> 00:16:56,110 hinahayaan kang lumikha ng isang window na mukhang hindi hindi tulad ng ito, 355 00:16:56,110 --> 00:16:59,540 at sa huli i-on ito sa isang bagay na lubos na tulad nito. 356 00:16:59,540 --> 00:17:02,250 Kaya samantalahin CS50, talakayin oras ng opisina at higit pa, 357 00:17:02,250 --> 00:17:05,290 at kumuha ng ginhawa sa ang katunayan na ang ang halaga ng code na mayroon ka na magsulat 358 00:17:05,290 --> 00:17:06,760 ay talagang hindi lahat na magkano. 359 00:17:06,760 --> 00:17:10,359 Ang unang hamon ay upang acclimate lamang ang iyong sarili sa ilang mga code na namin ang nakasulat. 360 00:17:10,359 --> 00:17:11,450 361 00:17:11,450 --> 00:17:15,810 >> Ang anumang mga katanungan sa pset3, Shellshock, o kung hindi man? 362 00:17:15,810 --> 00:17:19,226 >> Madla: Ito ay tila tulad ng pagdaan sa Breakout 363 00:17:19,226 --> 00:17:22,154 na ang code ay halos isang object-oriented estilo, 364 00:17:22,154 --> 00:17:24,675 ngunit naisip ko C ay isang object-oriented program. 365 00:17:24,675 --> 00:17:26,050 Tagapagsalita 1: Isang mahusay na pinag-uusapan. 366 00:17:26,050 --> 00:17:28,258 Kaya sa naghahanap sa pamamagitan ng code ng pamamahagi, ang code 367 00:17:28,258 --> 00:17:30,180 kami ay sumulat para sa pset3, para sa mga pamilyar, ito 368 00:17:30,180 --> 00:17:32,230 Mukhang ito ay isang maliit na object-oriented. 369 00:17:32,230 --> 00:17:33,800 Maikling sagot ay, ito ay. 370 00:17:33,800 --> 00:17:38,130 Ito ay isang pagtatantya ng kung paano mo maaaring gawin object-oriented code gamit 371 00:17:38,130 --> 00:17:41,850 isang wika tulad ng C, ngunit ito ay pa rin sa huli pamamaraan. 372 00:17:41,850 --> 00:17:44,900 Walang mga pamamaraan sa loob ng ang mga variable, tulad ng makikita mo. 373 00:17:44,900 --> 00:17:46,180 Ngunit ito ay reminiscent ng iyon. 374 00:17:46,180 --> 00:17:48,780 At kami makita muli ang tampok na iyon kapag makuha namin sa PHP at JavaScript 375 00:17:48,780 --> 00:17:49,946 patungo sa katapusan ng semestre. 376 00:17:49,946 --> 00:17:53,667 Ngunit sa ngayon, sa tingin ng ito bilang isang pahiwatig ng kung ano ang darating. 377 00:17:53,667 --> 00:17:54,250 Magandang katanungan. 378 00:17:54,250 --> 00:17:56,051 379 00:17:56,051 --> 00:17:56,550 Lahat ng karapatan. 380 00:17:56,550 --> 00:17:59,730 Kaya magsamang bumaybay-uri-uriin ay kung paano namin kaliwang bagay na huling beses. 381 00:17:59,730 --> 00:18:03,250 At sumanib-uri-uriin ay cool na sa pakiramdam na ito ay kaya magkano ang mas mabilis, 382 00:18:03,250 --> 00:18:07,100 hindi bababa sa batay sa cursory pagsubok Ginawa namin noong nakaraang linggo, kaysa sa, sabihin nating, bubble 383 00:18:07,100 --> 00:18:08,710 -uri-uriin, uri pagpipilian, ang uri pagpapasok. 384 00:18:08,710 --> 00:18:11,780 At kung ano ang kapong baka masyadong lamang paano succinctly at cleanly 385 00:18:11,780 --> 00:18:12,810 maaari mong ipahayag ito. 386 00:18:12,810 --> 00:18:15,840 At kung ano ang sinabi namin na ito ay isang pang-itaas mapasailalim sa oras ng paggana ng pagsanib 387 00:18:15,840 --> 00:18:16,340 pagbukud-bukurin? 388 00:18:16,340 --> 00:18:17,633 389 00:18:17,633 --> 00:18:18,495 Oo? 390 00:18:18,495 --> 00:18:19,360 >> Madla: n log n? 391 00:18:19,360 --> 00:18:20,819 >> Tagapagsalita 1: n log n, i-right. n log n. 392 00:18:20,819 --> 00:18:23,776 At kami ay bumalik sa kung ano na talaga ay nangangahulugan o kung saan na nagmumula sa, 393 00:18:23,776 --> 00:18:25,570 ngunit ito ay mas mahusay kaysa sa kung ano ng panahon 394 00:18:25,570 --> 00:18:28,440 Nakita na namin para sa bubble pagpili at pag-uuri pagpapasok? 395 00:18:28,440 --> 00:18:30,610 Kaya n nakalapat. n nakalapat ay mas malaki kaysa ito, 396 00:18:30,610 --> 00:18:34,650 at kahit na ito ay hindi masyadong halata, malaman na ang pag-log n ay mas maliit kaysa n, 397 00:18:34,650 --> 00:18:36,910 kaya kung gagawin mo n beses isang bagay na mas maliit sa n, 398 00:18:36,910 --> 00:18:38,680 ito ay magiging mas mababa kaysa sa n nakalapat. 399 00:18:38,680 --> 00:18:40,130 Ito ay isang bit ng Swersey doon. 400 00:18:40,130 --> 00:18:42,190 Ngunit may bayad kami ng isang presyo para sa mga ito. 401 00:18:42,190 --> 00:18:47,000 Ito ay mas mabilis, ngunit isang tema na sinimulan na lumabas noong nakaraang linggo ay ito tradeoff. 402 00:18:47,000 --> 00:18:49,804 Mayroon akong mas mahusay na pagganap oras matalino, ngunit kung ano ang 403 00:18:49,804 --> 00:18:52,470 kinailangang kong gastusin sa kabilang kamay, upang makamit iyon? 404 00:18:52,470 --> 00:18:53,591 >> Madla: Memory. 405 00:18:53,591 --> 00:18:54,465 Tagapagsalita 1: Sabihin nating muli? 406 00:18:54,465 --> 00:18:55,173 Madla: Memory. 407 00:18:55,173 --> 00:18:57,040 Tagapagsalita 1: Memory, o espasyo sa mas pangkalahatang paraan. 408 00:18:57,040 --> 00:18:59,040 At ito ay isang hindi super halata sa aming mga kawani na tao, 409 00:18:59,040 --> 00:19:02,240 ngunit isipin na ang aming mga boluntaryo ay stepping pasulong at stepping 410 00:19:02,240 --> 00:19:04,780 pabalik na waring mayroong isang array dito, at waring mayroong 411 00:19:04,780 --> 00:19:07,130 isang pangalawang array dito na maaari nilang gamitin, dahil kami 412 00:19:07,130 --> 00:19:09,080 Kailangan ng isang lugar na naa upang pagsamahin ang mga tao. 413 00:19:09,080 --> 00:19:11,480 Hindi namin mai-lamang magpalit ang mga ito sa lugar. 414 00:19:11,480 --> 00:19:13,800 Kaya sumanib-uri na magagamit ang ay mas maraming espasyo, na 415 00:19:13,800 --> 00:19:15,620 hindi namin ginawa kailangan sa ang iba pang mga algorithm, 416 00:19:15,620 --> 00:19:17,410 ngunit ang bentahe ay na ito ay mas mabilis. 417 00:19:17,410 --> 00:19:20,780 At tapat, sa tunay na mundo espasyo mga days-- RAM, hard disk space-- 418 00:19:20,780 --> 00:19:25,030 ay relatibong murang, at sa gayon ay ang hindi palaging isang masamang bagay. 419 00:19:25,030 --> 00:19:28,320 >> Kaya ipaalam sa tumagal ng isang mabilis na pagtingin, may kaunting panahon higit pa methodically, sa kung ano ang ginawa namin 420 00:19:28,320 --> 00:19:30,220 at bakit namin sinabi ito ay mag-log n n. 421 00:19:30,220 --> 00:19:33,260 Kaya narito ang ilan sa walong mga numero at mga walong boluntaryo namin ay may mga huling oras. 422 00:19:33,260 --> 00:19:35,718 At ang unang bagay na Sumanib Pagbukud-bukurin sinabi sa amin upang gawin ay kung ano? 423 00:19:35,718 --> 00:19:37,010 424 00:19:37,010 --> 00:19:38,010 Madla: Divide sa dalawang. 425 00:19:38,010 --> 00:19:38,663 Tagapagsalita 1: Sabihin nating muli? 426 00:19:38,663 --> 00:19:39,650 Madla: Divide sa dalawang. 427 00:19:39,650 --> 00:19:40,610 Tagapagsalita 1: Divide sa dalawang, i-right. 428 00:19:40,610 --> 00:19:42,818 Ito ay napaka-reminiscent ng sa aklat ng telepono, ng hatiin 429 00:19:42,818 --> 00:19:44,220 at talunin sa mas pangkalahatang paraan. 430 00:19:44,220 --> 00:19:45,640 Kaya itinuturing namin ang kaliwang kalahati. 431 00:19:45,640 --> 00:19:48,700 At pagkatapos ay sa sandaling sinabi namin, uri kaliwang kalahati ng mga elemento, 432 00:19:48,700 --> 00:19:49,690 kung ano ang susunod na namin sasabihin? 433 00:19:49,690 --> 00:19:51,210 434 00:19:51,210 --> 00:19:54,860 -Uri-uriin ang kaliwang kalahati ng kaliwang kalahati, na nagpahintulot sa amin upang, 435 00:19:54,860 --> 00:19:57,570 pagkatapos ng paghahati sa dalawang, tumuon sa apat at dalawang. 436 00:19:57,570 --> 00:20:01,280 >> Paano ka-uri-uriin ang listahan ngayon, sa dilaw, laki ng dalawang, gamit Pagsamahin ang uri-uriin? 437 00:20:01,280 --> 00:20:02,330 438 00:20:02,330 --> 00:20:04,580 Well hatiin ito sa kalahati, at ayusin ang kaliwang kalahati. 439 00:20:04,580 --> 00:20:07,100 At ito ay kung saan bagay Nakakuha ng kaunti hangal panandalian. 440 00:20:07,100 --> 00:20:10,720 Paano ka-uri-uriin ang listahan na ng laki ng isa, tulad ng ito bilang apat dito? 441 00:20:10,720 --> 00:20:12,330 442 00:20:12,330 --> 00:20:13,210 Ito ay pinagsunod-sunod. 443 00:20:13,210 --> 00:20:14,200 Tapos ka na. 444 00:20:14,200 --> 00:20:17,300 >> Ngunit pagkatapos ay paano mo uri-uriin ang isang listahan ng mga laki ng isa kapag ito ay ang bilang dalawang? 445 00:20:17,300 --> 00:20:21,640 Well, parehong bagay, ngunit ngayon kung ano ang ikatlong at ang mga key na hakbang sa magsamang bumaybay-uri-uriin? 446 00:20:21,640 --> 00:20:24,020 Ay nagkaroon ka ng upang sumanib sa kaliwa kalahati at ang kanang kalahati. 447 00:20:24,020 --> 00:20:26,580 At sa sandaling ginawa namin na, itinuturing namin sa apat, itinuturing namin ang dalawa. 448 00:20:26,580 --> 00:20:28,750 Nagpasya kaming lahat ng karapatan, Malinaw na dalawang ang mauna, 449 00:20:28,750 --> 00:20:31,840 kaya inilalagay namin ang dalawang sa sarili lugar, na sinusundan ng apat. 450 00:20:31,840 --> 00:20:35,010 At mayroon ka na ngayong upang uri ng rewind, at ito ay isang uri ng katangian 451 00:20:35,010 --> 00:20:37,570 ng isang algorithm tulad ng Pagsamahin Pagsunud-sunurin, rewind sa memorya. 452 00:20:37,570 --> 00:20:40,240 Ano ang susunod na linya ng kuwento? 453 00:20:40,240 --> 00:20:41,780 Ano ang dapat kong tumututok sa susunod? 454 00:20:41,780 --> 00:20:43,110 455 00:20:43,110 --> 00:20:47,350 Ang karapatan sa kalahati ng kaliwang kalahati, Alin ang anim at walong. 456 00:20:47,350 --> 00:20:50,320 >> Kaya ipaalam sa basa-lamang sa akin sa pamamagitan na ito walang belaboring sa punto ng labis. 457 00:20:50,320 --> 00:20:53,330 Anim at walong, pagkatapos ay anim na pinagsunod-sunod, walong ay pinagsunod-sunod. 458 00:20:53,330 --> 00:20:57,190 Pagsamahin ang mga iyon nang magkakasama tulad ng iyon, at ngayon ang susunod na malaking hakbang 459 00:20:57,190 --> 00:21:00,990 ay, siyempre, uri-uriin ang karapatan kalahati mula sa pinakadulo unang hakbang ng algorithm na ito. 460 00:21:00,990 --> 00:21:02,870 Kaya tumuon kami sa isa, tatlo, pitong, limang. 461 00:21:02,870 --> 00:21:04,540 Pagkatapos ay Nakatuon kami sa kaliwang kalahati. 462 00:21:04,540 --> 00:21:09,400 Ang kaliwang kalahati ng na, ang karapatan sa kalahati ng na iyon, at pagkatapos ay pagsamahin sa isa at tatlong. 463 00:21:09,400 --> 00:21:13,100 Pagkatapos ang karapatan kalahati, pagkatapos ay iniwan ang kalahati ng ito, pagkatapos ay ang karapatan kalahati nito. 464 00:21:13,100 --> 00:21:15,985 Pagsamahin ang mga ito sa, at ngayon kung ano ay nananatiling na hakbang? 465 00:21:15,985 --> 00:21:18,040 466 00:21:18,040 --> 00:21:22,460 Pagsamahin ang malaking kaliwang kalahati at ang malaki kanang kalahati, kaya isa napupunta down na doon, 467 00:21:22,460 --> 00:21:27,330 pagkatapos ng dalawang, pagkatapos tatlong, pagkatapos ng apat na, pagkatapos ay limang, pagkatapos ng anim na, pagkatapos ng pitong, pagkatapos ay walong. 468 00:21:27,330 --> 00:21:31,990 >> Kaya ngayon kung bakit ito sa huli ay ibinubunyag, lalo na kung n at logarithms higit pa 469 00:21:31,990 --> 00:21:35,487 Sa pangkalahatan sa halip makatakas sa iyo, hindi bababa sa kamakailang memory? 470 00:21:35,487 --> 00:21:37,070 Well, mapansin ang taas ng bagay na ito. 471 00:21:37,070 --> 00:21:41,230 Nagkaroon kami ng walong mga elemento, at kami hinati ito sa pamamagitan ng dalawang, sa pamamagitan ng dalawang, sa pamamagitan ng dalawang. 472 00:21:41,230 --> 00:21:44,590 Kaya base log dalawa sa walong nagbibigay sa amin ng tatlo. 473 00:21:44,590 --> 00:21:45,640 474 00:21:45,640 --> 00:21:48,540 At pinagkakatiwalaan sa akin sa na kung medyo hazy sa iyon. 475 00:21:48,540 --> 00:21:54,710 Ngunit base log dalawa sa walong ay tatlong, kaya ginawa namin ang tatlong mga layer ng pagsasama. 476 00:21:54,710 --> 00:21:57,170 At kung kailan namin Pinagsama mga elemento, kung gaano karaming mga elemento 477 00:21:57,170 --> 00:21:58,950 ay tinitingnan namin ang sa bawat isa sa mga hilera? 478 00:21:58,950 --> 00:22:00,212 479 00:22:00,212 --> 00:22:01,437 Isang kabuuan ng n, tama? 480 00:22:01,437 --> 00:22:04,020 Dahil upang sumanib hilera sa itaas, kahit na ginawa namin ito piecemeal, 481 00:22:04,020 --> 00:22:05,990 sa huli naming hinawakan ang bawat numero sa sandaling. 482 00:22:05,990 --> 00:22:09,054 At sa pangalawang hilera, i- pagsamahin ang mga listahan ng mga laki ng dalawang, 483 00:22:09,054 --> 00:22:10,470 namin ay may upang pindutin ang bawat elemento nang isang beses. 484 00:22:10,470 --> 00:22:12,690 At pagkatapos dito talaga malinaw sa huling hilera, 485 00:22:12,690 --> 00:22:15,430 namin ay may upang pindutin ang bawat isa sa mga mga elemento ng isang beses, ngunit nang isang beses lamang, 486 00:22:15,430 --> 00:22:18,400 kaya dito ay namamalagi, pagkatapos, ang aming n log n. 487 00:22:18,400 --> 00:22:21,780 >> At ngayon lamang upang makagawa ng isang maliit na bagay higit pa pormal para sa isang sandali lamang, kung ikaw 488 00:22:21,780 --> 00:22:24,260 ay sa ngayon pag-aralan ito sa isang uri ng mas mataas na antas 489 00:22:24,260 --> 00:22:28,340 at subukan upang magpasya, na rin kung paano maaari kang pumunta tungkol sa pagpapahayag ng 490 00:22:28,340 --> 00:22:31,780 ang oras ng paggana ng algorithm na ito sa pamamagitan lamang ng pagtingin sa ito at hindi 491 00:22:31,780 --> 00:22:33,590 sa pamamagitan ng paggamit ng isang contrived halimbawa? 492 00:22:33,590 --> 00:22:36,590 Well, kung magkano ang oras na sasabihin sa iyo ng isang hakbang na tulad nito sa dilaw na nais kumuha, 493 00:22:36,590 --> 00:22:37,173 kung n <2 return? 494 00:22:37,173 --> 00:22:38,840 495 00:22:38,840 --> 00:22:39,830 Iyon ay isang malaking O ng kung ano? 496 00:22:39,830 --> 00:22:41,450 497 00:22:41,450 --> 00:22:44,540 Kaya ako nakakakita ng isa, kaya isang hakbang, siguro dalawang hakbang dahil ito ay kung 498 00:22:44,540 --> 00:22:47,110 at pagkatapos ay bumalik, subalit ito ay pare-pareho ang oras, tama? 499 00:22:47,110 --> 00:22:49,960 Kaya't sinabi namin O (1), at iyon ang paano ko ipahayag ito. 500 00:22:49,960 --> 00:22:51,480 T, tumatakbo ang oras lamang. 501 00:22:51,480 --> 00:22:54,150 n ay ang laki ng input, kaya T (n), isang magarbong paraan 502 00:22:54,150 --> 00:22:56,330 sinasabi ng mga running oras ibinigay na input ng laki n 503 00:22:56,330 --> 00:23:00,220 ay magiging sa pagkakasunud-sunod pare-pareho ng oras, sa mga O (1). 504 00:23:00,220 --> 00:23:01,970 >> Ngunit kung hindi man, kung ano ang tungkol dito? 505 00:23:01,970 --> 00:23:05,660 Paano mo ipahayag ang oras ng paggana ng ito dilaw na linya? 506 00:23:05,660 --> 00:23:06,250 T ng kung ano? 507 00:23:06,250 --> 00:23:09,440 508 00:23:09,440 --> 00:23:12,665 Maaari mong uri ng cheat dito at sagutin ang aking tanong cyclically. 509 00:23:12,665 --> 00:23:14,770 510 00:23:14,770 --> 00:23:17,900 Kaya kung ang oras sa pangkalahatang sabihin namin lamang ay T (n). 511 00:23:17,900 --> 00:23:18,950 512 00:23:18,950 --> 00:23:22,490 At ngayon ka uri ng punting dito at sinasabi, mahusay, uri-uriin lamang ang kaliwang kalahati, 513 00:23:22,490 --> 00:23:23,920 at pagkatapos ay i-uri-uriin ang karapatan kalahati. 514 00:23:23,920 --> 00:23:27,520 Paano maaaring symbolically namin kumatawan ang oras ng paggana ito dilaw na linya? 515 00:23:27,520 --> 00:23:28,020 T ng kung ano? 516 00:23:28,020 --> 00:23:29,360 Ano ang laki ng input? 517 00:23:29,360 --> 00:23:30,510 518 00:23:30,510 --> 00:23:31,057 n higit sa dalawang. 519 00:23:31,057 --> 00:23:32,140 Bakit hindi ko pa lang sabihin na? 520 00:23:32,140 --> 00:23:36,449 At pagkatapos na ito ay isa pang T (n / 2) at pagkatapos ay muli, kung pagsamahin ko ng dalawang Pinagbukud-bukod halves, 521 00:23:36,449 --> 00:23:38,615 kung gaano karaming mga elemento ako ng pagpunta magkaroon upang pindutin ang kabuuang? 522 00:23:38,615 --> 00:23:39,780 523 00:23:39,780 --> 00:23:40,320 n. 524 00:23:40,320 --> 00:23:42,790 Kaya ang maaari kong ipahayag na ito, upang maging uri ng magarbong lamang, 525 00:23:42,790 --> 00:23:44,430 bilang ang oras sa pangkalahatan. 526 00:23:44,430 --> 00:23:51,140 T (n) ay isa lamang ang oras ng paggana ng T (n / 2), plus T (n / 2), pakaliwa kalahati at kanang kalahati, 527 00:23:51,140 --> 00:23:55,360 plus O (n), na kung saan ay marahil n hakbang na ito, ngunit marahil, kung gumagamit ako ng dalawang daliri, 528 00:23:55,360 --> 00:23:57,960 ito ay dalawang beses nang mas maraming hakbang na ito, subalit ito ay linear. 529 00:23:57,960 --> 00:24:00,440 Ito ay ilang bilang ng mga hakbang na isang factor ng n, 530 00:24:00,440 --> 00:24:02,270 kaya maaaring ipahayag namin ito bilang ito. 531 00:24:02,270 --> 00:24:05,550 At ito ay kung saan ngayon ipapakita namin punt sa pabalik sa aming mga aklat-aralin matematika ng mataas na paaralan 532 00:24:05,550 --> 00:24:10,290 Ikinalulungkot namin na ang pag-ulit sa huli Nagtatapos up na katumbas na ito, n beses log n, 533 00:24:10,290 --> 00:24:12,530 kung aktwal mong gawin out ang matematika sa higit pang pormal. 534 00:24:12,530 --> 00:24:13,950 >> Kaya na pananaw ng dalawang lamang. 535 00:24:13,950 --> 00:24:17,500 Isa numerically na may hard-code na kinatawan halimbawa 536 00:24:17,500 --> 00:24:21,140 gamit ang walong numero, at isang mas pangkalahatang pagtingin sa kung paano namin nakuha doon. 537 00:24:21,140 --> 00:24:25,670 Ngunit kung ano ang talagang kawili-wiling dito ay muli,, ang paniwala ng cycling. 538 00:24:25,670 --> 00:24:26,900 Hindi ko ginagamit para sa mga loop. 539 00:24:26,900 --> 00:24:29,860 Uri ng ako ng pagtukoy sa isang bagay sa mga tuntunin ng sarili nito, 540 00:24:29,860 --> 00:24:31,950 hindi lamang na may ito mathematical function, 541 00:24:31,950 --> 00:24:34,860 ngunit din sa mga tuntunin ng ito pseudo code. 542 00:24:34,860 --> 00:24:38,260 Ito pseudo code ay recursive sa na dalawa sa mga linya nito 543 00:24:38,260 --> 00:24:42,310 ay tunay na nagsasabi ito upang pumunta gamitin ang sarili nito upang malutas ang isang mas maliit na 544 00:24:42,310 --> 00:24:45,400 problema ng mas maliit na sukat, at muli at muli 545 00:24:45,400 --> 00:24:48,820 at muli hanggang sa whittle ito namin pababa sa ito nang sa gayon tinatawag na base kaso. 546 00:24:48,820 --> 00:24:52,810 >> Kaya ipaalam sa aktwal na gumuhit ng isang mas nakakahimok tumagal-layo mula ito tulad ng sumusunod. 547 00:24:52,810 --> 00:24:58,420 Hayaan akong pumunta sa gedit at kumuha ng isang tingnan ang ilan sa source code ngayong araw, 548 00:24:58,420 --> 00:24:59,930 sa partikular na halimbawang ito dito. 549 00:24:59,930 --> 00:25:03,709 Sigma 0, na tila nagdadagdag ang mga numero ng isa sa pamamagitan ng n. 550 00:25:03,709 --> 00:25:05,750 Kaya sabihin makita kung ano ang pamilyar at hindi pamilyar dito. 551 00:25:05,750 --> 00:25:08,690 Una mayroon kami ng ilang mga Kabilang, kaya walang bagong doon. 552 00:25:08,690 --> 00:25:09,190 Prototype. 553 00:25:09,190 --> 00:25:11,370 Ako ay medyo hazy sa ito pagkatapos ng ilang araw, 554 00:25:11,370 --> 00:25:13,790 ngunit kung ano ang sinabi namin ang isang prototype ng isang function ay? 555 00:25:13,790 --> 00:25:15,099 556 00:25:15,099 --> 00:25:16,015 Madla: [INAUDIBLE]. 557 00:25:16,015 --> 00:25:16,905 Tagapagsalita 1: Ano iyon? 558 00:25:16,905 --> 00:25:17,800 Madla: ipahayag namin ito. 559 00:25:17,800 --> 00:25:18,883 Tagapagsalita 1: ipahayag namin ito. 560 00:25:18,883 --> 00:25:22,290 Kaya ikaw ay nagtuturo Clang, hey, Hindi pa talaga ang pagpapatupad na ito, 561 00:25:22,290 --> 00:25:25,740 ngunit sa isang lugar sa ang file na ito, baka, Pupunta na isang function na tinatawag na kung ano? 562 00:25:25,740 --> 00:25:26,930 563 00:25:26,930 --> 00:25:27,540 Sigma. 564 00:25:27,540 --> 00:25:30,540 At ito ay isang pangako lamang na ito ay pagpunta sa ganito ang hitsura. 565 00:25:30,540 --> 00:25:33,720 Ito ay pagpunta sa tumagal ng isang integer bilang input-- at maaari ba akong maging mas tahasang 566 00:25:33,720 --> 00:25:36,570 at sabihin int n --and ito pagpunta upang bumalik sa isang int, 567 00:25:36,570 --> 00:25:39,900 ngunit semicolon paraan, mm, makikita ko makuha sa paligid sa pagpapatupad na ito ng kaunti sa ibang pagkakataon. 568 00:25:39,900 --> 00:25:40,989 Muli, Clang ay pipi. 569 00:25:40,989 --> 00:25:43,280 Ito ay pagpunta lamang na malaman kung ano sabihin mo ito sa itaas hanggang sa ibaba, 570 00:25:43,280 --> 00:25:45,765 kaya kailangan naming hindi bababa sa bigyan ito isang pahiwatig ng kung ano ang darating. 571 00:25:45,765 --> 00:25:47,330 >> Ngayon tingnan natin ang pangunahing dito ipaalam. 572 00:25:47,330 --> 00:25:50,040 Ng mag-scroll pababa dito Hayaan at tingnan kung ano ang pangunahing ginagawa. 573 00:25:50,040 --> 00:25:53,780 Ito ay hindi na mahaba ng isang function, at sa katunayan ay bumuo dito ay pamilyar. 574 00:25:53,780 --> 00:25:57,590 Ipinahahayag ko n isang variable, at pagkatapos ay Pester ko muli at muli ang user 575 00:25:57,590 --> 00:26:01,880 para sa isang positibong integer gamit getInt, at lamang na exit out ng loop 576 00:26:01,880 --> 00:26:03,280 sa sandaling ang gumagamit ay nakasunod. 577 00:26:03,280 --> 00:26:05,670 Gawin Habang, na ginamit namin upang pester ng user sa paraang iyon. 578 00:26:05,670 --> 00:26:06,670 Ngayon ito ay kawili-wili. 579 00:26:06,670 --> 00:26:08,510 Ipinahahayag ko sa isang int tinatawag na "sagot." 580 00:26:08,510 --> 00:26:11,420 Magtalaga ko ito ang halaga return ng isang function na tinatawag na "palatandaan." 581 00:26:11,420 --> 00:26:15,200 Hindi ko alam kung ano pa na ginagawa, ngunit Natatandaan ko pagdeklara ito ng ilang sandali ang nakalipas. 582 00:26:15,200 --> 00:26:18,310 At pagkatapos ay ako pagpasa sa halaga na ang gumagamit ay nai-type sa, n, 583 00:26:18,310 --> 00:26:20,420 at pagkatapos ay mag-uulat ang sagot. 584 00:26:20,420 --> 00:26:22,260 Ng mag-scroll pabalik na rin ipaalam para sa isang sandali lamang. 585 00:26:22,260 --> 00:26:28,620 Sabihin sige sa direktoryong ito, gumawa palatandaan 0, at aktwal na patakbuhin ang program na ito 586 00:26:28,620 --> 00:26:30,490 at tingnan kung ano ang mangyayari. 587 00:26:30,490 --> 00:26:35,930 Kaya kung pumunta ako magpatuloy at run ang program na ito, ./sigma-0, 588 00:26:35,930 --> 00:26:40,139 at nagta-type ako sa positibong integer tulad ng dalawa, Sigma, 589 00:26:40,139 --> 00:26:43,180 bilang nagpapahiwatig ng simbolo ng Griyego, ay lamang pagpunta sa magdagdag ng hanggang ang lahat ng mga numero mula sa 590 00:26:43,180 --> 00:26:44,320 ZERO sa hanggang sa dalawang. 591 00:26:44,320 --> 00:26:46,560 Kaya 0 plus 1 plus 2. 592 00:26:46,560 --> 00:26:48,830 Kaya ito ay dapat sana ay bigyan mo ako 3. 593 00:26:48,830 --> 00:26:49,750 Iyon lang nito ang ginagawa. 594 00:26:49,750 --> 00:26:52,690 At katulad, kung nagpatakbo ako ng ito muli at bibigyan ko ito ang bilang tatlong, 595 00:26:52,690 --> 00:26:56,721 na 3 plus 2, kaya na 5, plus 1 ay dapat magbigay sa akin 6. 596 00:26:56,721 --> 00:26:59,470 At pagkatapos ay kung makakuha ako talagang baliw at magsimulang mag-type sa mas malaking mga numero, 597 00:26:59,470 --> 00:27:01,290 dapat itong magbigay sa akin Mas malaki at mas malalaking sums. 598 00:27:01,290 --> 00:27:02,250 Kaya na ang lahat. 599 00:27:02,250 --> 00:27:04,010 >> Kaya kung ano ang hitsura ng palatandaan katulad? 600 00:27:04,010 --> 00:27:05,430 Well, ito ay medyo prangka. 601 00:27:05,430 --> 00:27:08,940 Ito ay kung paano maaari naming nagpatupad ito para sa nakalipas na dalawang linggo. 602 00:27:08,940 --> 00:27:11,120 "Int" ay magiging ang uri ng return. 603 00:27:11,120 --> 00:27:14,330 Sigma ay ang pangalan, at ito ay tumatagal ng isang variable m sa halip ng n. 604 00:27:14,330 --> 00:27:15,940 Makikita ko babaguhin na hanggang tuktok. 605 00:27:15,940 --> 00:27:17,340 Pagkatapos ito ay lamang ng isang tseke katinuan. 606 00:27:17,340 --> 00:27:18,430 607 00:27:18,430 --> 00:27:19,950 Susubukan naming makita kung bakit ang ilang mga sandali. 608 00:27:19,950 --> 00:27:24,220 Ngayon Dinedeklara ko ng isa pang variable, suma, initialize ito sa zero. 609 00:27:24,220 --> 00:27:28,140 Pagkatapos Mayroon akong na ito Para sa loop iterating, tila para sa kaliwanagan, 610 00:27:28,140 --> 00:27:33,810 mula sa i = 1 sa hanggang sa isang = m, na kung saan ay kahit anong user na nai-type sa, at pagkatapos ay ako 611 00:27:33,810 --> 00:27:35,690 dagdagan ang halagang tulad nito. 612 00:27:35,690 --> 00:27:37,360 At pagkatapos ay bumalik ang kabuuan. 613 00:27:37,360 --> 00:27:38,440 >> Kaya ng ilang mga katanungan. 614 00:27:38,440 --> 00:27:42,370 Ang isa, inaangkin ko sa aking mga komento na ito avoids panganib ng isang walang-katapusang loop. 615 00:27:42,370 --> 00:27:45,620 Bakit ang pagpasa sa isang negatibong numero humimok, potensyal, isang walang-katapusang loop? 616 00:27:45,620 --> 00:27:49,396 617 00:27:49,396 --> 00:27:51,290 >> Madla: Hindi ka maabot m. 618 00:27:51,290 --> 00:27:52,880 >> Tagapagsalita 1: Huwag kailanman maabot m. 619 00:27:52,880 --> 00:27:55,880 Ngunit m ay ipinasa sa, kaya sabihin isaalang-alang ang isang simpleng halimbawa. 620 00:27:55,880 --> 00:27:58,510 Kung m ay ipinasa sa pamamagitan ng user bilang mga negatibong isa. 621 00:27:58,510 --> 00:28:00,059 Kanikanilang mga pangunahing. 622 00:28:00,059 --> 00:28:01,850 Pangunahing pinoprotektahan sa amin mula sa ito, kaya lamang ako 623 00:28:01,850 --> 00:28:04,680 pagiging talagang anal sa palatandaan upang matiyak na rin 624 00:28:04,680 --> 00:28:06,540 na input ay hindi maaaring maging negatibo. 625 00:28:06,540 --> 00:28:10,130 Kaya kung m ay negatibo, isang bagay tulad ng mga negatibong isa. 626 00:28:10,130 --> 00:28:11,930 Ano ang nangyayari sa mangyayari? 627 00:28:11,930 --> 00:28:14,390 Well, i ay pagpunta sa makakuha ng mga nasimulan sa isa, 628 00:28:14,390 --> 00:28:19,060 at pagkatapos ay i ay magiging mas mababa sa o katumbas ng m? 629 00:28:19,060 --> 00:28:24,130 630 00:28:24,130 --> 00:28:24,765 >> Stand sa pamamagitan ng. 631 00:28:24,765 --> 00:28:26,930 632 00:28:26,930 --> 00:28:29,370 Iyon was-- sabihin hindi, nix ng kuwentong ito ipaalam. 633 00:28:29,370 --> 00:28:32,780 Hindi ko hinihiling na pinag-uusapan, dahil ang panganib na ako ay alluding sa 634 00:28:32,780 --> 00:28:38,360 Hindi pupunta mangyari dahil i ay palaging pagpunta na mas malaki than-- OK, 635 00:28:38,360 --> 00:28:39,871 Bawiin ko na pinag-uusapan. 636 00:28:39,871 --> 00:28:40,370 OK. 637 00:28:40,370 --> 00:28:42,030 Ni tumuon lamang sa bahaging ito dito Hayaang. 638 00:28:42,030 --> 00:28:44,210 639 00:28:44,210 --> 00:28:48,830 Bakit Ipinahahayag ko ang ilang mga sa labas ng loop? 640 00:28:48,830 --> 00:28:52,010 Abiso sa 49 na hindi ko na linya ipinahayag i loob ng loop, 641 00:28:52,010 --> 00:28:54,950 ngunit online 48 na hindi ko na ipinahayag ng ilang sa labas. 642 00:28:54,950 --> 00:28:55,695 Oo. 643 00:28:55,695 --> 00:28:56,611 Madla: [INAUDIBLE]. 644 00:28:56,611 --> 00:28:58,734 645 00:28:58,734 --> 00:28:59,400 Tagapagsalita 1: Oo naman. 646 00:28:59,400 --> 00:29:03,360 Kaya una at pangunahing ko ay tiyak na hindi nais na idedeklara at simulan ang halagang 647 00:29:03,360 --> 00:29:06,130 sa zero sa loob ng loop sa bawat iteration, 648 00:29:06,130 --> 00:29:09,370 dahil ito ay malinaw na talunin ang layunin ng summing up ng mga numero. 649 00:29:09,370 --> 00:29:11,770 Gusto ko panatilihin ang pagbabago ang halaga pabalik sa zero. 650 00:29:11,770 --> 00:29:17,992 At din, kung ano ang isa pang higit pa arcane dahilan para sa na parehong desisyon na disenyo? 651 00:29:17,992 --> 00:29:18,954 Oo. 652 00:29:18,954 --> 00:29:20,279 >> Madla: [INAUDIBLE]. 653 00:29:20,279 --> 00:29:21,070 Tagapagsalita 1: Mismong. 654 00:29:21,070 --> 00:29:24,060 Gusto kong i-access ito sa labas ng loop masyadong sa kung anong line? 655 00:29:24,060 --> 00:29:25,390 656 00:29:25,390 --> 00:29:26,400 Sa 53. 657 00:29:26,400 --> 00:29:29,910 At batay sa aming pamantayan mula sa loob ng ilang mga aralin na ang nakakaraan, 658 00:29:29,910 --> 00:29:33,680 variable ay scoped, talaga ito, sa kulot braces na sumaklaw sa mga ito. 659 00:29:33,680 --> 00:29:38,190 Kaya kung hindi ko idedeklara halagang loob sa mga panlabas na kulot braces, 660 00:29:38,190 --> 00:29:40,250 Hindi ko ma-gamitin ito sa 53 linya. 661 00:29:40,250 --> 00:29:43,160 Ilagay ang isa pang paraan, kung ipinahayag ko halagang in dito, o kahit na sa loob ng 662 00:29:43,160 --> 00:29:45,410 Para sa loop, hindi ko ma-access ito sa 53. 663 00:29:45,410 --> 00:29:47,150 Ang variable ay epektibo ay nawala. 664 00:29:47,150 --> 00:29:48,579 Kaya ng ilang mga dahilan doon. 665 00:29:48,579 --> 00:29:50,370 Ngunit ngayon sabihin bumalik at tingnan kung ano ang mangyayari. 666 00:29:50,370 --> 00:29:51,730 Kaya palatandaan ay makakakuha ng tinatawag na. 667 00:29:51,730 --> 00:29:55,640 Ito ay nagdadagdag ng hanggang 1 plus 2, o 1 plus 2 plus 3, at pagkatapos ay bumalik ang halaga, 668 00:29:55,640 --> 00:29:59,660 Nag-iimbak ito sa sagot, at printf dito ang dahilan kung bakit ako nakakakita sa screen. 669 00:29:59,660 --> 00:30:03,079 Kaya ito ay kung ano ang makikita namin tumawag sa isang iterative diskarte, kung saan iteration lamang 670 00:30:03,079 --> 00:30:03,870 Nangangahulugan ang paggamit ng isang loop. 671 00:30:03,870 --> 00:30:06,900 Isang Para sa loop, isang Habang loop, isang Do Habang loop, lamang ang paggawa ng isang bagay na muli 672 00:30:06,900 --> 00:30:08,380 at muli at muli. 673 00:30:08,380 --> 00:30:13,505 >> Ngunit palatandaan ay uri ng kapong baka isang function na sa na maaaring ko ito ipatupad nang iba. 674 00:30:13,505 --> 00:30:14,620 675 00:30:14,620 --> 00:30:19,120 Paano ang tungkol sa ito, na upang maging uri ng mga cool na lang, 676 00:30:19,120 --> 00:30:21,880 ipaalam sa akin talagang mapupuksa ng maraming distraction 677 00:30:21,880 --> 00:30:24,380 dahil ito function na ay talagang medyo simple. 678 00:30:24,380 --> 00:30:27,780 Sabihin whittle ito pababa lamang sa kanyang apat na pangunahing mga linya 679 00:30:27,780 --> 00:30:30,410 at mapupuksa ang lahat ng mga mga komento at mga kulot braces. 680 00:30:30,410 --> 00:30:34,334 Ito ay uri ng isang isip-Pagbugso alternatibong pagpapatupad. 681 00:30:34,334 --> 00:30:37,250 Ang lahat ng mga karapatan, siguro ay hindi bale-pamumulaklak, subalit ito ay uri ng sexier, lahat ng karapatan, 682 00:30:37,250 --> 00:30:39,920 tumingin sa mga ito nang sa gayon mas succinctly. 683 00:30:39,920 --> 00:30:43,120 Sa mga linya apat lamang ng mga code, Ako ay may unang katinuan check na ito. 684 00:30:43,120 --> 00:30:45,732 Kung m ay mas mababa sa o katumbas ng zero, palatandaan ginagawang walang kahulugan. 685 00:30:45,732 --> 00:30:48,190 Ito ay dapat lamang na nasa ito kaso para sa positibong numero, 686 00:30:48,190 --> 00:30:50,340 kaya lang pupuntahan ko bumalik sa zero nagkataon 687 00:30:50,340 --> 00:30:53,210 nang sa gayon ay hindi bababa sa kami ay may ilang tinatawag na base kaso. 688 00:30:53,210 --> 00:30:54,430 >> Ngunit narito ang beauty. 689 00:30:54,430 --> 00:30:59,930 Ang kabuuan ng ideyang ito, ang pagdaragdag ng numero mula 1 hanggang n, o m sa kasong ito, 690 00:30:59,930 --> 00:31:02,630 Maaaring magawa sa pamamagitan ng uri ng pagpasa sa Buck. 691 00:31:02,630 --> 00:31:04,947 Well, kung ano ay ang kabuuan ng 1 hanggang m? 692 00:31:04,947 --> 00:31:05,780 Well, alam mo kung ano? 693 00:31:05,780 --> 00:31:11,949 Ito ay ang parehong bilang ang kabuuan ng m plus ang kabuuan ng 1 hanggang m minus 1. 694 00:31:11,949 --> 00:31:12,740 Well alam mo kung ano? 695 00:31:12,740 --> 00:31:13,940 Ano ang palatandaan ng m minus 1? 696 00:31:13,940 --> 00:31:17,860 Well, kung ikaw uri ng sundin ito lohikal, ito ay kapareho ng m minus 1 697 00:31:17,860 --> 00:31:21,415 plus palatandaan ng m minus 2. 698 00:31:21,415 --> 00:31:22,480 699 00:31:22,480 --> 00:31:26,012 Kaya maaari mong uri ng just-- ito ay tulad ng, kung ikaw ay lamang 700 00:31:26,012 --> 00:31:28,220 sinusubukan mong mang-inis sa isang kaibigan at tanungin sila kang tanong, 701 00:31:28,220 --> 00:31:31,344 mo uri ng tumugon sa isang tanong, maaari mong uri ng panatilihin ang pagpasa sa Buck. 702 00:31:31,344 --> 00:31:34,560 Ngunit kung ano ang key ay kung patuloy mong paggawa ng mas maliit at mas maliit ang tanong 703 00:31:34,560 --> 00:31:36,910 at mas maliit, ikaw ay hindi humihingi kung ano ang palatandaan 704 00:31:36,910 --> 00:31:39,116 ng n, kung ano ang palatandaan ng n, kung ano ang palatandaan ng n? 705 00:31:39,116 --> 00:31:40,990 Ka na humihiling sa kung ano ang palatandaan ng n, kung ano ang palatandaan 706 00:31:40,990 --> 00:31:42,839 ng n minus 1, ano ang palatandaan ng n minus 2? 707 00:31:42,839 --> 00:31:44,880 Sa paglaon ang iyong tanong Mawawala na maging kung ano? 708 00:31:44,880 --> 00:31:50,250 Ano ang palatandaan ng isa o zero, ang ilang mga napakaliit na halaga, 709 00:31:50,250 --> 00:31:52,220 at sa lalong madaling mo makakuha ng mga iyon, ang iyong kaibigan, 710 00:31:52,220 --> 00:31:54,350 ikaw ay hindi pagpunta sa magtanong muli ng parehong tanong, 711 00:31:54,350 --> 00:31:55,975 lamang ka ng pagpunta sa sabihin, oh ito ay zero. 712 00:31:55,975 --> 00:31:58,490 Kami ay tapos na sa paglalaro ng ganitong uri ng hangal paikot-ikot ng laro. 713 00:31:58,490 --> 00:32:02,950 >> Kaya recursion ay ang kilos sa programming ng isang function sa pagtawag mismo. 714 00:32:02,950 --> 00:32:06,630 Ang program na ito, kapag pinagsama-sama at magpatakbo, ay pagpunta sa kumilos nang eksakto sa parehong paraan, 715 00:32:06,630 --> 00:32:09,620 ngunit kung ano ang key ay na loob ng isang function na tinatawag na palatandaan, 716 00:32:09,620 --> 00:32:13,150 doon ay isang linya ng code kung saan kami ay pagtawag sa ating sarili, 717 00:32:13,150 --> 00:32:14,980 na kung saan ay normal na maging masama. 718 00:32:14,980 --> 00:32:21,160 Halimbawa, kung ano ang unang kung ako pinagsama-sama ito, kaya gumawa sigma-- 719 00:32:21,160 --> 00:32:22,710 gumawa ng palatandaan 1 ./sigma-1. 720 00:32:22,710 --> 00:32:25,050 721 00:32:25,050 --> 00:32:27,690 Positibong integer, mangyaring, 50 1275. 722 00:32:27,690 --> 00:32:30,810 Kaya kung ano Mukhang ang function maging, batay sa isa pagsubok, tama. 723 00:32:30,810 --> 00:32:34,917 Ngunit ano kung nakakuha ako ng maliit na mapanganib at tanggalin ang mga tinatawag na base kaso, 724 00:32:34,917 --> 00:32:37,750 at sabihin lamang, na rin ako sa paggawa ng lamang ito mas komplikado kaysa ito ay. 725 00:32:37,750 --> 00:32:42,450 Compute ng lang ang mga palatandaan Hayaan sa pamamagitan ng pagsasagawa m at pagkatapos ay pagdaragdag ng 726 00:32:42,450 --> 00:32:44,564 sa palatandaan ng m minus isa? 727 00:32:44,564 --> 00:32:45,980 Well, kung ano ang nangyayari sa mangyayari dito? 728 00:32:45,980 --> 00:32:47,140 Ni-zoom out Hayaan. 729 00:32:47,140 --> 00:32:52,920 Mag-recompile ng mga programa Hayaan, i-save ito, mag-recompile sa programa, 730 00:32:52,920 --> 00:33:00,450 at pagkatapos ay handa ./sigma-1-zoom in, ipasok ang positibong integer mangyaring, 50. 731 00:33:00,450 --> 00:33:02,180 732 00:33:02,180 --> 00:33:04,430 Paano marami sa inyo ay payag sa fess up upang makita ang na? 733 00:33:04,430 --> 00:33:04,950 >> OK. 734 00:33:04,950 --> 00:33:06,690 Kaya ito ay maaaring mangyari para sa bilang ng mga kadahilanan, 735 00:33:06,690 --> 00:33:09,148 at tapat sa linggong ito kami ay tungkol upang makapagbigay ng higit sa mga ito sa iyo. 736 00:33:09,148 --> 00:33:11,780 Ngunit sa kasong ito, subukan Dahilan sa paurong 737 00:33:11,780 --> 00:33:14,430 kung ano ang maaaring nangyari dito? 738 00:33:14,430 --> 00:33:17,400 Segmentation fault, sinabi namin huling panahon, ay tumutukoy sa isang segment ng memorya. 739 00:33:17,400 --> 00:33:18,690 Isang bagay masamang nangyari. 740 00:33:18,690 --> 00:33:21,550 Ngunit kung ano ang ito mechanically na nagpunta pilipit 741 00:33:21,550 --> 00:33:25,000 dito dahil sa aking pag-alis ng na tinatawag na base kaso, 742 00:33:25,000 --> 00:33:26,870 kung saan ibinalik ko ang isang hard-code na halaga? 743 00:33:26,870 --> 00:33:28,970 744 00:33:28,970 --> 00:33:30,460 Ano ang tingin mo nangyaring mali? 745 00:33:30,460 --> 00:33:31,219 Oo. 746 00:33:31,219 --> 00:33:32,135 >> Madla: [INAUDIBLE]. 747 00:33:32,135 --> 00:33:36,387 748 00:33:36,387 --> 00:33:36,970 Tagapagsalita 1: Ah. 749 00:33:36,970 --> 00:33:37,550 Magandang katanungan. 750 00:33:37,550 --> 00:33:39,508 Kaya ang laki ng mga numero na ako ay summing up 751 00:33:39,508 --> 00:33:41,920 Nakakuha kaya malaki na ito ay nalampasan ang laki ng puwang ng memory. 752 00:33:41,920 --> 00:33:44,640 Magandang ideya, ngunit hindi fundamentally pagpunta sa maging sanhi ng pag-crash. 753 00:33:44,640 --> 00:33:48,230 Iyon maaaring magsanhi ng integer overflow, kung saan ang mga bits i-flip ng higit lamang sa 754 00:33:48,230 --> 00:33:51,760 at pagkatapos ay pagkakamali namin isang talagang malaking number para sa tulad ng isang negatibong numero, 755 00:33:51,760 --> 00:33:53,260 ngunit hindi mismo ay magiging sanhi ng pag-crash. 756 00:33:53,260 --> 00:33:55,509 Dahil sa dulo ng araw sa isang int ay 32 bit pa rin. 757 00:33:55,509 --> 00:33:57,640 Hindi ka pagpunta sa sinasadyang magnakaw ng isang 33 bit. 758 00:33:57,640 --> 00:33:58,431 Ngunit isang mahusay na pag-iisip. 759 00:33:58,431 --> 00:33:58,984 Oo. 760 00:33:58,984 --> 00:33:59,900 >> Madla: [INAUDIBLE]. 761 00:33:59,900 --> 00:34:00,551 762 00:34:00,551 --> 00:34:02,300 Tagapagsalita 1: Ang paraan ng hindi kailanman tumigil sa pagtakbo, 763 00:34:02,300 --> 00:34:06,658 at sa katunayan ito tawag mismo muli at at muli at muli muli 764 00:34:06,658 --> 00:34:08,449 at muli, at wala sa mga function kailanman 765 00:34:08,449 --> 00:34:13,310 tapusin sapagkat ang kanilang mga nag-iisang linya ng code ng tawag themself muli at muli 766 00:34:13,310 --> 00:34:14,219 at muli. 767 00:34:14,219 --> 00:34:16,080 At kung ano ang talagang nangyayari dito, at ngayon kami 768 00:34:16,080 --> 00:34:18,100 uri ng Maaari gumuhit ito pictorially. 769 00:34:18,100 --> 00:34:20,899 Hayaan akong pumunta sa ibabaw sa isang larawan para sa sandali lamang. 770 00:34:20,899 --> 00:34:22,940 Ito ay isang larawan, na ay malaon laman out 771 00:34:22,940 --> 00:34:26,336 nang mas detalyado, ng kung ano ang nangyayari sa sa loob ng memory ng iyong computer. 772 00:34:26,336 --> 00:34:28,460 At ito ay lumiliko out na sa sa ibaba ng larawan na ito 773 00:34:28,460 --> 00:34:29,709 ay isang bagay na tinatawag na stack. 774 00:34:29,709 --> 00:34:31,920 Ito ay isang chunk ng memorya, isang chunk ng RAM, 775 00:34:31,920 --> 00:34:33,920 na ginagamit lamang sa anumang oras isang function ay tinatawag na. 776 00:34:33,920 --> 00:34:36,239 Anumang oras mo, isang programmer, tumawag sa isang function, 777 00:34:36,239 --> 00:34:38,860 sa operating system, tulad ng Mac OS, Windows, o Linux, 778 00:34:38,860 --> 00:34:41,920 grabs isang bungkos ng mga byte, siguro ay isang ilang kilobytes, marahil ilang megabytes 779 00:34:41,920 --> 00:34:44,590 ng memorya, mga kamay ang mga ito sa iyo, at pagkatapos ay nagbibigay-daan sa 780 00:34:44,590 --> 00:34:47,650 patakbuhin mo ang iyong mga pag-andar ng paggamit anumang mga variable na kailangan mo. 781 00:34:47,650 --> 00:34:50,699 At kung pagkatapos ay tumawag sa iyo ng isa pang function at isa pang pag-andar, 782 00:34:50,699 --> 00:34:53,590 makakuha ka ng isa pang slice ng memorya at isa pa na hati ng memorya. 783 00:34:53,590 --> 00:34:57,090 >> At sa katunayan, kung ang mga berde trays mula sa Annenberg kumakatawan na memorya, 784 00:34:57,090 --> 00:34:59,870 narito kung ano ang mangyayari sa unang oras tawagan ka function na palatandaan. 785 00:34:59,870 --> 00:35:04,510 Ito ay tulad ng paglalagay ng tray na tulad nito sa kung ano ang una isang walang laman na stack. 786 00:35:04,510 --> 00:35:07,142 Ngunit pagkatapos kung na tray tawag mismo, kaya upang makipag-usap, 787 00:35:07,142 --> 00:35:08,850 pagtawag sa isa pang pagkakataon ng palatandaan, na 788 00:35:08,850 --> 00:35:11,640 tulad ng pagtatanong sa operating system, ooh, kailangan ng kaunti pa sa memorya, 789 00:35:11,640 --> 00:35:12,520 ninyo ako iyon. 790 00:35:12,520 --> 00:35:14,840 At pagkatapos ay maipo-piled sa sa tuktok. 791 00:35:14,840 --> 00:35:18,030 Ngunit kung ano ang key dito ay ang unang tray ay mayroong pa rin, 792 00:35:18,030 --> 00:35:20,620 dahil mahihingi niya ang pangalawang tray. 793 00:35:20,620 --> 00:35:23,500 Ngayon samantala, palatandaan tumawag palatandaan, na tulad ng pagtatanong para sa higit pang memory. 794 00:35:23,500 --> 00:35:25,830 Ay makakakuha ng piled sa paglipas dito. 795 00:35:25,830 --> 00:35:29,350 palatandaan tumawag palatandaan, na ang isa pang tray na maipo-piled sa dito. 796 00:35:29,350 --> 00:35:32,942 At kung ikaw panatilihing ginagawa ito, Sa kalaunan, uri ng imapa ang visual na 797 00:35:32,942 --> 00:35:35,525 sa tsart na, kung ano ang nangyayari sa mangyari sa mga stack ng mga trays? 798 00:35:35,525 --> 00:35:37,480 799 00:35:37,480 --> 00:35:41,160 Ito ay pagpunta lalampas sa halaga ng memory ng iyong computer ay may. 800 00:35:41,160 --> 00:35:45,790 At sa lalong madaling ito berde tray lumampas sa pahalang na linya 801 00:35:45,790 --> 00:35:49,410 sa itaas stack at sa itaas na salita heap, kung saan ipapakita namin ay bumalik sa sa hinaharap, 802 00:35:49,410 --> 00:35:50,410 iyon ay isang masamang bagay. 803 00:35:50,410 --> 00:35:52,810 Heap Ang ay isang iba't ibang segment ng memorya, 804 00:35:52,810 --> 00:35:55,190 at kung ipaalam sa iyo ang mga trays pile at tumpok sa, 805 00:35:55,190 --> 00:35:57,800 ka ng pagpunta sa lumampas ng iyong sariling mga segment ng memorya, 806 00:35:57,800 --> 00:36:00,420 at isang programa ay sa katunayan ng pagpunta sa pag-crash ng. 807 00:36:00,420 --> 00:36:02,930 >> Ngayon bilang isang bukod, sa ideya na ito ng recursion, samakatuwid, 808 00:36:02,930 --> 00:36:06,500 Maaari malinaw na humahantong sa mga problema, ngunit ito ay hindi palaging isang masamang bagay. 809 00:36:06,500 --> 00:36:08,840 Dahil isaalang-alang, pagkatapos lahat, how-- at marahil 810 00:36:08,840 --> 00:36:11,700 ito ay tumatagal ng ilang mga nagsisimula pa ginamit upang --how eleganteng o kung paano simple 811 00:36:11,700 --> 00:36:14,890 na pagpapatupad ng mga palatandaan ay. 812 00:36:14,890 --> 00:36:17,440 At hindi kami ay pagpunta upang gamitin ang recursion lahat na magkano sa CS50, 813 00:36:17,440 --> 00:36:20,780 ngunit sa CS51, at talagang anumang klase kung saan mo manipulahin ang mga istraktura ng data 814 00:36:20,780 --> 00:36:23,640 tulad ng mga puno, o pamilya mga puno, na may ilang hierarchy, 815 00:36:23,640 --> 00:36:26,000 ito ay sobrang, sobrang kapaki-pakinabang. 816 00:36:26,000 --> 00:36:29,750 Ngayon, bilang isang bukod, nang sa gayon ay bilang aspiring siyentipiko computer na 817 00:36:29,750 --> 00:36:33,180 ay pamilyar sa ilan sa mga Google sa loob biro, kung pumunta ka sa Google 818 00:36:33,180 --> 00:36:36,345 at tumingin ka up ano ang kahulugan ng, sabihin nating, recursion, ipasok. 819 00:36:36,345 --> 00:36:40,208 820 00:36:40,208 --> 00:36:41,110 Uh-huh. 821 00:36:41,110 --> 00:36:42,670 Bilang isang bukod, na nakuha up ako ng ilan. 822 00:36:42,670 --> 00:36:45,470 Ito ay tulad ng 10 minuto ng procrastination ito umaga. 823 00:36:45,470 --> 00:36:52,890 Kung ikaw din ang Google ng "askew," abiso sa pamamagitan ng Pagkiling iyong ulo slightly-- 824 00:36:52,890 --> 00:36:55,120 at pagkatapos ay ang isang ito ay marahil pinaka atrocious ng lahat 825 00:36:55,120 --> 00:36:57,286 dahil ang isang tao na ginugol tulad ng ang kanilang araw ng pagpapatupad na ito 826 00:36:57,286 --> 00:36:59,880 ilang taon na ago-- dumating sa. 827 00:36:59,880 --> 00:37:01,140 828 00:37:01,140 --> 00:37:04,540 Oh, wait-- na ang isang bug. 829 00:37:04,540 --> 00:37:08,410 830 00:37:08,410 --> 00:37:11,410 >> Kaya't ang pagpapatakbo sa isa sa mga pinakamalaking mga website ng mundo 831 00:37:11,410 --> 00:37:13,510 ang mga hangal kaunti Easter itlog. 832 00:37:13,510 --> 00:37:16,690 Marahil sila kumonsumo ng isang nontrivial bilang ng mga linya ng code 833 00:37:16,690 --> 00:37:19,280 lamang sa gayon ay maaari kaming magkaroon maliit na masaya mga bagay tulad na. 834 00:37:19,280 --> 00:37:22,140 Ngunit hindi bababa sa ngayon kang makakuha ng ang ilan sa mga nasa loob biro. 835 00:37:22,140 --> 00:37:28,330 >> Ngayon ipaalam sa tumagal ng isang pagtingin sa ilan sa mga puti ay namamalagi nagsi-pagsabi namin ng late, 836 00:37:28,330 --> 00:37:30,707 at simulang i-Peel pabalik ilang mga layer technically 837 00:37:30,707 --> 00:37:32,790 nang sa gayon ay talagang nauunawaan mo kung ano ang nangyayari 838 00:37:32,790 --> 00:37:34,860 at maaari mong maunawaan ang ilan sa mga pagbabanta, 839 00:37:34,860 --> 00:37:38,060 tulad ng Shellshock, na Sinimulan na ngayon upang maging 840 00:37:38,060 --> 00:37:41,110 sa harap ng lahat pansin, doon man lamang sa media. 841 00:37:41,110 --> 00:37:45,810 Kaya dito ay isang napaka-simpleng pag-andar na nagbabalik ng walang, walang bisa. 842 00:37:45,810 --> 00:37:46,790 Ang pangalan nito ay magpalitan. 843 00:37:46,790 --> 00:37:50,880 Itong tumatagal sa dalawang variable at ito ay nagbabalik wala. 844 00:37:50,880 --> 00:37:52,260 Tumatagal sa isang at b. 845 00:37:52,260 --> 00:37:53,337 Kaya isang mabilis na pagpapakita. 846 00:37:53,337 --> 00:37:54,170 Dinala namin ang mga up. 847 00:37:54,170 --> 00:37:56,100 Maaaring pati na rin kami ng isang maliit na masira dito para sa isang sandali lamang 848 00:37:56,100 --> 00:37:57,250 at magkaroon ng isang maliit na isang bagay sa pag-inom. 849 00:37:57,250 --> 00:38:00,120 Kung may isang taong hindi bale ng pagsali sa akin up dito para sa sandali lamang. 850 00:38:00,120 --> 00:38:01,830 Paano tungkol sa iyo sa maroon shirt? 851 00:38:01,830 --> 00:38:02,335 Halika sa up. 852 00:38:02,335 --> 00:38:04,060 853 00:38:04,060 --> 00:38:05,260 Lamang ang isa ngayon. 854 00:38:05,260 --> 00:38:06,251 Salamat sa iyo, bagaman. 855 00:38:06,251 --> 00:38:08,000 Ang lahat ng mga karapatan, at mayroon kaming paparating na dito? 856 00:38:08,000 --> 00:38:08,660 Ano ang inyong pangalan? 857 00:38:08,660 --> 00:38:09,360 >> Tagapagsalita 4: Laura. 858 00:38:09,360 --> 00:38:09,740 >> Tagapagsalita 1: Laura. 859 00:38:09,740 --> 00:38:10,370 Halika sa up. 860 00:38:10,370 --> 00:38:11,460 861 00:38:11,460 --> 00:38:13,850 Kaya Laura, napaka-simpleng hamon ngayon. 862 00:38:13,850 --> 00:38:14,704 863 00:38:14,704 --> 00:38:15,370 Nice upang matugunan yo. 864 00:38:15,370 --> 00:38:16,410 865 00:38:16,410 --> 00:38:16,910 Lahat ng karapatan. 866 00:38:16,910 --> 00:38:21,179 Kaya mayroon kaming ilang mga gatas sa paglipas dito at mayroon kaming ilang mga orange juice sa paglipas dito 867 00:38:21,179 --> 00:38:23,345 at ang ilan tasa na namin hiniram mula sa Annenberg ngayon. 868 00:38:23,345 --> 00:38:24,178 >> Tagapagsalita 4: hiniram. 869 00:38:24,178 --> 00:38:27,240 Tagapagsalita 1: At pagpunta sa sige at bibigyan ka ng kalahati ng isang baso ng ito. 870 00:38:27,240 --> 00:38:28,250 871 00:38:28,250 --> 00:38:28,800 Lahat ng karapatan. 872 00:38:28,800 --> 00:38:30,750 At bibigyan ka namin ng kalahati isang baso ng gatas. 873 00:38:30,750 --> 00:38:31,905 874 00:38:31,905 --> 00:38:35,890 Oh, at sa gayon lamang na maaari kang matandaan kung ano ito ay tulad, 875 00:38:35,890 --> 00:38:38,860 Remembered ko bang magdala ng ito up at sa ngayon. 876 00:38:38,860 --> 00:38:42,030 877 00:38:42,030 --> 00:38:42,530 Okay. 878 00:38:42,530 --> 00:38:45,470 Kung hindi mo nais na bale, sabihin makita, namin Maaaring ilagay ang mga ito sa paglipas ng iyong sariling baso 879 00:38:45,470 --> 00:38:46,560 kung gusto mo. 880 00:38:46,560 --> 00:38:48,710 Makikita ito maging sa mundo mula sa mga mata ni Laura. 881 00:38:48,710 --> 00:38:49,210 Lahat ng karapatan. 882 00:38:49,210 --> 00:38:53,820 Kaya ang iyong mga layunin, na ibinigay ng dalawang tasa ng likido dito, gatas at orange juice, 883 00:38:53,820 --> 00:38:58,370 ay magpalit ang dalawang mga nilalaman nang sa gayon ay ang orange juice ay pumupunta sa gatas ng tasa 884 00:38:58,370 --> 00:39:00,710 at ang gatas ay pumupunta sa ang orange juice tasa. 885 00:39:00,710 --> 00:39:02,359 >> Tagapagsalita 4: Gawin makakuha ako ng isa pang tasa? 886 00:39:02,359 --> 00:39:05,650 Tagapagsalita 1: Ako kaya natutuwa hiniling mo, bagaman ito sana ay naging mas mas mahusay na footage 887 00:39:05,650 --> 00:39:06,710 kung hindi mo ay nagtanong. 888 00:39:06,710 --> 00:39:10,620 Ngunit oo, maaari naming mag-alok ng isang third tasa na walang laman, siyempre. 889 00:39:10,620 --> 00:39:11,120 Lahat ng karapatan. 890 00:39:11,120 --> 00:39:12,300 Kaya magpalit ang mga nilalaman doon. 891 00:39:12,300 --> 00:39:16,100 892 00:39:16,100 --> 00:39:17,050 Sa lalong magaling. 893 00:39:17,050 --> 00:39:20,390 894 00:39:20,390 --> 00:39:21,305 Napakabuti. 895 00:39:21,305 --> 00:39:23,121 896 00:39:23,121 --> 00:39:24,745 Ginagawa mo ito nang mabuti remarkably. 897 00:39:24,745 --> 00:39:26,970 898 00:39:26,970 --> 00:39:28,655 At hakbang tatlo. 899 00:39:28,655 --> 00:39:30,390 900 00:39:30,390 --> 00:39:31,350 Lahat ng karapatan. 901 00:39:31,350 --> 00:39:31,930 Mahusay. 902 00:39:31,930 --> 00:39:33,930 Ang isang malaking round ng applause ay magiging mabuti para sa Laura. 903 00:39:33,930 --> 00:39:36,500 904 00:39:36,500 --> 00:39:37,000 Lahat ng karapatan. 905 00:39:37,000 --> 00:39:40,790 Mayroon kaming isang maliit na regalo pamamaalam para sa iyo, ngunit hayaan mo akong gawin ang mga. 906 00:39:40,790 --> 00:39:42,620 Salamat sa iyo kaya magkano. 907 00:39:42,620 --> 00:39:46,170 Kaya isang simpleng halimbawa, bagaman, upang ipakita na kung gagawin mo 908 00:39:46,170 --> 00:39:48,300 nais magpalit ng mga nilalaman ng dalawang mga lalagyan, 909 00:39:48,300 --> 00:39:52,360 o hayaan tumawag sa kanila na variable, kailangan mo ng ilang mga pansamantalang imbakan 910 00:39:52,360 --> 00:39:56,710 sa yugto ng isa sa mga nilalaman sa gayon na maaari mong aktwal na gawin ang swap. 911 00:39:56,710 --> 00:40:01,790 Kaya sa katunayan, ito source code up dito sa C ay kinatawan ng eksakto na. 912 00:40:01,790 --> 00:40:06,340 Kung ang orange juice ay isang at ang gatas ay b, at gusto naming magpalit ang dalawa, 913 00:40:06,340 --> 00:40:08,990 maaari mong subukan ang isang bagay na creative sa pamamagitan ng pagbuhos ng isa sa iba pang, 914 00:40:08,990 --> 00:40:11,031 ngunit malamang na gagana hindi magtapos ay partikular na mahusay. 915 00:40:11,031 --> 00:40:15,260 At kaya gumagamit kami ng isang third tasa, tawag ito tmp, T-M-P sa pamamagitan ng convention, 916 00:40:15,260 --> 00:40:19,370 at ilagay ang mga nilalaman ng OJ sa na, pagkatapos magpalit isa tasa, 917 00:40:19,370 --> 00:40:22,610 pagkatapos ay ilagay ang OJ sa orihinal na tasa, at sa gayon 918 00:40:22,610 --> 00:40:25,320 pagkamit, nang eksakto kung paano Laura ginawa, ang magpalitan. 919 00:40:25,320 --> 00:40:26,850 >> Kaya sabihin gawin eksakto na. 920 00:40:26,850 --> 00:40:30,110 Hayaan akong sige at buksan up isang halimbawa na 921 00:40:30,110 --> 00:40:32,720 aktwal na tinatawag na "walang magpalit, "dahil hindi ito 922 00:40:32,720 --> 00:40:36,180 bilang lang tapos na bilang maaari mong isipin. 923 00:40:36,180 --> 00:40:41,190 Kaya sa programang ito, mapapansin na ang Ginagamit ko ang stdio.h, ang aming lumang kaibigan. 924 00:40:41,190 --> 00:40:43,130 Mayroon akong ang prototype para magpalitan up doon, na 925 00:40:43,130 --> 00:40:45,450 Nangangahulugan pagpapatupad ng kanyang marahil down na sa ibaba, 926 00:40:45,450 --> 00:40:48,050 at sabihin makita kung ano ang pangunahing ito programa pupuntahan gawin para sa akin. 927 00:40:48,050 --> 00:40:52,020 Ako unang idedeklara nakakakuha int x isa, at int y nakakakuha ng dalawang. 928 00:40:52,020 --> 00:40:54,930 Kaya sa tingin ng mga bilang OJ at gatas, ayon sa pagkakabanggit. 929 00:40:54,930 --> 00:40:57,100 At pagkatapos ay may ko lamang ng isang printf sinasabi x ay ito 930 00:40:57,100 --> 00:41:00,120 at y ay ito, lamang kaya maaari ko makita kung ano ang nangyayari sa. 931 00:41:00,120 --> 00:41:03,810 Pagkatapos printf ko na nagke-claim na ako pagpapalit ang dalawa, 932 00:41:03,810 --> 00:41:07,100 at pagkatapos kong mag-print ng i-claim na ito ay naka-swapped, 933 00:41:07,100 --> 00:41:09,300 at i-print out ko x at y muli. 934 00:41:09,300 --> 00:41:13,010 Kaya down na dito sa swap ay nang eksakto kung ano ang ginawa Laura, 935 00:41:13,010 --> 00:41:16,240 at kung ano mismo ang nakita natin sa ang screen ng ilang sandali ang nakalipas. 936 00:41:16,240 --> 00:41:19,380 >> Kaya sabihin sige at maging sorely nabigo. 937 00:41:19,380 --> 00:41:24,690 Gumawa ng walang swap, at magpatakbo ng walang swap, ang pag-zoom in sa output dito. 938 00:41:24,690 --> 00:41:28,320 Ipasok ang x ay 1, y ay 2, pagpapalit swapped. 939 00:41:28,320 --> 00:41:32,700 x pa rin ang 1, at y ay 2 pa rin. 940 00:41:32,700 --> 00:41:37,630 Kaya kahit na, tapat, tinitingnan ito eksakto kung gusto, albeit higit pa technically, 941 00:41:37,630 --> 00:41:40,730 kung ano ang ginawa Laura, ay tila hindi na magtrabaho. 942 00:41:40,730 --> 00:41:42,130 Kaya bakit ay na? 943 00:41:42,130 --> 00:41:46,630 Well, ito ay lumiliko out na kapag sumulat kami ng isang programa na tulad nito 944 00:41:46,630 --> 00:41:51,590 na parehong pangunahing, na naka-highlight dito, at pagkatapos ay isa pang pag-andar, tulad ng magpalitan, 945 00:41:51,590 --> 00:41:54,230 naka-highlight dito, na ito tawag, sa mundo 946 00:41:54,230 --> 00:41:57,030 mukhang isang maliit na isang bagay tulad ng mga trays ng ilang sandali ang nakalipas. 947 00:41:57,030 --> 00:42:00,440 Kapag unang pangunahing ay makakakuha ng tinatawag na, na tulad ng pagtatanong sa operating system 948 00:42:00,440 --> 00:42:04,030 para sa isang bit ng memory para sa anumang lokal na variable tulad ng x at y na pangunahing ay, 949 00:42:04,030 --> 00:42:05,660 at nagtatapos ang mga ito doon. 950 00:42:05,660 --> 00:42:10,920 Ngunit kung pangunahing tawag magpalit, at pangunahing pass magpalit ng dalawang argumento, isang at b, 951 00:42:10,920 --> 00:42:16,410 orange juice at gatas, hindi ito gusto handing ang orange juice at ang gatas 952 00:42:16,410 --> 00:42:17,500 sa Laura. 953 00:42:17,500 --> 00:42:21,300 Ano ang isang computer, ay ito ipinapasa ng mga kopya ng orange juice 954 00:42:21,300 --> 00:42:27,110 at mga kopya ng gatas sa Laura, upang kung ano ang sa huli sa loob ng tray 955 00:42:27,110 --> 00:42:32,510 ay ang isang halaga at dalawang, o OJ at gatas, ngunit ang mga kopya nito, 956 00:42:32,510 --> 00:42:34,790 nang sa gayon ay sa puntong ito sa kuwento, mayroong 957 00:42:34,790 --> 00:42:36,930 ay OJ at gatas sa bawat isa sa mga trays. 958 00:42:36,930 --> 00:42:39,260 Mayroong isa at dalawa sa bawat isa sa mga trays, 959 00:42:39,260 --> 00:42:41,720 at ang magpalitan function ay sa katunayan gumagana. 960 00:42:41,720 --> 00:42:46,090 Ito ay pagpapalit sa kanila sa loob ng ng ikalawang pinakamataas tray, 961 00:42:46,090 --> 00:42:48,147 ngunit na pagpapalit ay walang epekto. 962 00:42:48,147 --> 00:42:49,980 At batay sa lamang ng ilang pangunahing prinsipyo hindi namin 963 00:42:49,980 --> 00:42:52,970 usapan tungkol sa bago, at sa katunayan lamang ng ilang mga minuto na nakalipas, kung ano 964 00:42:52,970 --> 00:42:58,770 maaaring ipaliwanag kung bakit ang pagbabago isang at b sa loob ng swap 965 00:42:58,770 --> 00:43:05,560 ay walang epekto sa x at y, kahit na Pumasang ko x at y sa swap function. 966 00:43:05,560 --> 00:43:08,750 Ano ang mga pangunahing salita dito na Maaaring simplistically ipaliwanag? 967 00:43:08,750 --> 00:43:11,250 968 00:43:11,250 --> 00:43:12,627 Sa tingin ko narinig ko rito? 969 00:43:12,627 --> 00:43:13,335 Madla: Return. 970 00:43:13,335 --> 00:43:14,085 Tagapagsalita 1: Bumalik? 971 00:43:14,085 --> 00:43:14,590 Hindi nagbabalik. 972 00:43:14,590 --> 00:43:15,895 Sabihin pumunta sa isang iba pa. 973 00:43:15,895 --> 00:43:16,395 Ano iyan? 974 00:43:16,395 --> 00:43:17,080 >> Madla: [INAUDIBLE]. 975 00:43:17,080 --> 00:43:20,000 >> Tagapagsalita 1: OK, kaya return-- ng dati namin gumawa balik trabaho sa kuwento, 976 00:43:20,000 --> 00:43:21,914 ngunit mayroong isang kahit mas simpleng paliwanag. 977 00:43:21,914 --> 00:43:22,580 Madla: Saklaw. 978 00:43:22,580 --> 00:43:23,288 Tagapagsalita 1: Saklaw. 979 00:43:23,288 --> 00:43:24,300 Kukunin ko ang saklaw. 980 00:43:24,300 --> 00:43:27,290 Kaya ang saklaw, tandaan kung saan aming x at y ipinahayag. 981 00:43:27,290 --> 00:43:30,840 Ang mga ito ay ipinahayag sa loob ng pangunahing karapatan up dito. 982 00:43:30,840 --> 00:43:33,200 isang at b, samantala, ay epektibo ipinahayag 983 00:43:33,200 --> 00:43:35,930 sa loob ng magpalitan, hindi masyadong sa ang kulot braces ngunit pa rin 984 00:43:35,930 --> 00:43:37,690 sa pangkalahatang lugar ng swap. 985 00:43:37,690 --> 00:43:40,560 At kaya sa katunayan, isang at b umiiral lamang sa loob ng tray 986 00:43:40,560 --> 00:43:44,850 mula sa Annenberg, ito pangalawang chunk ng code. 987 00:43:44,850 --> 00:43:49,500 Kaya kami ay sa katunayan ang pagbabago ng kopya, ngunit na hindi talaga ang lahat na kapaki-pakinabang. 988 00:43:49,500 --> 00:43:52,190 >> Kaya ipaalam sa tumagal ng isang pagtingin sa ito medyo mas mababang antas. 989 00:43:52,190 --> 00:43:55,430 Pupunta ako sa bumalik sa ang Pinagmulan Directory, 990 00:43:55,430 --> 00:43:58,330 at Pupunta ako sa unang mag-zoom in dito, at lang 991 00:43:58,330 --> 00:44:02,290 upang makumpirma na ako sa ganitong mas malaking terminal na window, 992 00:44:02,290 --> 00:44:04,430 ay kumikilos pa rin ang programa tulad na. 993 00:44:04,430 --> 00:44:06,840 Ipagpalagay na ngayon na ito Hindi sadya. 994 00:44:06,840 --> 00:44:10,090 Malinaw Nais kong swap sa trabaho, kaya pakiramdam ito tulad ng isang bug. 995 00:44:10,090 --> 00:44:12,780 Ngayon maaari kong magsimulang magdagdag ng isang maraming printf upang aking code, 996 00:44:12,780 --> 00:44:16,010 nagpi-print out x sa ibabaw dito, y sa ibabaw dito, isang paglipas dito, b paglipas dito. 997 00:44:16,010 --> 00:44:18,220 Ngunit tapat, na malamang na kung ano ang ikaw ay ginagawa para sa isang ilang mga linggo 998 00:44:18,220 --> 00:44:20,190 ngayon, sa oras ng opisina at sa bahay kapag nagtatrabaho 999 00:44:20,190 --> 00:44:22,150 sa psets sinusubukan mong hanapin ang ilang mga bug. 1000 00:44:22,150 --> 00:44:25,560 Ngunit makikita mo, kung hindi mo pa nagagawa, itakda ang problema na tatlong introduces sa iyo 1001 00:44:25,560 --> 00:44:31,630 sa isang command na tinatawag na GDB, kung saan GDB, GNU debugger, 1002 00:44:31,630 --> 00:44:34,040 May mismo ang maramihang mga mga tampok na maaari talaga 1003 00:44:34,040 --> 00:44:38,160 ipaalam sa amin na maunawaan sitwasyon tulad nito, ngunit higit pa compellingly, 1004 00:44:38,160 --> 00:44:39,940 malutas ang mga problema at humanap ng mga bug. 1005 00:44:39,940 --> 00:44:40,940 Kaya ako ng pagpunta sa gawin ito. 1006 00:44:40,940 --> 00:44:44,770 Sa halip na ./noswap, sa halip ako pagpunta sa magpatakbo ng GDB ./noswap. 1007 00:44:44,770 --> 00:44:47,410 1008 00:44:47,410 --> 00:44:51,200 Sa ibang salita, ako ako pagpunta upang patakbuhin ang aking programa hindi sa Bash, ang aming mga bagong kaibigan 1009 00:44:51,200 --> 00:44:51,850 ngayon. 1010 00:44:51,850 --> 00:44:53,970 Pupunta ako sa tatakbo ang aking noswap programa sa loob 1011 00:44:53,970 --> 00:44:56,900 ng iba pang mga programa na tinatawag na GDB, na isang debugger, na 1012 00:44:56,900 --> 00:45:01,035 ay isang programa na dinisenyo upang makatulong mo mahanap ang mga tao at alisin ang mga bug. 1013 00:45:01,035 --> 00:45:03,410 Kaya kung pindutin ko Magpatakbo dito, mayroong isang atrocious halaga ng teksto 1014 00:45:03,410 --> 00:45:04,868 na hindi kailanman mo ba talagang mayroon na basahin. 1015 00:45:04,868 --> 00:45:07,290 Ito ay mahalagang isang distraction mula sa prompt, na 1016 00:45:07,290 --> 00:45:10,030 Pupunta ako sa pindutin ang Control-L upang makakuha ng hanggang sa tuktok doon. 1017 00:45:10,030 --> 00:45:11,800 Ito ang GDB prompt. 1018 00:45:11,800 --> 00:45:15,550 Kung nais kong patakbuhin ang program na ito ngayon, bilang na ito kaunti cheat sheet sa ngayon 1019 00:45:15,550 --> 00:45:21,860 slide ay nagmumungkahi, Run ay ang unang utos na sinadya naming ipakilala. 1020 00:45:21,860 --> 00:45:25,150 At lamang ako ng pagpunta sa i-type tumakbo hanggang dito sa loob ng GDB, 1021 00:45:25,150 --> 00:45:26,811 at sa katunayan ang bumangga ito ang aking programa. 1022 00:45:26,811 --> 00:45:29,310 Ngayon ay mayroong ilang mga karagdagang output ng screen na tulad nito, 1023 00:45:29,310 --> 00:45:31,910 ngunit iyon ang GDB lamang pagiging anal at ng pagsasabi sa amin kung ano ang nangyayari sa. 1024 00:45:31,910 --> 00:45:34,451 Wala ka ba talagang kailangang mag-alala tungkol sa mga detalye ngayon. 1025 00:45:34,451 --> 00:45:36,890 Ngunit kung ano ang talagang cool na tungkol sa GDB, kung gagawin ko ito again-- 1026 00:45:36,890 --> 00:45:42,100 Control-L nililimas ang screen-- ipaalam sa akin pumunta Magpatuloy at type ang "masira pangunahing," at sa gayon, 1027 00:45:42,100 --> 00:45:45,743 kapag pinindot ko ang Enter, ang pagtatakda kung ano ang na tinatawag ng pahinga punto sa noswap.c, 1028 00:45:45,743 --> 00:45:51,270 16 linya, na kung saan GDB nalaman ang aking aktwal na programa 1029 00:45:51,270 --> 00:45:53,070 ay, ang aking aktwal na function na ay. 1030 00:45:53,070 --> 00:45:55,070 Ito ipapakita namin huwag pansinin sa ngayon ngunit iyon ang address 1031 00:45:55,070 --> 00:45:57,310 sa memorya ng partikular na ito function. 1032 00:45:57,310 --> 00:46:00,240 Kaya ngayon kapag ako ay i-type tumakbo, mapansin kung ano ang cool na dito. 1033 00:46:00,240 --> 00:46:05,650 Aking Mga programa Pinaghihiwa sa linya ko Sinabi GDB i-pause ang pagpapatupad sa. 1034 00:46:05,650 --> 00:46:09,850 Kaya hindi ko na kailangang ngayon baguhin ang aking code, magdagdag ng ilan printf ni, mag-recompile ito, Patakbuhing muli 1035 00:46:09,850 --> 00:46:13,300 ito, baguhin, magdagdag ng ilan printf ni, i-save ito, mag-recompile ito, patakbuhin ito. 1036 00:46:13,300 --> 00:46:18,100 Maaari ko lang maglakad sa pamamagitan ng aking programa basa sa pamamagitan ng sunud-sunod sa bilis ng tao, 1037 00:46:18,100 --> 00:46:20,880 hindi sa Intel-loob uri ng bilis. 1038 00:46:20,880 --> 00:46:24,580 >> Kaya ngayon mapansin ang linyang ito lumilitaw dito, at kung pumunta ako pabalik 1039 00:46:24,580 --> 00:46:27,800 sa aking programa sa gedit, mapansin na iyon ay ang tunay 1040 00:46:27,800 --> 00:46:29,280 pinakadulo unang linya ng code. 1041 00:46:29,280 --> 00:46:31,240 Mayroong 16 na linya sa gedit. 1042 00:46:31,240 --> 00:46:34,610 Mayroong 16 na linya sa loob ng GDB, at maging ang bagaman ito itim at puti interface 1043 00:46:34,610 --> 00:46:37,760 Hindi halos bilang gumagamit friendly, ang ibig sabihin nito 1044 00:46:37,760 --> 00:46:41,680 na line 16 ay hindi pa naipatupad pa, ngunit ito ay tungkol sa upang maging. 1045 00:46:41,680 --> 00:46:46,220 Kaya nga kung nagta-type ako sa pag-print x, hindi printf, i-print lamang ang x, 1046 00:46:46,220 --> 00:46:50,730 Nakakuha ako ng ilang bogus halaga doon ng zero, dahil x ay hindi pa nasimulan. 1047 00:46:50,730 --> 00:46:54,760 Kaya ako ng pagpunta sa susunod na i-type, o, kung ikaw gustong maging fancy, lamang n para sa susunod. 1048 00:46:54,760 --> 00:46:59,090 Ngunit kapag susunod kong i-type ang magpasok, ngayon mapansin ito gumagalaw sa hanggang sa 17 linya. 1049 00:46:59,090 --> 00:47:02,840 Kaya lohikal na, kung na-pinaandar ko 16 linya at ngayon nagta-type ako sa pag-print x, 1050 00:47:02,840 --> 00:47:03,640 ano ang dapat kong makita? 1051 00:47:03,640 --> 00:47:04,970 1052 00:47:04,970 --> 00:47:05,520 Ang isa. 1053 00:47:05,520 --> 00:47:07,820 >> At ngayon ito ay admittedly nakalilito. 1054 00:47:07,820 --> 00:47:11,260 $ 2 lamang ang magarbong paraan ng, kung ikaw nais na mag-refer sa halaga na sa ibang pagkakataon, 1055 00:47:11,260 --> 00:47:12,510 maaari mong sabihin ang "dollar sign dalawa." 1056 00:47:12,510 --> 00:47:13,480 Ito ay tulad ng isang reference likod. 1057 00:47:13,480 --> 00:47:14,570 Ngunit sa ngayon, balewalain lang ito. 1058 00:47:14,570 --> 00:47:17,070 Ano ang mga kawili-wiling ay kung ano ang sa kanan ng katumbas sign. 1059 00:47:17,070 --> 00:47:21,000 At ngayon kung nagta-type ako susunod muli at i-print y, ang dapat kong makita 2. 1060 00:47:21,000 --> 00:47:23,870 Maaari din ako ngayong mag-print x muli, at tapat, 1061 00:47:23,870 --> 00:47:27,130 kung Nakakuha ako ng isang maliit na nalilito bilang sa kung nasaan ako, maaari nagta-type ako listahan para sa listahan 1062 00:47:27,130 --> 00:47:30,590 at lamang sa paligid makita ang ilang konteksto sa punto ako talaga sa. 1063 00:47:30,590 --> 00:47:35,180 At ngayon maaari kong i-type susunod na, at may x ay 1. 1064 00:47:35,180 --> 00:47:36,300 Ngayon nagta-type ako susunod. 1065 00:47:36,300 --> 00:47:37,710 Oh, y ay 2. 1066 00:47:37,710 --> 00:47:40,750 At muli, ito ay nakalilito, dahil ang output ng GDB 1067 00:47:40,750 --> 00:47:43,044 ay commingled gamit ang aking sariling output. 1068 00:47:43,044 --> 00:47:45,710 Ngunit kung panatilihin mo sa isip, sa pamamagitan ng glancing pabalik-balik sa iyong code 1069 00:47:45,710 --> 00:47:47,740 o laying ito gilid sa pamamagitan ng gilid marahil, ipapakita sa iyo 1070 00:47:47,740 --> 00:47:51,020 makita na talagang lamang ako stepping sa pamamagitan ng aking programa. 1071 00:47:51,020 --> 00:47:54,620 >> Ngunit mapansin kung ano ang susunod na mangyayari, literal. 1072 00:47:54,620 --> 00:47:56,380 Narito ang 22 linya. 1073 00:47:56,380 --> 00:48:01,315 Hayaan akong pumunta sa paglipas ng ito, at sa gayon ay gumagalaw sa sa 23, at kung mag-print ko x ngayon, isa pa rin. 1074 00:48:01,315 --> 00:48:03,890 At kung mag-print ko y ngayon, isa pa rin. 1075 00:48:03,890 --> 00:48:05,820 Kaya ito ay hindi isang kapaki-pakinabang na ehersisyo. 1076 00:48:05,820 --> 00:48:07,450 Kaya ang gawing muli ito ipaalam. 1077 00:48:07,450 --> 00:48:10,069 Hayaan akong bumalik hanggang sa ang muli tuktok at uri ng run. 1078 00:48:10,069 --> 00:48:12,110 At ito ay nagsasabi sa programa na ini-debugged 1079 00:48:12,110 --> 00:48:14,109 Nagsimula na, na nagsimula mula sa simula. 1080 00:48:14,109 --> 00:48:15,420 Oo, ni gawin muli ito ipaalam. 1081 00:48:15,420 --> 00:48:22,000 Ni ang susunod na gagawin at oras na ito ipaalam, susunod, susunod, susunod, susunod, 1082 00:48:22,000 --> 00:48:24,180 ngunit ngayon bagay makakuha ng kawili-wiling. 1083 00:48:24,180 --> 00:48:27,760 Ngayon Gusto kong sa hakbang sa magpalitan, kaya hindi ko type susunod. 1084 00:48:27,760 --> 00:48:34,380 Nagta-type ako hakbang na ito, at ngayon mapansin ito Na jumped ako sa noswap.c line 33. 1085 00:48:34,380 --> 00:48:37,240 Kung pumunta ako pabalik sa gedit, kung ano ang 33 line? 1086 00:48:37,240 --> 00:48:40,500 Iyon ang unang aktwal linya ng code sa loob ng swap. 1087 00:48:40,500 --> 00:48:44,150 Alin ang magaling, dahil ngayon maaari ko uri ng poke sa paligid at makakuha ng malaman 1088 00:48:44,150 --> 00:48:46,052 bilang sa kung ano ang nangyayari sa tunay na doon. 1089 00:48:46,052 --> 00:48:46,760 Hayaan akong i-print tmp. 1090 00:48:46,760 --> 00:48:47,770 1091 00:48:47,770 --> 00:48:48,800 Whoa. 1092 00:48:48,800 --> 00:48:51,438 Bakit ang tmp kumuha ng mabaliw, bogus halaga basura? 1093 00:48:51,438 --> 00:48:54,579 1094 00:48:54,579 --> 00:48:56,120 Madla: Ito ay hindi pa nasimulan. 1095 00:48:56,120 --> 00:48:57,150 Tagapagsalita 1: Ito ay hindi pa nasimulan. 1096 00:48:57,150 --> 00:49:00,270 At sa katunayan, kapag nagpatakbo ka ng programa, bibigyan ka ng isang buong bungkos ng memorya 1097 00:49:00,270 --> 00:49:03,392 ng operating system, ngunit hindi pa nasimulan ang anumang mga halaga, 1098 00:49:03,392 --> 00:49:05,600 kaya ang anumang mga piraso ikaw ay nakikita dito, kahit na ito ay 1099 00:49:05,600 --> 00:49:07,770 ito mabaliw malaki negatibong numero, nangangahulugan lamang 1100 00:49:07,770 --> 00:49:10,750 na ang mga ito ay ang mga labi mula sa ang ilang mga nakaraang paggamit ng na RAM, 1101 00:49:10,750 --> 00:49:13,050 kahit na mayroon akong hindi kinakailangan ang aking sarili ito pa. 1102 00:49:13,050 --> 00:49:17,086 Kaya ngayon ako pagpunta sa sige at uri susunod na, at kung ngayon nagta-type ako sa pag-print tmp, 1103 00:49:17,086 --> 00:49:17,835 ano ang dapat kong makita? 1104 00:49:17,835 --> 00:49:19,570 1105 00:49:19,570 --> 00:49:23,360 Anuman ang halaga ng isang noon ay, isang ay ang unang argumento, lamang 1106 00:49:23,360 --> 00:49:25,550 tulad ng x ay ang unang bagay na ipinasa sa, 1107 00:49:25,550 --> 00:49:30,450 kaya isang at x dapat ay parehas, kaya i-print tmp dapat mag-print ng isa sa akin. 1108 00:49:30,450 --> 00:49:36,360 >> Kaya ano ang makikita mo sa hanay ng problema tatlong ay isang tutorial ng mga klase sa GDB, 1109 00:49:36,360 --> 00:49:40,020 ngunit mapagtanto na ito ay ang simula ng isang pagtingin sa isang tool na ay talagang 1110 00:49:40,020 --> 00:49:42,774 makatulong sa iyo na malutas ang problema kaya magkano ang mas epektibo. 1111 00:49:42,774 --> 00:49:44,690 Ano kami sa huli pagpunta sa gawin sa Miyerkules 1112 00:49:44,690 --> 00:49:48,180 ay magsimula sa Peel pabalik ng ilang mga layer at alisin ang ilang mga gulong pagsasanay. 1113 00:49:48,180 --> 00:49:50,496 Na bagay na tinatawag na string na na ginamit namin para sa ilang oras, 1114 00:49:50,496 --> 00:49:53,370 kami ay pagpunta sa dahan-dahan tumagal na ang layo mula sa iyo at simulan ang pakikipag-usap tungkol sa 1115 00:49:53,370 --> 00:49:55,725 isang bagay na mas esoterically na kilala bilang char *, 1116 00:49:55,725 --> 00:49:59,550 ngunit kami ay pagpunta sa gawin ito maganda at malumanay sa unang, kahit na pointer, 1117 00:49:59,550 --> 00:50:02,730 habang ang mga ito ay tinatawag na, maaari gumawa ng ilang napaka masamang bagay kung inaabuso, 1118 00:50:02,730 --> 00:50:06,040 pamamagitan ng pagtingin sa isang maliit na claymation mula sa ang aming mga kaibigan Nick Parlante mula sa Stanford 1119 00:50:06,040 --> 00:50:09,670 University, isang propesor sa computer agham na ilagay magkasama ang preview na ito 1120 00:50:09,670 --> 00:50:11,075 ng kung ano ang darating na ito Miyerkules. 1121 00:50:11,075 --> 00:50:12,196 1122 00:50:12,196 --> 00:50:13,400 >> [VIDEO pag-playback] 1123 00:50:13,400 --> 00:50:13,900 -Hey, Binky. 1124 00:50:13,900 --> 00:50:14,930 1125 00:50:14,930 --> 00:50:15,780 Gumising. 1126 00:50:15,780 --> 00:50:17,240 Panahon na para masaya pointer. 1127 00:50:17,240 --> 00:50:18,260 1128 00:50:18,260 --> 00:50:19,350 >> -What Iyan? 1129 00:50:19,350 --> 00:50:21,150 Alamin ang tungkol sa mga payo? 1130 00:50:21,150 --> 00:50:22,050 Oh, goody! 1131 00:50:22,050 --> 00:50:22,897 1132 00:50:22,897 --> 00:50:23,730 [END VIDEO pag-playback] 1133 00:50:23,730 --> 00:50:25,396 Tagapagsalita 1: Iyon naghihintay sa iyo sa Miyerkules. 1134 00:50:25,396 --> 00:50:26,440 Ipapakita namin sa iyo pagkatapos makita. 1135 00:50:26,440 --> 00:50:27,106 [VIDEO pag-playback] 1136 00:50:27,106 --> 00:50:30,420 -And Ngayon, Deep pananaw, sa pamamagitan ng Daven Farnham. 1137 00:50:30,420 --> 00:50:33,980 1138 00:50:33,980 --> 00:50:35,900 >> -Why Ay pag-aaral namin C? 1139 00:50:35,900 --> 00:50:36,785 Bakit hindi A +? 1140 00:50:36,785 --> 00:50:38,550 1141 00:50:38,550 --> 00:50:40,910 >> [Tawa] 1142 00:50:40,910 --> 00:50:42,160 >> [END VIDEO pag-playback]