>> [Мусиц плаиинг]
>> ПРЕДСЕДНИК 1: У реду, ово је ЦС50, и ово је почетак седмице четири,
а као што сте можда чули или прочитајте, свет је крај.
Иде широм интернета има било знање и свест
од буба у програму, програмски језик се зове Басх.
Ово је дивно брендиране као Схеллсхоцк, или Басх врата,
али овакви чланци нису реткост.
А у ствари, многи од њих донесе успомене на Хеартблеед,
које сте можда приметили у Притисните БАЦК прошлог пролећа, што
Слично је било прилично драматична.
Сад од оне од вас овде Данас, колико вас има,
чак и ако не разумете шта то је све о, чули Схеллсхоцк?
У реду, и колико вас имају компјутере које су рањиве?
У реду, требало би да постоји много, много више руке до сада, због видећемо.
>> Хајде да погледамо шта је се дешава у медијима
а онда је објаснити мало за нас технички.
>> Звучник 2: Безбедносни стручњаци имају упозорио да озбиљан пропуст може
се о томе да утиче на стотине милиони светских веб корисницима.
Дакле, шта је тачно грешка која је била под називом Схеллсхоцк, и шта она ради?
Па, Схеллсхоцк је такође познат као Басх Буг, софтвер је експлоатише.
Хакери користе вирус скенирање рањива системи раде Линук и Уник
оперативне системе и онда их зарази.
Басх је командна линија граната.
Ово омогућава корисницима да покрену питање команде Програми и функције у оквиру софтвера
тако што ћете унети у тексту.
То је обично користи од стране програмера, и не би требало да буду отворени за широм света,
мада Схеллсхоцк мења то.
>> Па, воррингли, неки аналитичари упозоравају да би могао да буде већа претња,
јер Схеллсхоцк омогућава потпуна контрола зараженог машине,
док Хеартблеед дозвољено хакери да шпијунира рачунарима.
То је тако озбиљно, то је оцијењено је 10 од укупно 10
за озбиљност од стране националних Рањивост база података.
2/3 свих веб сервера су на ризик, укључујући и неке Мац рачунарима.
Па, проверите да ли сте патцх своје системе сада.
Свако хостинг веб сајта приказују погођеним оперативни системи
треба да предузме акцију што је пре могуће.
Свако ко може да приушти треба да изгледа на њихово праћење и веб апликације
фиревалл да пази за било напада.
ПРЕДСЕДНИК 3: Најгора ствар да је могло да се деси јесте
да би неко напише код који би аутоматски отићи и скенира
Интернет и да ће утицати на свих ових рачунара.
А кад то ураде, добро, најгора ствар коју може да уради
је само избришите све, или затворена сајтове доле.
Тако да смо могли да видимо штету са те тачке гледишта,
где би имали злонамерне људе који само да одлучи да изазову хаос
довођењем система доле или брисање фајлове, и сличне ствари.
Звучник 2: Неки кажу да је ово један од најтеже мерити
бубе у годинама, и то може потрајати неколико недеља или чак
месеци да се утврди њен крајњи ефекат.
>> ПРЕДСЕДНИК 1: Дакле, све што је истина, али смешно је, скоро сви
од слика које сте управо видели, осим можда тастатуру,
нема никакве везе са Буг уопште.
Сервери и жице и тако даље, То је нека врста површно у вези,
али у срцу је заправо прилично познато шта се овде дешава.
У ствари, пусти ме у наш ЦС50 апарата.
Пусти ме само напред и максимално прозор терминала овде.
А ви момци су користили ово, или уграђени верзију истог,
у гедит како да пишу програме, типа команде, и тако даље,
и то је заправо, и има био недељама, басх, Б-А-С-Х.
То је Боурне-Агаин Схелл, што је само фенси начин да се каже,
То је програм који има трепери брз, ефикасно,
да седи тамо чека за унос за вас.
И то је команда линија интерфејс преко кога
ви се приказују команде и на крају састављање и онда ради
програми.
>> Али басх је програмирање Језик у следећем смислу.
Ви знате да постоје команде попут ЦД и ЛС и цланг и други,
али можете дефинисати своје команде их спроведе у Басх.
Сада нећемо да ићи у детаље
као да басх програмском језику, али је Знам, на пример, да у овом тренутку,
нема команда зове "здраво".
Тако да се може наћи у једна од ових пакета.
То није инсталиран на мом компјутеру.
Питајте администратора.
Али ако сам тамо желим да будем програма под називом "здраво" у Басх, или у мојој линији
Ја стварно могу да користе синтаксу то је баш као и Ц. То није баш исто,
али изгледа прилично слично функција, иако недостају неке детаље.
Ништа се не чини да се деси, али сада ако сам типа "Здраво",
ви у ствари да напишете Програм, не у Ц, не у Јави,
не у другом програмирање језика, али у самом Басх.
>> Сада кључ овде је да сам написао име сам хтео да дам ову нову команду,
а заграде су симбол Ова је функција.
Као страну, можете да урадите забаве ствари, а у ствари, чак и на Мац ОС,
То је програм под називом Терминал.
То долази уграђени у свако је рачунар који има Мац у овој просторији,
а можете да урадите сличне ствари у Мац ОС, али можете ићи још даље од тога.
И ово је мало тангенцијални, али је некако забавно.
Ја сам подсетио јутрос, када се мисли о овоме,
на малу игру сам да играју са једним од бивших ЦС50 Поздрав
чиме сваки пут он би хода од његова тастатура са својим екраном откључана,
Ја бих изврши команду овако-- "поздрави".
А сада сваки пут се вратио у његову тастатура након што сам очистили екран
и он би сео, покушајте да урадите неки посао,
наведе садржај свог дирецтори--
>> [Аудио плаибацк]
>> Здраво.
Здраво.
>> ПРЕДСЕДНИК 1: Дакле, у правичност, то није било у ствари "здраво".
Је обично било нешто више личи на то--
[Аудио плаибацк]
-Бееп.
ПРЕДСЕДНИК 1: --тхат И би-- тако да је његова рачунар ће
Кунем се на њега у било које време он заправо сјео на његов тастатури.
И веома брзо је схватио да не напусти своју екрана откључана.
Али ово указује на врсту глупо забаве која вас
могу имати са нечим као Басх.
Али, то је мало више озбиљно, да будемо сигурни, од тога.
А у ствари, ово је један од најопаснија и дуготрајан Бугс
који је заиста погодила свет глобално.
Ова грешка је била око неких 20 година,
а ви ћете бити ударио у само тренутак по релативној једноставности.
>> Тако да је ово представник заповеди да ако
поседује Мац, буквално одмах Када имате поклопац отворен,
можете пробати куцате у то Програм се зове Терминал.
Терминал је под Апликације Утилитиес--
једном, корисници Виндовс не морају да бринете о овом конкретном тхреат--
али они од вас са Мац да куцате ово у прозору као да ћу овдје,
и ако не упишете да је у овај програм
зове Терминал, као што ћу учинити сада, ако видите реч "рањива",
Ваш рачунар рањива на експлоатацију.
>> Дакле, шта то заправо значи?
И ово је додуше неке прилично Црази синтакса,
али хајде да барем извући неке од занимљивих аспеката.
Тако да неки синтаксе која изгледа мало познато, бар из Ц
и програмирање уопште.
Видим неке заграде, тачка-зарез, коврџава заграда, а што је,
али се испоставља да је ово глупо ствар овде у жутом
је у суштини функција то не ради ништа.
Дебело црево значи ништа, а зарез значи стоп радећи ништа.
Тако да унутар њих цурли протеза, чињеница
да ја имам исти потпише лево, ово
је у суштини стварање команда или променљива,
звао к, и да га додељивање да жута мало кода тамо.
То би могло да буде нешто попут "Ецхо здраво "или" кажу бип "или нешто
слично томе.
Али приметити ако су вам очи лутају даље на десно,
има више овој линији од само крај тог зарезом.
"Ецхо рањива", а затим осим тога има још.
Још један зарез, басх -Ц :.
>> Па скратим причу, Ова линија кода је
довољна за убедљив рачунар који је
рањива да ради нешто да желите да урадите,
јер има буг у којој Басх иако Басх је требало да се заустави
линија читања командној права тамо након жуте текста,
за 20-плус година старог буг, Басх је заправо чита
иза тог зарез и прилично колико радиш оно што је речено.
>> Па шта је импликација то на крају?
Само сам рекао "ецхо Хелло" или "ецхо рањива,"
али шта ако си урадио нешто заправо злонамерни, као рм -рф *,
што можда и не икада раније откуцан,
и искрено вероватно не треба прерано,
зато што можете да урадите много штете са њим.
Зашто?
РМ шта ради, наравно?
Уклања.
* Значи шта?
Све.
Тако да је такозвани вилд картицу, тако то значи
делете све у тренутни директоријум.
-р дешава да значи рекурзивно, што значи да ако је оно што сте брисању
је директоријум, а унутар тамо је друге датотеке и друге директоријуме,
рекурзивно зароните у ту и избрисати све то.
А -ф је најгори од свих њих.
Ико зна шта -ф овде значи?
Сила.
Дакле натерати средства, чак и ако је ово лоша идеја,
урадите то без мене навело за даљу потврду.
Дакле, ви знате, ми смејали , али искрено, вероватно
откуцате ову више пута дан, јер је реалност
је да је најбржи начин да делете гомилу ствари.
Али чак сам урадио неку штету.
>> Али, ако сте били да преварите рачунар у дефинисање неки глупи променљиву
или функција се зове к, али онда преваре рачунар у извршавању
изван граница које функција, изван тог зарез,
можете заиста могли да преварите рачунар у извршавању нешто слично рм -рф
или команда-маил или команду Цопи.
Нешто буквално можете да урадите са компјутер, без обзира да ли је то брисање датотека,
креирање фајлова, спам некога, нападају неки сервер даљински,
ако можете да га изрази са командом, ви
може преварити компјутер у то раде.
>> Шта је сада пример Како можете да урадите?
Па, постоји много рачунара на интернет трчања Басх.
Свако од нас Мац кориснике су међу њима.
Много Линук сервера су међу их као добро, а Уникс сервера.
Виндовс опет добија релативно Офф куке
осим ако сте инсталирали посебан софтвер.
Сада много сервера, за пример, покрените веб сервера,
и, у ствари, Линукс је можда најпопуларнији оперативни систем
да ради на рачунарима на Интернету које служе Веб странице.
Сада као што ћемо видети касније у семестру, када је
ви пошаљете захтев Ваш бровсер-- Цхроме,
Интернет екплорер, вхатевер-- на удаљеном серверу,
Испоставило се да, иако само откуцали ввв.екампле.цом,
Ваш бровсер шаље поруку То је мало више волшебни, овако.
>> Али приметите нешто чудно.
Прве две линије Никада нисам видела,
али они не изгледају Посебно претећи.
Али погледајте шта сам украо за трећи ред овде.
Ако лош момак требало да пошаље поруку овако са свог компјутера
на угроженој Мац или рањива Линукс сервер,
Смешна ствар је да Басх, једноставно мало командна линија,
свеприсутна и често Половне у суштини изврши
Садржај поруку да добије.
И тој логици, можете трицк веб сервер, дакле,
слањем нешто слично Усер-агент, који се обично
је требало да кажем Име вашег прегледача.
Усер-агент Хром, Усер-Агент интернет Екплорер, Усер-Агент Фирефок, ово
је само ваш прегледач је начин идентификовања себе.
Али ако лош момак веома паметно каже, мм-мм, ја сам
неће да вам кажем шта је мој претраживач је,
Ја уместо тога ћу да вам пошаљем ово Цриптиц изгледа ствар са рм -рф
* У њему, можете буквално да преварите рањив веб сервер на интернету
у вршењу управо то у ту за брисање свих датотека.
И искрено, то није чак најгоре.
То можете да урадите било шта.
Можете да почнете дистрибуира ускраћивање услуга напада
Уколико сте послали ову поруку читаве гомиле веб сервера
а потом их је све спуштају, за пример, на Харвард.еду серверима,
а можете да сортирате од Банг до ђавола из њих
саобраћај мрежи која је иначе изазван овим негативца.
>> Дакле, скратим причу, скоро свако у овој соби који је власник Мац
је рањива на ово.
Силвер Лининг је да уколико сте покретање веб сервер на лаптоп рачунару,
и ако сте заиста конфигурисан је да се омогући нешто као ССХ у њега,
ти си стварно сигуран.
То је рањива, али не постоји који покушава да уђе у ваш лаптоп,
тако да можете да некако уверени.
Међутим, Аппле ће ускоро бити ажурирање поправити за ово.
Свет Линука већ објавио број исправки за Федора и Убунту
и друге верзије Линука, и заиста ако наиђете упдате 50 у уређају,
чак и то ће такође бити ажурира и исправљена.
Али и то нема Заиста је рањива,
јер ако немаш тинкеред са апаратом
и направио свој лаптоп јавно доступна на интернету, што није
подразумевано, немаш заправо било у реду, јер
од фиреваллинг и других техника.
>> Али то је екстреман пример буг да смо живели за буквално 20
године, а ко зна да ли је неко све ово време је познато о томе?
А у ствари, ово је један од основни изазови
да ћемо видети касније у семестар о безбедности,
је да је баш као у стварном свету, Тхе Гоод Гуис су на штету.
Да би лоше момке, морамо да уверите се да свака врата закључана,
да је сваки прозор је безбедна, да свака тачка уласка у дом
је сигурно да лоши момци напоље.
Али шта лош момак треба да учинити да стварно компромис свој дом
и краду од тебе?
Он или она једноставно мора да пронађе једну откључана врата, један прозор поломљен, или тако нешто
У том смислу, и то је Иста ствар на безбедност рачунара.
Можемо написати милионе линија програмског кода
и троше стотине или хиљаде сати покушавају да се то тачно,
али ако направите само једну грешка у исправност,
можете ставити цео систем и заиста у овом случају, цео интернет
и свет у опасности.
>> Дакле, ако желите да сазнате више о томе, идите на следећу УРЛ адресу овде.
Нема потребе за акцију Вечерас ако нисте
међу онима који удобнији су покретањем сопственог веб
сервер, у ком случају би требало, У ствари, ажурирање софтвера.
>> И ово је такође наслов говор, а сада папира,
да смо повезани на Сајт Курс за данас.
То је било од стране колега имену Кен Томпсон, који је
прихвата веома познати Награда у компјутерској науци,
и он је дао ову говор неколико година Пре, у суштини на ову исту тему.
Тражећи људе питање, треба стварно
Поверење, на крају, Софтваре сте добили?
На пример, сви ми имамо пишем програме,
а ми смо били састављање их са цланг.
И колико је вама познато, да ли си написао Сви програми за ЦС50 где има
Назад врата врста, постоји начин да је лош момак, ако покренете програм,
могао да преузме свој рачунар?
Вероватно не, зар не?
Марио, и похлепан, и Цредит.
То су све веома мали програми.
Ти би бити прилично лоше ако заиста
је цео твој рачунар рањив после писања 10 или 20 линија кода,
или бар несвесни неких безбедносних импликација.
Сада кажем да је шаљиво, али ми ћемо да видимо данас
а ове недеље је заправо Стварно, стварно лако
да буде лоше и да чак и кратке програме рањиви.
>> Али за сада, барем, схватају да питање се овде питање
је око цланг у компајлера.
Зашто смо били верујући цланг за последње две или три недеље?
Ко може да каже да је онај ко је написао цланг није имао "ако" услов унутра
који у суштини убризгава неке нуле и оне у сваком програму је саставља
да би нека или њен приступ рачунара када спаваш
и ваш лаптоп поклопац отворен и ваш рачунар ради?
Зар не?
Ми имамо ову врсту права част система А где верујемо да Цланг је читљив.
Ви верујете да је уређај је читљив.
Ви верујете да је буквално сваки програм на вашем Мац или ПЦ је поуздан.
И као овај једноставни Буг сугерише, чак и ако то није злонамерно,
то апсолутно не вероватно да ће бити случај.
>> Тако да би требало да буде уплашен као пакао.
Искрено, нема једноставно решење за овај други
него нека врста друштвеног свести све веће сложености
да градимо на врху наших рачунарских система,
и како све више рањива можемо врло добро бити.
>> Сада са тим, рекао је, Бреакоут.
Па пробоја је проблем поставити три, и Пробоја је игра из прошла
да би се сећате, али за нас у проблем сет три,
то нам омогућава да ствари резервне копије усек
тако да када пишемо програме, чак иу прозору Терминала овако,
заправо може да ради, на крају, графички програми не
за разлику од оних које смо имали приступ у нуле.
Дакле, ово је особља имплементација Бреакоут,
што је само ова цигла-разбијање игра, да померите весло назад
и даље, и ударио лопту против оних боје цигле горе.
Дакле, ово нас доводи врста тамо где
смо у стању да се врло брзо са Огреби, а сада са Ц,
спровођење наше графичких корисничких интерфејса.
>> Али, више од тога, овај Проблем представља скуп први
у коме дајемо ви гомила кода.
А у ствари, донети експлицитна пажњу на ово, јер је нарочито
за оне мање удобан, ово Проблем сет, бар на први поглед,
ће да се осећају као да смо га преузео усек.
Зато смо вам дали, за неке од потраге
и сортирање проблеме у псет, гомила кода који смо писали,
и пар коментара да кажу "да уради,"
где морате да попуните празнине.
Дакле, не тако страшно, али је први пут
ми вам предаје код који треба да Прво прочитати, разумети, а затим додати у
и да га заврши.
>> А затим са Бреакоут, ћемо да урадимо исто,
дајући вам неколико десетина више линија кода који, искрено, ти дам
много оквира за игра, али се заустави кратка
спровођења цигле а лопта и весло,
али ми радимо спроведе неке друге функције.
Па чак и да се на први поглед, опет, нарочито ако мање удобан,
Можда изгледа застрашујуће и посебно мислите да постоји толико много нових функција
морате да заврши свој ум около, и то је истина.
Али имајте на уму, то је баш као и нуле.
Квоте су нисте користили све комада слагалице у нуле.
Квоте су ти није стало да заврши Твој ум је око свих њих
јер све што је било Брзи поглед да разуме, ох,
то је оно што ја могу да урадим са тим слагалица.
И заиста, у проблему сет 3 Спец ћемо вам указати
на документацију која ће увести вас са неким новим функцијама,
и на крају програмирање конструише користите.
Услови, кругова, променљиве и функције
ће бити идентичан оно што смо видели до сада.
>> Дакле заиста, шта ћемо дати што је неки узорак кода који
вам омогућава да креирате прозор која изгледа није за разлику од ове,
и на крају га претворити у нешто сасвим овако.
Тако да искористе ЦС50, разговарају радног времена и више,
и да утеху у чињеници да количину кода морате да пишете
заправо није толико много.
Први изазов је само да се прилагоде себи да неки код смо написали.
>> Сва питања о псет3, Схеллсхоцк, или на други начин?
>> ПУБЛИКА: Изгледало је као пролази кроз са Бреакоут
да код скоро објектно оријентисани стил,
али сам мислио да је Ц објектно-оријентисани програм.
ПРЕДСЕДНИК 1: одлично питање.
Дакле, у потрази путем дистрибуција код, код
смо написали за псет3, за оне упознати, то
Изгледа као да је мали објекат оријентисан.
Кратак одговор је, то је.
То је приближавање како сте може да уради објектно оријентисане шифру помоћу
језика као Ц, али је ипак на крају процедурално.
Не постоје методе унутрашњост променљиве, као што ћете видети.
Али је подсећа на то.
И ми ћемо поново видети ту функцију кад стигнемо у ПХП и ЈаваСцрипт
крајем семестра.
Али за сада, мислим о томе као наговештај онога што долази.
Добро питање.
У реду.
Па Обједињавање Сорт било како смо оставили ствари последњи пут.
И споји Сорт био кул у осећај да је толико много брже,
барем на основу површно тестовима смо прошле недеље, него, рецимо, Буббле
сорт, селекција сорт, уметање сорт.
И који је био уредан превише је само како језгровито и чисто
можете да га изрази.
И шта смо рекли да је горња везан на ради времену стапања
сортирање?
Да?
>> ПУБЛИКА: Н лог Н?
>> ПРЕДСЕДНИК 1: н лог н, десно. н лог н.
А ми ћемо се вратити на оно што је заправо значи или где да се долази,
али ово је било боље него што Руннинг тиме
које смо видели у балон Избор и убацивање врсте?
Тако н квадрат. н квадрат је већи од овога,
па чак и ако то није очигледно, знају да лог н је мањи од Н,
Дакле, ако радите н пута нешто мањи од Н,
то ће бити мањи од н на квадрат.
То је мало интуиције тамо.
Али смо платили цену за то.
То је био бржи, али је тема која је почела да се појављују прошле недеље је то компромис.
Имам боље перформансе Време мудар, али оно
да ли морам да потрошите на друге стране рука, у циљу постизања то?
>> Публика: Меморија.
ПРЕДСЕДНИК 1: Понови?
Публика: Меморија.
ПРЕДСЕДНИК 1: Меморија, или простор уопште.
И није било супер Очигледно са нашим људима,
али се сећате тога наших волонтера су одскочна напред и стајања
назад као да постоји низ овде, и као да има
Други низ овде да они могу користити, јер ми
и потребно негде да споји те људе.
Нисмо могли да их само замене на месту.
Па мерге сорт утицај је више простора, што
нисмо потребна са други алгоритми,
али наопако је да је много брже.
И искрено, у стварном свету простору ови даис-- РАМ, хард диск спаце--
је релативно јефтин, као и да је није нужно лоша ствар.
>> Па хајде да на брзину погледамо, мало више методично, на оно што смо урадили
и зашто смо рекли да је н лог н.
Дакле, овде су осам бројева и осам волонтера смо имали прошли пут.
И прва ствар која Мерге Сорт нам је рекао да то урадите је оно?
ПУБЛИКА: Дивиде на два дела.
ПРЕДСЕДНИК 1: Понови?
ПУБЛИКА: Дивиде на два дела.
ПРЕДСЕДНИК 1: Поделити на два дела, у реду.
Ово је веома подсећа на именик, од поделе
па владај уопште.
Тако да смо гледали на левој половини.
И онда кад смо рекли, сорт Лева половина елемената,
Шта смо се следећи пут рекли?
Сортирајте левој половини са леве стране пола, што нам је дозвољено да се,
после поделе на два дела, фокусирати на четири и два.
>> Како се сада сортирате листу, у жута, величине два, користећи Мерге Сорт?
Добро га поделити на пола, и сортирање левој половини.
И то је било где ствари Имам мало глупо кратко.
Како се сортирате листу која је од величина једног, као што је овај број четири овде?
То је сортирано.
Завршите.
>> Али онда како да сортирате листу Величина једног када је број два?
Па, иста ствар, али сада шта је трећи и кључни корак у Мерге Сорт?
Морао си да споји леви пола и десна половина.
А када смо то урадили, ми смо гледали на четири, гледали смо два.
Одлучили смо да све у реду, Очигледно два на првом месту,
па смо ставили два у својој место, затим четири.
А сада морате некако уназад, и то је врста карактеристичних
алгоритма као спајања Сорт, уназад у меморији.
Шта је био следећи ред приче?
Шта би требало да се фокусира на следеће?
Право половина левице пола, што је шест и осам.
>> Дакле, дозволите ми само корак кроз овај без белаборинг тачку превише.
Шест до осам, онда је шест поредани, осам је сортиран.
Споји их заједно тако, и сада следећи велики корак
је, наравно, сортирање десној половини од први корак овог алгоритма.
Тако да смо се фокусирати на један, три, седам, пет.
Онда ћемо се фокусирати на левој половини.
Лева половина тога, десна половина да, а потом спајају у једном и три.
Тада десна половина, а затим напустио пола о томе, а затим десна половина од тога.
Спојити га, а шта сад корак даље?
Споји велики левој половини и велика десна половина, па иде доле,
затим два, па три, па четири, па Пет, онда шест, од седам, а затим осам.
>> Тако да сада зашто је то на крају открива, посебно ако н и логаритми море
генерално прилично бежите, бар у скорије време?
Па, приметио висину ове ствари.
Имали смо осам елемената, а ми подељен га два, по два, по два.
Па лог базу два осам нам даје три.
И верујте ми на то да ли мало магловито на томе.
Али лог база два осам је три, тако да смо урадили три слоја спајања.
И кад смо спојили елементи, колико елемената
смо погледамо на сваком од тих редова?
Укупно Н, зар не?
Јер да споји у горњем реду, иако смо то парче урадили,
ми смо на крају дотакли сваки број једном.
А у другом реду, то споји те спискове величине два,
ми смо морали да додирују елемент једном.
А онда ту заиста јасно у последњем реду,
ми смо морали да додирују од оних елементи једном, али само једном,
па овде лежи, онда, наша н лог н.
>> А сада само да се ствари мало више формално само на тренутак, ако је вама
су сада анализирају ово на неку врсту вишег нивоа
и покушати да одлучи, како добро Можда идете о изражавању
ради време овог алгоритма само гледајући у њу, а не
помоћу вештачки пример?
Па, колико времена би рекао корак овако у жуто би потребно,
ако је н <2 вратити?
То је Биг О чега?
Па видим један, тако да један корак, можда два корака, јер је то, ако
а затим се вратите, али је Цонстант време, зар не?
Тако да смо рекли О (1), и то је како ћу изразити ово.
Т., само буди трчање времена.
н је величина улаза, па Т (н), само Фанци начин
каже покретање Време дато унос величине Н
ће бити на налогу константне времена, у О (1).
>> Али иначе, шта је ово?
Како би сте изразити руннинг време ове жуте линије?
Т чега?
Можете да некако превари и овде одговорите на моје питање циклично.
Дакле, ако ради време у Генерални смо управо рекли је Т (н).
А сад ти некако Пунтинг овде и говорећи, добро, само сортирају левој половини,
а затим сортирање десној половини.
Како бисмо могли симболично представљати ради време ове жуте линије?
Т чега?
Шта је величина улаза?
н више од два.
Зашто не бих само да кажем да?
А онда је ово још један Т (н / 2), а затим Опет, ако сам спојити два разврстане полувремена,
Колико елемената ћу морати да додирнете укупно?
н.
Тако да могу да изразим ово, само да се некако фенси,
као истеклог времена уопште.
Т (н) је само ради време Т (н / 2), Плус Т (н / 2), лево и десно пола пола,
плус О (н), што је вероватно н корака, али можда, ако сам помоћу два прста,
Дупло је онолико кораке, али је линеарна.
То је неки број корака То је фактор Н,
тако да смо могли изразити ово као ово.
И ово је место где сада ћемо да пунт Назад нашег средњошколског уџбеника математика
смо да је понављање на крају завршава изнесува ово, н пута лог н,
ако ви у ствари раде из математика више формално.
>> Дакле, то је само два перспективе.
Један бројчано са хард-цодед репрезентативан пример
користи осам бројева, а више Генерал Погледајте како смо стигли.
Али оно што је заиста занимљиво овде је, опет, овај појам бициклизма.
Ја не користим за петље.
Ја сам некако дефинисања нешто у смислу себи,
не само са овим математичка функција,
али у смислу овог псеудо кода.
Овај псеудо код је рекурзивна у да су двојица његових линија
је у суштини то говори да иде користе се за решавање мањи
проблем мањих димензија, а онда опет и опет
и поново све док ми га Вхиттле до такозваног основног случаја.
>> Дакле, хајде да ствари скрене више убедљив узети-далеко од ово као што следи.
Пусти ме у гедит и да погледати неке данашње изворног кода,
нарочито овај пример овде.
Сигма 0, која очигледно додаје бројеви један преко Н.
Па хајде да видимо шта је то познато и непознатим овде.
Прво имамо пар обухвата, тако да ништа ново тамо.
Прототип.
Мало сам магловита о Ова после неколико дана,
али оно што смо рекли прототип функције је?
ПУБЛИКА: [неразумљиво].
ПРЕДСЕДНИК 1: Шта је то?
ПУБЛИКА: Ми га објави.
ПРЕДСЕДНИК 1: Ми га објави.
Тако да се настави цланг, хеј, заправо не спроводи ово још,
али негде у овом фајлу, по свој прилици, ће бити функција зове шта?
Сигма.
И ово је само обећање да то ће да изгледа овако.
То ће да се цео број као инпут-- и могу да будем јаснији
и кажу инт н --анд је ће врати ИНТ,
али и зарез средства, мм, ја ћу добити около спровођењу ово мало касније.
Опет, Цланг је глупо.
То ће само да знају шта ви не кажете врха до дна,
тако да је потребно да барем дају то наговештај онога што долази.
>> Сада хајде да погледамо главни овде.
Хајде дођите овамо и види шта Маин ради.
То није толико дуго на функцији, и у ствари конструкт овде познато.
Изјављујем променљива Н, а потом Ја опет и опет малтретира корисника
за позитиван цео број коришћењем Тонированние, а једини излаз из ове петље
Када корисник је испунио.
Радити док смо некада пестер кориснику на тај начин.
Сада ово је интересантно.
Изјављујем инт називом "одговор".
Ја то повратна вредност доделити на функцију која се зове "Сигма".
Ја не знам шта је то још увек, али Сећам га прогласи малопре.
А онда сам ја пролази у вредност коју корисник унесе, н,
а онда сам пријави одговор.
Па хајде да дођите назад само на тренутак.
Идемо напред у овом директоријуму, направити сигма 0, а заправо покренете овај програм
и види шта се дешава.
Дакле, ако одем напред и Рун Овај програм, ./сигма-0,
и куцам у позитиван цео као два, Сигма,
као грчки симбол подразумева, само ће се сабрати све бројеве из
нула на до два.
Па 0 плус 1 плус 2.
Дакле, ово би било пожељно да ми дају 3.
То је све што ради.
И слично, ако останем ово поново и ја му дати број три,
То је 3 плус 2, тако да је 5 плус 1 требало би да ми дају 6.
И онда ако добијем стварно луд и почните да куцате у већим бројевима,
треба ми дају веће и веће суме.
Тако да је то све.
>> Дакле, шта Сигма изгледа?
Па, то је прилично једноставно.
То је како да смо имплементирали ово за последњих неколико недеља.
"Инт" ће бити типа повратак.
Сигма је име, и потребно је променљива м уместо н.
Ја ћу то променити Уп Топ.
Онда је ово само проверу исправности.
Ћемо видети зашто је за тренутак.
Сада сам још једну променљиву изјављујем, Укратко, иницијализујте на нулу.
Онда ја имам ово за петљу итератинг, очигледно због јасноће,
од И = 1 горе до = М, који је год корисник унесе, а онда сам
повећавати износ овако.
А затим се вратите суму.
>> Па пар питања.
Један, ја тврдим у мом коментару да је та избегава ризик од бесконачне петље.
Зашто би пролази у негативном броју подстакне, потенцијално, бесконачну петљу?
>> ПУБЛИКА: Никада нећеш доћи м.
>> ПРЕДСЕДНИК 1: Никада до м.
Али м је усвојен, па хајде да размислите једноставан пример.
Ако је м донет од стране Корисник је негативно.
Без обзира на Маин.
Главни нас штити од и ово, тако да сам само
је заиста анал с Сигма да такође проверите да ли
да улаз не може бити негативан.
Дакле, ако м је негативан, нешто као негативно.
Шта ће се десити?
Па, ја ће се се иницијализован на један,
а онда ће бити мање од или једнако м?
>> Станд би.
То је било-- хајде да не, хајде да оставите на миру ову причу.
Нисам питао то питање, јер је ризик да сам алудирајући
се неће догодити јер је Увек ће бити већи тхан-- реду,
Ја ретрацт то питање.
У реду.
Хајде да се фокусирамо само на овом делу овде.
Зашто сам изјављујем мало изван петље?
Обавештење он лине 49 Имам прогласио И унутар петље,
али Онлине 48 имам изјавио је мало ван.
Да.
ПУБЛИКА: [неразумљиво].
ПРЕДСЕДНИК 1: Наравно.
Дакле, прво и пре свега ја сигурно не желе да се изјасне и иницијализацију суму
до нула унутрашњости петља на сваком итерације,
јер би јасно пораз Сврха сумирајући бројеве.
Ја бих стално мењају вредности назад на нулу.
И такође, што је још један више волшебни Разлог за ту исту дизајн одлуке?
Да.
>> ПУБЛИКА: [неразумљиво].
ПРЕДСЕДНИК 1: Управо тако.
Желим да јој приступе напољу петље такође на којој линији?
По 53.
И на основу нашег правило од пре неколико предавања,
променљиве сцопед, заиста, да се цурли протеза која их обухвата.
Дакле, ако ја не изјављујем суму унутра ових спољних заграда,
Не могу да га користе у реду 53.
Другачије речено, ако сам прогласио сума овде, или чак унутар
За петљу, ја нисам могао да приступи у 53.
Променљива би ефикасно нестати.
Тако да неколико разлога тамо.
Али сада да се вратимо и види шта се дешава.
Тако сигма добија звао.
Додаје се 1 плус 2 или 1 плус 2 плус 3, а затим враћа вредност,
складишти је у одговору, и принтф овде Зато и видим на екрану.
Дакле, то је оно што ћемо назвати итеративни приступ, где је само понављање
значи коришћење петљу.
За петље, неко време петље, раде док петља, само опет радимо нешто
и опет и опет.
>> Али сигма је врста уредан функције у да сам могао да га другачије спроведе.
Шта о томе, што само да буду кул,
пусти ме стварно отарасити о много дистракција
јер ове функције је заиста прилично једноставан.
Хајде Вхиттле га само својим четири основне линије
и отарасити свих коментари и коврџава заграда.
То је врста одувава алтернатива имплементација.
У реду, можда не смета-дува, али је некако секси, у реду,
да погледате ово много више језгровито.
Са само четири линије кода, Ја прво тај исправности чек.
Ако је м је мања или једнака нула, Сигма нема смисла.
То би требало да буде само у овај случај за позитивне бројеве,
тако да сам само ћу да врати нулу произвољно
тако да смо барем имамо Неки такозвани основни случај.
>> Али овде је лепота.
Целина ове идеје, додајући бројеве од 1 до н, или м у овом случају,
може да се уради врстом доношења долар.
Па, шта је суму од 1 до м?
Па, знате шта?
То је исто као збир м Плус суму од 1 до м минус 1.
Па знате шта?
Шта је сигма М минус 1?
Па, ако сте мало пратите ове логично, то је исто као м минус 1
Плус сигма М минус 2.
Па можете некако само-- То је као, ако сте тек
покушавају да узнемире пријатеља и они да те питам нешто,
Некако одговорити питањем, можете некако задржи доношења долар.
Али оно што је кључно је да ако наставиш чинећи питање мањи и мањи
и мањи, ти си Не тражимо шта је Сигма
Н, шта је сигма од н, шта је сигма н?
Ви питате шта је сигма Н, што је Сигма
за Н минус 1, шта је сигма од Н минус 2?
На крају питање ће постати шта?
Шта је сигма једног или нула, неке веома мале вредности,
и чим Склони то, твој пријатељ,
нећете питати Опет исто питање,
само ћеш рећи, Ох, то је нула.
Завршили смо играли ову врсту глупо цикличног игре.
>> Па Рекурзија је акт у програмирању о функцији која себе назива.
Овај програм, када се саставља и бежи, је ће да се понашају на исти начин,
али оно што је кључно јесте да се унутар на функцију која се зове Сигма,
постоји линија кода при чему смо се зовете,
што би нормално било лоше.
На пример, шта ако сам први саставио ово, тако да сигма--
направити сигма 1 ./сигма-1.
Позитиван цео број, молим вас, 50 ​​1275.
Па шта функција делује се, на основу једног теста, тачно.
Али, шта ако добијем мало опасно и брисање такозвани основни случај,
и само да кажем, па ја само правим Ова компликованије него што јесте.
Хајде да израчуна СИГМА узимањем м а затим додавањем
у сигма од м минус један?
Па, шта ће се овдје десити?
Хајде да умањите.
Хајде да рекомпајлирате програма, сачувајте га, рекомпајлирате програм,
а затим спреман ./сигма-1 зумирања, унесите позитиван цео број молим те, 50.
Колико сте спремни да признај да видим то?
>> У реду.
Тако да то може да се догоди за број разлога,
а искрено ове недеље смо о томе да вам дам више њих.
Али у овом случају, покушајте разуму уназад
Шта би се десило?
Сегментација грешка, рекли смо последњи време, односи се на сегмент меморије.
Нешто лоше десило.
Али оно што је било механички да кренуло наопако
овде због мог уклањања тог такозваног основног случаја,
где сам се вратио хард-кодирани вредност?
Шта ти мислиш кренуло наопако?
Да.
>> ПУБЛИКА: [неразумљиво].
ПРЕДСЕДНИК 1: Ах.
Добро питање.
Тако да је величина броја да сам сумирајући
Имам толико велика да је прекорачен величина меморијског простора.
Добра идеја, али не и у основи ће да изазове судар.
То би могло да изазове цео Оверфлов, где битови само пребацити
а онда грешка заиста велики број за попут негативног броја,
али да сама неће изазвати судар.
Јер је на крају Дан инт је још увек 32 бита.
Нећеш се случајно украсти 33. мало.
Али добар мисао.
Да.
>> ПУБЛИКА: [неразумљиво].
СПЕАКЕР 1: Метод Никада престаје да тече,
и заиста она се назива поново и опет и опет и опет
и опет, и ниједна од Те функције Евер
заврши јер је њихова јединим линију Шифра себи, позива опет и опет
и поново.
И шта је заиста дешава овде и сада смо
могу некако извући ово сликовито.
Пусти ме преко у слика за само тренутак.
Ово је слика, која на крају ће се месо из
детаљније, шта се дешава унутар меморије рачунара.
И испада да је дно ове слике
је нешто што се зове стек.
Ово је комад Меморија, комад РАМ,
то је само користи у било које време функција се зове.
Свака ти пут, програмер, позовите функцију,
оперативни систем, као и Мац ОС, Виндовс, или Линук,
зграби гомила бајтова, можда неколико килобајта, можда неколико мегабајта
меморије, руке им вама, а затим омогућава
наиђете своју функцију помоћу год променљиве ти треба.
А ако онда позвати другу функција и друга функција,
добијате још једну кришку меморије и још парче меморије.
>> И заиста, ако се ове зелене тацне од Анненберг представљају ту меморију,
ево шта се дешава први Време зовете функција Сигма.
То је као стављање послужавник овако на оно што је у почетку празан Стацк.
Али онда ако је тацна себе назива, да тако кажем,
позивајући другу инстанцу СИГМА, то је
као да питате оперативни систем, Оох, треба мало више меморије,
дај ми то.
И онда се добија нагомилане на на врху.
Али оно што је кључ је у томе да прва касета је још увек тамо,
јер је позвао ову другу фиоку.
Сада у међувремену, Сигма позовите Сигма, то је као да траже више меморије.
Добија нагомилане овамо.
сигма зову Сигма, то је још један траи који добија нагомилане овде.
И ако стално то радиш, на крају, некако мап Овај визуелни
тој табели, шта ће се десити са гомилу носача?
То ће премашити износ меморије рачунар има.
И чим тој зеленој фиоке премашује хоризонталну линију
изнад гомиле и изнад тог речи гомили, што ћемо се вратити у будућности,
то је лоша ствар.
Куча је другачији сегмент меморије,
и ако пустите ове тацне гомила и гомила на,
идете да прелази свој сегмент меморије,
и програм заиста ће да се сруши.
>> Сада као страни, ова идеја рекурзије, дакле,
може јасно да доведе до проблема, али је то није нужно лоша ствар.
Јер сматрају, после све, а можда како--
То захтева навикавање да --хов елегантно или како је једноставно
да је примена СИГМА био.
И нећемо користити рецурсион све то много у ЦС50,
али у ЦС51, и стварно било класа где сте манипулишу структуре података
као дрвеће или породичних стабала, да су неки хијерархију,
то је супер, супер корисно.
Сада, као на страну, тако да као амбициозне компјутерских научника
су упознати са неким од Гоогле-а интерних шала, ако одете на Гоогле-у
и погледате оно што је дефиниција, рецимо, рекурзије, унесите.
Аха.
Као на страну, повукао сам неколико.
То је било као 10 минута Одуговлачење јутрос.
Ако и ви Гоогле "накриво" Нотице нагињањем главу слигхтли--
а онда ово је можда Најстрашнија од свега
јер је неко провео као њихов дан реализовања
неколико година аго-- хајде.
Ох, ваит-- то буба.
>> Тако ради на једном од највећим светским сајтова
су ови глупи мали ускршња јаја.
Вероватно троше нетривијална број линија кода
само да можемо да имамо мало забаве ствари тако.
Али барем сад ти неке од тих интерних шала.
>> Сада ћемо да погледамо неке од Вхите Лиес смо говорили у последње време,
и почињу да ољуштити Назад неки слојеви Технички
тако да заиста разумеш Шта се дешава
и можете разумети неке од претњи,
попут Схеллсхоцк, то су сада почели да постану
на челу свачијег Пажња, бар у медијима.
Дакле, овде је врло једноставна функција да враћа ништа, празнина.
Његово име је свап.
Потребно у две променљиве и враћа ништа.
Узима у А и Б.
Тако брзо демонстрација.
Донели смо ово горе.
Ми можда и узети мало бреак овде само тренутак
и имају мало нешто да попијем.
Ако неко не би сметало придруживања ме овде за тренутак.
Шта је са тобом у бордо мајици?
Дођи горе.
Само један данас.
Хвала, ипак.
У реду, и ми имамо долази ко овде?
Како се зовеш?
>> ПРЕДСЕДНИК 4: Лаура.
>> ПРЕДСЕДНИК 1: Лаура.
Дођи горе.
Дакле Лаура, врло једноставно изазов данас.
Драго ми је да упознам ио.
У реду.
Дакле, имамо мало млека овде и имамо неки сок од поморанџе овамо
и неке шоље које смо позајмљена од Анненберг данас.
>> ПРЕДСЕДНИК 4: позајмио.
ПРЕДСЕДНИК 1: И ићи напред и дати вам пола чаше ово.
У реду.
А ми ћемо вам дати пола чашу млека.
Ох, и само тако да можете сећате шта је то било као,
Сетила сам се да донесе То се и данас.
Ок.
Ако вам не би сметало, да видимо, ми смо може да их стави у своје наочаре
ако желите.
То ће бити свет из Лауриним очију.
У реду.
Дакле, ваш циљ, с обзиром две шоље течност овде, млеко и сок од поморанџе,
се замени два садржаје тако да сок од поморанџе иде у млеко шољу
а млеко иде у сок од поморанџе чаша.
>> ПРЕДСЕДНИК 4: Да ли добити још једну шољу?
ПРЕДСЕДНИК 1: Драго ми је што питао, мада било би много боље снимак
ако не тражили.
Али да, можемо да Вам понудимо трећи чаша да је празна, наравно.
У реду.
Так своп садржај тамо.
Врло лепо.
Врло добро.
Ви то радите изузетно пажљиво.
И Трећи корак.
У реду.
Одлична.
Велики аплауз би било добро за Лаура.
У реду.
Имамо мали поклон за растанак за вас, али дозволите ми да ово.
Хвала вам пуно.
Тако једноставан пример, међутим, да покаже да ако радите
желите да замените садржај два контејнера,
или да их назовемо варијабле, ти треба привремено складиштење
да изведе један од садржаја у тако које се могу урадити замену.
Дакле заиста, овај код извор овде у Ц је представник управо то.
Ако је сок од поморанџе и млеко била Б, а ми смо желели да мењате два,
можете да пробате нешто креативно сипањем један у други,
али то вероватно не би завршити посебно добро.
Па ми користимо трећи Цуп, позив то тмп, Т-М-П по обичају,
и ставио садржај ОЈ у томе, онда замените једну шољу,
затим ставити у ОЈ Оригинал Цуп, тиме
постизање, баш као што Лаура урадио, замену.
>> Па хајде да управо то.
Пусти ме само напред и отворите уп пример који је
заправо зове "не свап ", јер то није
као једноставно урадити као што мислите.
Дакле, у овом програму, приметићете да Ја користим стдио.х, наш стари пријатељ.
Имам прототип За свап тамо, што
значи његова примена је Вероватно доле,
и да видимо шта је то главни Програм ће да уради за мене.
Први пут сам изјављујем инт к добија један, а инт и добија два.
Тако да мислим да од оних који су ОЈ и млеко, респективно.
И онда сам само иф рекавши к је ово
и и је то, само тако могу визуелно види шта се дешава.
Онда сам принтф тврдим да ја замене двоје,
а онда одштампате тврде да они заменили,
и ја одштампате Кс и И поново.
Дакле, овде у свап тачно шта Лаура урадио,
и управо оно што смо видели на екран малопре.
>> Па идемо напред и бити крајње разочаран.
Да не буде замену, и покренете никакву замену, зумирањем на излазу овде.
Улаз к је 1, и је 2, замене заменили.
к је још увек 1, а и је још увек 2.
Дакле, иако, искрено, ово изгледа исто као, мада више технички,
шта Лаура урадио, није изгледа да ради.
Па зашто је то тако?
Па, испоставило се да када пишемо програм овако
који је оба главна, истакао овде а затим још један функција, као што свап,
истакао овде, што позива, свет
изгледа нешто попут ови тацне малопре.
Када је главни први буде звао, то је као да питате оперативни систем
за мало меморије за било која локална варијабле као што су кии да је главни има,
и они завршавају тамо.
Али, ако главни позиви замените, а главни прелази да замени два аргумента, А и Б,
Сок од поморанџе и млеко, није да предаје сок од наранџе и млеко
Лаури.
Шта компјутер ради, то је пролази копије сока од поморанџе
и копије млека за Лаура, тако да оно што је у крајњој линији унутар ове фиоке
је један вредност и два, или ОЈ и млека, али њихове копије,
тако да у овом тренутку у причи, ту
је ОЈ и млеко у свакој од ових носача.
Постоји један и два У сваком од ових тацне,
а свап функција заиста ради.
Их је унутра сваппинг на другом највишем фиоке,
али да нема утицаја Сваппинг.
И на основу само неке Основни принцип имамо
говорио о раније, и заиста Пре само неколико минута, шта
би могло да објасни зашто мења А и Б унутар своп
нема никакав утицај на к и и, иако Прошао сам Кс и И за своп функцију.
Шта је кључна реч овде да Можда упрошћено објаснити?
Мислим да сам чуо овде?
Публика: Повратак.
ПРЕДСЕДНИК 1: Повратак?
Не врати.
Идемо са једним другим.
Шта је то?
>> ПУБЛИКА: [неразумљиво].
>> ПРЕДСЕДНИК 1: У реду, тако да смо могли ретурн-- да повратак рад у причи,
али постоји још једноставније објашњење.
Публика: Обим.
ПРЕДСЕДНИК 1: Обим.
Узећу обима.
Дакле обим, сећате где прогласио наш Кс и И.
Они проглашен унутра главних одмах овде.
А и Б, у међувремену, су ефективно прогласио
унутар замене, не баш у великих заграда, али и даље
у општем подручју свап.
И тако заиста, и б постоје само у оквиру ове фиоке
од Анненберг, ово Други комад кода.
Дакле, ми смо заиста мења копију, али то није баш све то корисно.
>> Па хајде да погледамо ово мало нижи ниво.
Идем да се вратим у Извор Дирецтори,
а ја ћу се прво зоом овде, и само
да потврди да сам у овом већи прозор терминала,
Програм је и даље понашају тако.
Претпоставимо сада да је ово није намерно.
Јасно сам желео да своп рад, тако да изгледа као бубу.
Сада сам могао да почне додавање Много принтф да мој код,
штампања к овамо, и преко овде, овамо, б овамо.
Али искрено, то је вероватно оно сте радили за пар недеља
сада, у радног времена и код куће у раду
на псетс покушавају да пронађу неке грешке.
Али ви ћете видети, ако не већ имате, да је проблем поставити три вас уводи
до команде зове ГДБ, где ГДБ, ГНУ дебуггер,
је себи гомилу особине које заправо може
хајде да разумемо ситуацију овако, али више убедљив,
решавају проблеме и пронађу грешке.
Па ћу да урадим.
Уместо ./носвап, ја сам уместо тога ће се покренути гдб ./носвап.
Другим речима, ја ћу да водим Програм не басх, наш нови пријатељ
данас.
Ја ћу да водим Програм носвап инсиде
овог другог програма под називом ГДБ, што је дебуггер, која
је програм који је дизајниран да помогне ти људи пронашли и уклонили грешке.
Дакле, ако сам погодио Трчи овде, ту је Огромна количина текста
да ли заиста не морате да чита.
То у суштини је сметња из линији која
Идем да удари Цонтрол-Л да устане на врху тамо.
То је ГДБ брз.
Ако желим да покренем овај програм сада, као овај мали Цхеат Схеет на данашњој
Слиде сугерише, Рун је први команде да ми треба да се уведе.
И ја само ћу да куцате рун овде унутар ГДБ,
и заиста је водио мој програм.
Сада постоји нека додатна излази екрана овако,
али то је само бити ГДБ анални и да нам кажете шта се дешава.
Ви стварно не морају да брину о овим детаљима сада.
Али оно што је заиста кул Абоут ГДБ, ако урадим ово Поново:
Контрола-Л брише сцреен-- пусти ме напред и тип "бреак главни," тиме,
када сам ударио Ентер, постављање шта је назвао пауза тачка у носвап.ц,
ред 16, где се ГДБ схватио мој програм заиста
је, моја функција је заправо.
То ћемо игнорисати за сада али то је адреса
у знак сећања посебно ове функције.
Тако да сада када тип трчим, приметити шта је кул овде.
Мој програм прекида на линији И Рекао ГДБ да паузирате извршење у.
Тако да не морам да сада промени своју шифру, додати неке принтф'С, рекомпајлирате га, реприза
га, промени, додати принтф'С, сачувајте га, рекомпајлирате га, покрените га.
Ја само да ходам кроз моју програм корак по корак по корак у људском брзином,
не у Интел-инсиде врсте брзине.
>> Тако да сада приметили ову линију појављује овде, а ако се вратим
мом програму у гедит, приметити да је то у ствари
први линија кода.
Постоји линија 16 у гедит.
Постоји ред 16 унутар ГДБ, и чак иако овој црној и белој интерфејс
није ни приближно као корисник пријатељски, то значи
да је линија 16 није извршена још увек, али ради се о бити.
Па заиста, ако куцам принт Кс, не принтф, само принт к,
Ја се мало лажне вредности постоји нула, јер к још није покренут.
Па ћу да куцате Следеће, или, ако Желим да будем фенси, само н за следећи.
Али када сам тип Следеће ући, сад приметити креће на линији 17.
Дакле логично, ако сам погубљен линија 16 и сада типа штампања Кс,
Шта би требало да видим?
Оне.
>> А сада ово је додуше збуњујуће.
$ 2 је само фенси начин, ако вас желе да се односи на те вредности касније,
можете рећи "долар потписати два."
То је као леђа референце.
Али за сада, само га игнорисати.
Оно што је интересантно је оно што је на десној страни знака једнакости.
А сада, ако ми се следеће откуца поново и Принт и, треба да видим 2.
Такође сада штампати к опет, и искрено,
ако сам све мало збуњен да где сам, могу типа листе за листу
и да видимо неке контекст око поента Ја сам заправо у.
И сада могу да куцате Следеће, а ту к је 1.
Сада куцам следећи.
Ох, и је 2.
И опет, то је збуњујуће, јер гдб је излаз
се измешани са мојим излазом.
Али ако имате на уму, по гледајући назад на вашем коду
или полагању страну од стране можда, ти ћеш
видим да стварно сам само одскочна кроз мој програм.
>> Већ приметили шта се даље дешава, буквално.
Ево ред 22.
Пусти ме да идем преко њега, тиме идемо даље до 23., а ако сам одштампате Кс сада, још увек један.
И ако сам и одштампате сада, још увек један.
Дакле, ово није корисна вежба.
Па хајде да редо ово.
Пусти ме да се вратим до врх и тип Рун поново.
И то каже програм који је већ био дебуггед
је већ почела, почео од почетка.
Да, хајде да поновимо ово.
И овај пут ћемо урадити следеће, Следеће, Нект, Нект, Нект,
али сада се ствари занимљив.
Сада желим да ступи у свап, тако да не типа следећи.
Куцам корак, а сада га приметити ме је скочио на носвап.ц линију 33.
Ако се вратим у гедит, шта је линија 33?
То је први стварни линија кода унутар свап.
Што је лепо, јер сада могу врста џаку около и добити радознали
о томе шта се дешава заиста тамо.
Дозволите ми принт тмп.
Вау.
Зашто тмп имају неке Црази, лажно смеће вредност?
ПУБЛИКА: То није покренут.
ПРЕДСЕДНИК 1: То није покренут.
И заиста, када покренете програм, сте дали гомилу меморије
оперативни систем, али ви нису иницијализовани никакве вредности,
тако да шта год да сте бита видим овде, иако је
Ова луда велики негативни број, само значи
да су то остаци из неке претходне употребе тог РАМ,
иако нисам себи да је потребно још.
Па сад ћу да наставим и тип Даље, и ако ја сада типа штампања ТМП,
Шта би требало да видим?
Без обзира вредност је, је први аргумент, само
као што Кс је први ствар се донет,
тако и к треба да буде исти, па принт тмп треба да ми принт један.
>> Дакле, шта ћете видети у сету проблема три је туторијал од врста на ГДБ,
али схватају да је ово почетак од погледате алат који ће заправо
вам помоћи у решавању проблема много ефикасније.
Оно што смо на крају смо урадити у среду
се почињу да ољуштити уназад неколико слојева и уклоните неке точкове обуке.
Та ствар се зове стринг који смо се користи за неко време,
ћемо полако одузети од тебе и почну да причају о
нешто више есотерицалли познат као цхар *,
али ми ћемо да радимо овај лепо и нежно на први, иако показивача,
јер они звали, може да уради нешто Веома лоше ствари, ако злостављана,
гледајући мало Цлаиматион из наш пријатељ Ницк Парланте из Станфорд
Универзитет, професор у рачунару наука који заједно овај преглед
онога што долази ове среде.
>> [ВИДЕО РЕПРОДУКЦИЈА]
Хеј, Бинки.
Пробудити.
Време је за забаву показивача.
>> Шта је то?
Сазнајте више о тројке?
Ох, добро!
[ЕНД ВИДЕО РЕПРОДУКЦИЈА]
ПРЕДСЕДНИК 1: То те чека у среду.
Ми ћемо се онда.
[ВИДЕО РЕПРОДУКЦИЈА]
-А Сада, Дееп Тхоугхтс, од Давен Фарнхам.
>> Зашто смо учење Ц?
Зашто не +?
>> [СМЕХ]
>> [ЕНД ВИДЕО РЕПРОДУКЦИЈА]