[MÜZİK OYUN] HOPARLÖR 1: Bu CS50 Tüm doğru, ve bu haftanın dört başlangıç ​​olduğunu ve duymuş olabilir veya okumak, dünya biten olmuştur. Internet çevresindeki tüm Oluyor hiç bilgi ve farkındalık vardır Bir program, a bir hata Bash denilen programlama dili. Bu harika markalı olmuştur Shellshock veya Bash kapı, ancak bu gibi eşyalar nadir olmamıştır. Ve aslında, çoğu getirmek Heartbleed arka anılar, Eğer fark olabilir ki Bu geçtiğimiz bahar geri basın hangi Benzer oldukça dramatik oldu. Şimdi o sizin burada Bugün, kaç senin, sahip Eğer anlamıyorum bile ne o Shellshock duydum, tüm hakkında? Pekala, ve size kaç savunmasız bilgisayarları var? Tamam, çok, çok daha fazla eller olmalıdır Şu anda kadar, nedenlerle biz göreceğiz. En ne bir göz atalım medyada devam ve daha sonra bunu biraz açıklayabilir Burada bizim için teknik. HOPARLÖR 2: Güvenlik uzmanları var uyarısında ciddi bir kusur olabilir ki yüzlerce etkileyecek hakkında olacak Dünyanın en web kullanıcılarının milyonlarca. Peki tam olarak oldu hata nedir Shellshock lakaplı, ve ne yapar? Peki, Shellshock olarak da bilinir Bash hata, o patlatır yazılımı. Hackerlar savunmasız taramak için virüs kullanın Linux ve Unix çalışan sistemler işletim sistemleri ve daha sonra bunları enfekte. Bash bir komut satırı kabuğu. Bu, kullanıcıların sorun başlatmak için komutları sağlar yazılım içinde programları ve özellikleri metin yazarak. Genellikle programcılar tarafından kullanılan ve var daha geniş bir dünyaya açık olmamalı, Shellshock bu değişiklikler olsa. Peki, worringly, bazı analistler bu büyük bir tehdit olabilir uyarmak, Shellshock tam izin verdiğinden Virüslü bir makinenin kontrol, Heartbleed ise sadece izin hackerlar bilgisayarlara casus. O, yani ciddi 10 üzerinden 10 puan olmuştur bir Ulusal tarafından şiddeti Güvenlik Açığı Veritabanı. Tüm web sunucularının 2/3 altındadır bazı Mac bilgisayarlar da dahil olmak üzere risk. Peki, emin olun Şimdi sistemlerini yama. Bir web sitesi çalışan hosting Herkes etkilenen işletim sistemleri en kısa sürede harekete geçmesi gerekir. Bakmak gerekir gelemez herkes onların izleme ve web uygulaması için güvenlik duvarları, herhangi saldırılar için dışarı bakmak için. HOPARLÖR 3: Kötü bir şey olabilirdi ki Biri kod yazmak istiyorum o otomatik gitmek ve tarama istiyorum İnternet ve etkileyecek Bu bilgisayarların hepsi. Ve onlar iyi, bunu bir kez, onlar yapabileceği en kötü şey her şeyi silmek olduğunu, veya aşağı siteleri kapattı. Bu yüzden hasar görebiliyordu Bu bakış itibaren, Biz kötü niyetli insanlar var nerede kim sadece hasara neden karar sistemleri üzmeye veya silerek Böyle dosyalar ve işler. HOPARLÖR 2: Bazı bu olduğunu söylüyorlar en zor ölçmek için yıllarda böcek, ve hafta sürebilir, hatta olabilir ay nihai etkisini belirlemek için. HOPARLÖR 1: Yani bütün, doğrudur ama komik bir şey, neredeyse tüm bir görüntülerinin sadece gördüm, belki klavyenin dışında, ile ilgisi yoktur olursa olsun hata. Sunucular ve teller ve benzeri, bu tür teğet ilgili oluyor, ama özünde oldukça aslında tanıdık Burada neler oluyor. Aslında, beni içine gidelim Bizim CS50 cihaz. Beni go ahead ve maksimize edelim Burada terminal penceresi. Ve siz, bu kullanıyoruz veya bunun bir sürümünü gömülü programlar yazmak için gedit olarak, benzeri komutları yazın ve, ve bu aslında, ve yer alır hafta, Bash, B-A-S-H için yapılmış. Bu Bourne yine kabuk hangi söyleyerek sadece süslü bir yoludur, Bu sahip olan bir program etkin istemi yanıp sönen, Bu bekleyen orada oturur Sizin için giriş. Ve komut bulunuyor satırı arayüzü hangi aracılığıyla Siz komutları çalıştırarak edilmiştir ve sonuçta derleme ve daha sonra çalışan programlar. Ancak Bash zamanda programlama aşağıdaki anlamda dili. Sen gibi komutlar olduğunu biliyoruz cd ve ls ve ayrıca tınlamak ve diğerleri, ancak kendi komutları tanımlayabilirsiniz Bash onları uygulayarak. Şimdi biz gitmiyoruz Büyük detaya gibi programlama dili Bash, ancak biliyorum, örneğin, şu anda bu, diye bir komut var "merhaba." Yani bulunabilir Bu paketlerin biri. Benim bilgisayarda yüklü değil. Yöneticinize sorun. Ama orada isterseniz bir program olmak Bash ya benim isteminde "merhaba" olarak adlandırılan, Ben aslında bu sözdizimi kullanabilirsiniz Oldukça C. gibi, tamamen aynı değil ama oldukça benzer fonksiyonu, bazı ayrıntılar eksik olsa. Hiçbir şey gibi görünüyor, ama şimdi ", merhaba" yazarsanız aslında bir yazabilirsiniz Program değil, C değil, Java, başka bir programlama dil, ancak Bash kendisi. Şimdi burada anahtar yazdım olduğunu Ben bu yeni komut vermek istedim isim, ve parantez de Bu sembolik bir işlev olmak. Bir kenara, ayrıca eğlenceli yapabilirsiniz ve aslında, hatta Mac OS şeyler, Bu Terminal adında bir program. Herkes en yerleşik geliyor Bu odada bir Mac bilgisayar var, ve Mac benzer şeyler yapabilirsiniz OS, ancak bunun ötesinde daha fazla gidebilir. Bu, küçük bir teğet olan ama eğlenceli tür. Bu sabah hatırlatıldı, Bu aracılığıyla düşünürken, Biraz oyun oynamak için kullanılan CS50 eski TFs biriyle her zaman o uzak yürümek istiyorum sayede Onun ekran ile yaptığı klavye kilidi, Ben bir komutu çalıştırmak istiyorum bu-- gibi "merhaba deyin." Ve şimdi her zaman o geri geldi onun Klavye Ekranı temizledi sonra ve o, yere otururdu bazı işler yapmak için çalışacağız, Onun directory-- içeriğini listelemek [SES OYNATMA] Merhaba. Merhaba. HOPARLÖR 1: Yani, adalet, o "merhaba." aslında değildi Genellikle bir şey oldu ki- daha yakındır [SES OYNATMA] -Beep. HOPARLÖR 1: ben-- -Öyle bu yüzden onun bilgisayar olur o aslında ona her zaman yemin Onun klavyenin oturdu. Ve çok hızlı bir şekilde o anladım Onun ekran kilidi bırakmamaya. Ama bu tür anlaşılacağı aptal eğlence sizi Bash gibi bir şey ile olabilir. Ama biraz daha var ciddi, daha, emin olmak için. Ve aslında, bu biridir en tehlikeli ve uzun ömürlü böcek gerçekten küresel dünyayı vurdu. Bu hata civarında olmuştur Yaklaşık 20 yıldır, ve sadece bir vurdu olacak göreceli sadeliği ile an. Yani bu bir temsilcisi komutu ki eğer kelimenin tam anlamıyla şu anda bir Mac sahibi Eğer kapağı açık olduğunda, Bunu yazarak deneyebilirsiniz Terminal çağrılan program. Terminal altında Uygulamalar Utilities-- bir kez, Windows kullanıcıları zorunda değilsiniz Bu özel threat-- dert ancak Mac'ler ile o sizin yazabilirsiniz Bir pencerenin içine bu ben burada yapacağım gibi, ve yazdığınız yoksa Bu program içine Ben şimdi yapacağım gibi, Terminal denilen, Eğer kelimeyi görürseniz "savunmasız" Bilgisayarınız açığından. Şimdi aslında ne demek? Ve bu kuşkusuz bir Bazı oldukça çılgın sözdizimi, ama en azından dışarı çizelim ilginç yönlerinden bazıları. Yani görünen bazı yazım var en azından C, biraz tanıdık ve daha genel programlama. Bazı parantez görmek, noktalı virgül, kaşlı, ve, ancak bu çıkıyor sarı burada aptal şey bir fonksiyon esas olan O hiçbir şey yapmaz. kolon araçları hiçbir şey, ve noktalı virgül hiçbir şey yapmadan durmak anlamına gelir. Bu iç yüzden kaşlı, aslında Ben eşit olduğunu Sol, bu oturum esasen yaratıyor Bir komut veya değişken, x denir, ve atama Orada kod o sarı biraz. Yani "yankı gibi bir şey olabilir merhaba "veya" demek bip "falan Buna benzer. Ama gözlerinde eğer fark sağa daha dolaşmak, daha bu hat daha var Bu noktalı virgül sadece sonu. Daha sonra, "savunmasız Eko" ve Bunun ötesinde daha var. Başka bir noktalı virgül, bash -c :. Yani uzun lafın kısası, Bu kod satırı zorlayıcı için yeterli olan bir bilgisayar bir şey yapıyor savunmasız Bunu yapmak istediğiniz, Bash burada bir hata var çünkü Bash durdurmak gerekiyordu olsa bile Komut hakkının okuma hatları Orada sarı metinden sonra, 20-artı yaşındaki hata için, Bash, aslında okuma olmuştur Bu noktalı virgül ötesinde ve güzel kadara anlattı yapıyor. Peki ima ne bu sonuçta? Ben sadece "merhaba echo" dedi ya da "savunmasız echo" ama ne bir şey yapsam Aslında kötü niyetli, rm -rf * gibi, hangi olmayabilir Daha önce hiç yazdığınız, ve açıkçası muhtemelen değil çok yakında gerektiğini, Bir yapabilirsiniz, çünkü onunla hasar çok. Neden? rm tabii ne yapar? Kaldırır. * Ne demek? Tüm. Bu yüzden, bir sözde var: vahşi kart, demek bu yüzden her şeyi silmek Geçerli dizin. -r özyinelemeli demek olur, Eğer silme konum ne varsa, hangi anlamına gelir bir dizin ve orada içinde , diğer dosyalar ve diğer dizinleri olduğunu yinelemeli orada dalmak ve bütün silin. Ve -f hepsini kötü. Herkes -f burada ne anlama geldiğini biliyor musun? Kuvvet. Bu yüzden bile, araçları zorlamak Bu kötü bir fikir ise, Beni sormadan bunu Daha fazla onay için. Yani, bilirsin, biz de gülmek Bu, ama açıkçası, muhtemelen Bu birden çok kez yazın Bir gün, gerçeklik, çünkü o kadar hızlı yolu olduğunu şeyler bir sürü silin. Ama ben bile biraz hasar yapmış. Ama bir bilgisayar kandırmak için olsaydı Bazı aptal değişken tanımlama içine veya fonksiyon x denilen, ama sonra yürütme, bilgisayarı kandırma Bu sınırları ötesinde işlevi, noktalı ötesinde Eğer gerçekten bir bilgisayar kandırmak olabilir rm gibi bir şey yürütme içine rf E-posta veya komutu veya Kopyala komutu. Her şey tam anlamıyla yapabilirsiniz Bilgisayar, bu dosyaları silerek olsun, dosyaları oluşturma birini spam, uzaktan bazı sunucu saldıran, Eğer bunu ifade edebilir, eğer Bir komutla, sen bunu yaparken içine bir bilgisayar kandırmak olabilir. Şimdi bir örnek ne Eğer bu nasıl olabilir? Eh, bilgisayarların bir çok şey var İnternet çalışan Bash üzerinde. Bize Mac kullanıcıları Bütün bunlar arasındadır. Linux sunucu bir sürü arasında yanı sıra onları, ve Unix sunucular. Windows yeniden alır nispeten kurtulmuş Eğer yükledim sürece Özel bir yazılım. Sunucuların Şimdi bir sürü için Örneğin, koşmak, web sunucuları, ve aslında Linux belki En popüler işletim sistemi internet üzerinden bilgisayarlarda çalıştırmak için Bu web sayfalarını hizmet vermekteyiz. Şimdi, daha sonra göreceğimiz gibi dönem içinde Eğer bir isteği göndermek senin browser-- Chrome, Internet Explorer, whatever-- uzak bir sunucuya, çıkıyor ki olsa bile Sadece yazdığınız www.example.com, Tarayıcınız bir mesaj gönderiyor Bu biraz daha gizemli, bu gibi. Ama garip bir şeyler fark. İlk iki satır Ben, daha önce hiç görmedim ama onlar görünmüyor Özellikle tehdit. Ama çalıntı kadarıyla fark Burada üçüncü hat için. Kötü bir adam bir mesaj göndermek olsaydı kendi bilgisayarından böyle Bir savunmasız Mac veya a kadar savunmasız Linux sunucu, Komik bir şey, o Bash olduğunu bu kadar basit küçük komut istemi, her yerde ve sık sık aslında yürütmek için kullanılan Bir içeriği aldığı mesajı. Ve bu mantık tarafından, yapabilirsiniz Bu nedenle, bir web sunucusu kandırmak, gibi bir şey göndererek User-Agent, genellikle hangi söylemek gerekiyordu Tarayıcınızın isim. User-Agent Krom, User-Agent İnternet Explorer, User-Agent Firefox, bu sadece tarayıcınızın olduğunu kendini tanımlamanın bir yolu. Ama eğer kötü bir adam çok akıllıca mm mm, ben, diyor söylemek için gitmiyorum ne benim tarayıcı, Ben bunun yerine bu göndermek için gidiyorum Bir rm-rf ile bir şey şifreli görünümlü * İçinde, tam anlamıyla bir kandırmak olabilir internette savunmasız web sunucusu tam olarak bu yürütme içine Orada tüm dosyaları silmek için. Ve açıkçası, o değil bunun bile kötü. Sen her şeyi yapabilirsin. Sen başlayabileceğini dağıtılmış Denial of Service saldırısı Eğer bu mesajı gönderirse Web sunucuları bütün demet ve sonra hepsini için, alçalma vardı Örneğin, Harvard.edu sunucularında, ve bang sıralayabilirsiniz Bunların dışında halt bir ağ trafiği ile aksi halde, bu kötü adam tarafından tetiklenen. Peki, uzun lafın kısası, neredeyse Bir Mac sahibi bu odadaki herkes Bu açıktır. Gümüş astar sen olmadıkça olduğunu dizüstü bilgisayarınızda bir web sunucusu çalıştıran, ve aslında yapılandırılmış sürece o, içine SSH gibi bir şey izin aslında güvendesin. Bu savunmasız, ama yok bir dizüstü içine almaya çalışırken, böylece tür emin olabilirsiniz. Ancak, Apple yakında olacak Bunun için bir düzeltme güncelleme olacak. Linux dünyası zaten yayımladı Fedora ve Ubuntu için düzeltmeler bir dizi ve diğer Linux sürümleri, ve gerçekten Eğer cihazın güncelleştirmeyi 50 çalıştırırsanız, çok olacaktır bile güncellenmiş ve düzeltilmiş. Ama bu çok değil sahip Gerçekten, savunmasız oldu Eğer ettik sürece çünkü cihazla birlikte tinkered ve kamuya dizüstü yaptı değil internet, erişilebilir Varsayılan olarak, sen var Aslında çünkü iyi olmuştur güvenlik duvarı ve diğer teknikleri. Ama bir hata uç bir örnek var biz kelimenin tam anlamıyla 20 için yaşadım yaş, ve kim birisi varsa bilir Tüm bu zaman hakkında bilinir? Ve aslında, bu biridir temel sorunlar Biz daha sonra göreceğiz ki güvenliği hakkında dönem, Bu, tıpkı gerçek dünyada gibi İyi adamlar dezavantaj vardır. Kötü adamlar tutmak için, biz var Her kapı kilitli olduğundan emin olun, Her pencere, güvenli olduğunu Bir ev girdiği her nokta Kötü adamlar dışarıda tutmak için güvenli olduğunu. Ama ne kötü adam var aslında ev uzlaşma yapmak ve sizden çalmak? O ya da o sadece kilidi bulmak zorundadır Kapı, bir kırık pencere, ya da bir şey bu doğrultuda, ve bu kadar Bilgisayar güvenliği aynı şey. Biz milyonlarca yazabilirsiniz Programlama kod satırları ve yüzlerce veya binlerce harcamak doğru almaya çalışırken saat, ama eğer sadece biri yapmak doğruluğu içinde hata, Eğer tüm sistemi koymak ve Gerçekten de, bu durumda, tüm internet ve risk dünya. Daha fazla bilgi edinmek isterseniz Yani Bu konuda, burada bu URL'ye gidin. Eylem için gerek yok Bu gece sen olmadıkça olanlar daha rahat arasında Kendi web çalışan edilmiştir Sunucu, hangi gerektiğini durumda, Aslında, yazılımınızı güncelleyin. Ve bu da başlığıdır Bir konuşma, ve şimdi bir kağıt, biz bağlantılı ettik Bugün için dersin web sitesini. Bir adam oldu adlı Ken Thompson, kim Bir çok ünlü kabul edildi bilgisayar bilimi ödül, ve o bazı yıllar bu konuşma yaptı önce, aslında bu aynı konu üzerine. Soru sorma millet, sen-meli gerçekten Güven, sonuçta, Yazılım size verilen oldum? Örneğin, hepimiz var programları yazıyor, ve biz derleme oldum Clang ile onları. Ve bilgiye, yazdığınız CS50 için herhangi bir program var bir tür arka kapı, bir yol var Kötü bir adam olduğunu, programı çalışıyorsa, Bilgisayarınızda ele verebilir? Muhtemelen değil, değil mi? Mario ve açgözlü ve Kredi. Bunların hepsi oldukça küçük programlardır. Oldukça olması gerekirdi kötü aslında eğer tüm bilgisayar savunmasız hale kod 10 veya 20 satırları yazdıktan sonra, ya da en azından habersiz güvenlik uygulamalarını. Şimdi ben, o hınzırca demek ama bugün gördüğümüz için gidiyoruz ve bu hafta aslında var Gerçekten, gerçekten kolay kötü ve hatta yapmak kısa programlar savunmasız. Ama şimdi, en azından, fark sorusu burada soruluyor ki Bir derleyici Clang hakkında. Neden clang güvenen edilmiştir Son iki ya da üç hafta boyunca? Kim kim clang yazdı söylemek var Orada bir "eğer" şartı yoktu Bu aslında bazı sıfırları enjekte ve her programa olanlar derler Bu izin istiyorum onu ​​ya da onu erişim Bilgisayarınız ne zaman sen uyurken ve dizüstü kapağı açık ve bilgisayarınızda çalışan? Doğru? Biz onur sistemi hakkının bu tür var şimdi Clang okunaklı olduğunu güven nerede. Sen Cihaz okunaklı olduğunu güveniyorum. Sen güvendiğiniz tam anlamıyla her program Mac veya PC üzerinde güvenilir olduğunu. Ve bu basit hata anlaşılacağı gibi, kötü niyetli olmasa bile, kesinlikle değil durumda olması muhtemeldir. Yani cehennem gibi korkuyor edilmelidir. Açıkçası, basit var Bu diğer çözüm toplumsal farkındalık bir tür daha artan karmaşıklık biz üstüne inşa ediyoruz ki Bizim bilgisayar sistemlerinin, ve nasıl giderek savunmasız biz çok iyi olabilir. Bu Koparma dedi Şimdi birlikte. Yani Breakout olan sorun üç set, ve Koparma yesteryear bir oyun Hatırlayacağınız olabilir, ama Bizim için sorun, üç set bize almasına izin veriyor şeyler bir çentik yedeklemek Biz program yazarken, böylece Hatta böyle bir Terminal penceresinde, biz aslında, sonuçta, çalıştırabilirsiniz grafiksel programlar değil benzemeyen biz Scratch içinde erişim. Yani bu personel en olduğunu Koparma uygulanması, hangi sadece bu tuğla kırma olduğunu Oyun, geri raket taşımak olduğunu ileri ve topa vurdu üst kadar bu renkli tuğla karşı. Yani bu bizi getiriyor tür geri nerede biz çok hızlı bir şekilde başardık Sıfırdan ile ve hemen C, Kendi uygulama grafiksel kullanıcı arayüzleri. Ama daha fazla, bu Sorun seti ilk temsil hangi biz veriyoruz Eğer bir kod demet. Ve aslında, ben açık getirmek Bu dikkat, özellikle çünkü Bu daha az rahat için, bu Sorun, en azından ilk bakışta, set gibi hissediyorum gidiyor Biz bir çentik yukarı aldım. Biz seni verdim Çünkü Arama bazıları için ve pset problemleri sıralama Biz yazdı kod bir demet, ve yorumların bir çift Bu, "yapmak" demek nereye boşlukları doldurmak zorunda. Yani çok korkutucu değil, ama ilk defa size kod teslim ediyoruz size gereken İlk, okumak, anlamak, ve sonra eklemek ve tamamlamak. Ve bu durumda ara ile, biz aynı şeyi gidiyoruz Size bir kaç düzine daha fazla satır vererek kod, açıkçası, size o çerçevenin bir sürü için oyun ama kısa durdurmak tuğla uygulama ve top ve raket, ama biz diğer bazı özellikleri uygulamak yapmak. Ve hatta ilk bakışta bu, yine, Özellikle, daha az rahat eğer Özellikle zor görünebilir ve Eğer çok yeni fonksiyonlar olduğunu düşünüyorum Fikrinizi sarmak gerekir etrafında, ve bu doğrudur. Ama bu, akılda tutmak Oldukça Scratch gibi. Oran Eğer tüm kullanmak vermedi vardır Scratch bulmaca adettir. Oran Eğer sarmak için umursamadı vardır Bunların hepsi etrafında zihin tüm aldı çünkü bir hızlı bir bakış, oh, anlamak ben ne yapabilirim Bu bulmaca parça ile. Ve gerçekten de, sorunun set 3 spec, sizi işaret edeceğiz belgelerine bu olacak Bazı yeni fonksiyonlar size tanıtmak, ve nihai olarak programlama Kullandığınız oluşturur. Döngüler Koşullar, değişkenler ve fonksiyonlar aynı olacaktır ne bugüne kadar gördük. Peki gerçekten ne vereceğim Bazı örnek kod olduğunu Eğer bir pencere oluşturmanızı sağlar Bu, bu farklı görünüyor değil ve sonuçta çevirmek Oldukça böyle bir şey. Yani CS50 yararlanmak, , ofis saatleri ve daha fazla tartışmak ve aslında bu konfor almak Eğer yazmak zorunda kod miktarı Aslında tüm bu kadar. İlk sorun, sadece acclimate olan Kendinizi bazı kod biz yazdık. Pset3 üzerinde herhangi bir soru, Shellshock veya başka? İZLEYİCİ: Bu gibi görünüyordu Breakout ile geçiyor Kod neredeyse olduğunu bir nesne-yönelimli, ama ben C Bir düşündüm nesne tabanlı program. HOPARLÖR 1: mükemmel bir soru. Yani aracılığıyla bakarak Dağıtım kodu, kod Biz pset3 için yazdı Bu tanıdık için, o Bir var gibi görünüyor küçük nesne yönelimli. Kısa cevap o, olduğunu. Bu sizin nasıl bir yaklaşım var kullanarak nesne yönelimli kod yapabilir C gibi bir dil, ama o Hala sonuçta usul. Içinde hiçbir yöntem bulunmamaktadır değişkenler, sizin de göreceğiniz gibi. Ama bu anımsatır. Ve biz yine bu özelliği göreceksiniz PHP ve JavaScript olsun Sonunda dönem doğru. Ama şimdi, olarak düşünmek ne bir ipucu gelmek. İyi bir soru. Tamam. Yani sıralama oldu birleştirme nasıl Sol şeyler son kez. Ve sıralama serin olduğunu birleştirme duygusu o kadar daha hızlı olduğunu, en azından üstünkörü deneylerine dayanmaktadır Biz balonu, diyelim ki, daha geçen hafta yaptım sıralama, seçme sıralama, ekleme sıralama. Ve ne çok temiz sadece bir nasıl özlü ve temiz bunu ifade edebilir. Ve biz bir üst ne dedin birleştirme çalışan zamanında bağlı sıralamak? Evet? İZLEYİCİ: n log n? HOPARLÖR 1: n sağ, log n. n log. Ve biz ne o geri geleceğim Gerçekten demektir ya da nereden geldiğini, ancak bu daha iyi ne çalışma süresi daha Biz balonu için gördüm Seçim ve yerleştirme sıralama? Yani n kare. n kare Bu daha büyük ve oldukça belirgin olmasa bile, bu günlük n n daha küçük olduğunu biliyorum, böylece n defa yaparsanız n daha küçük bir şey, o n kare daha az olacak. Orada sezgi bir parçasıdır. Ama biz bunun için bir bedel ödedi. Daha hızlı, ama bir tema başladı Geçen hafta ortaya bu takas oldu. Ben daha iyi performans aldım Zaman bilge, ama ne Ben diğer harcamak zorunda mı El, sırayla başarmak için? İZLEYİCİ: Bellek. HOPARLÖR 1: Tekrar söyle? HEDEF KİTLE: Bellek. HOPARLÖR 1: Bellek veya alan daha genel. Ve süper değildi Bizim insanlar ile belirgin, ama bizim gönüllüler hatırlamak ileri adım ve adım edildi sanki geri bir dizi var sanki burada, ve orada Burada bir ikinci dizi Onlar, kullanabilirsiniz çünkü biz gerekli yere bu millet birleştirmek için. Biz sadece bir yerde onları takas olabilir. Yani sıralama kaldıraç birleştirme daha fazla yer, hangi biz gerek yoktu diğer algoritmalar, ama ters çok daha hızlı olmasıdır. Ve açıkçası, gerçek dünya uzayda Bu days-- RAM, sabit disk space-- nispeten ucuz olan ve bu nedenle de bu ille kötü bir şey. Peki, en hızlı göz biraz olsun daha yöntemli, biz ne de ve neden biz n log n söyledi. Yani burada sekiz numaraları ve Sekiz gönüllü geçen zaman vardı. Ve Birleştirme ilk şey Sıralama yapmak için bize ne olduğunu söyledi? HEDEF KİTLE: iki bölün. HOPARLÖR 1: Tekrar söyle? HEDEF KİTLE: iki bölün. HOPARLÖR 1: iki Böl, doğru. Bu çok olduğunu hatırlatan bölünmenin telefon rehberi, ve daha genel fethetmek. Bu yüzden sol yarısında baktı. Ve biz sıralama, dedi sonra bir kez elemanların sol yarısı, Önümüzdeki ne dedin? Sol sol yarısını sırala Yarım, hangi bize izin iki bölme sonra, dört ve iki odaklanmak. Nasıl şimdi, bir listeyi sıralamak yapmak sarı, Sıralama Birleştirme kullanarak boyutu, iki, bir? Peki ikiye bölün, ve sol yarısını sıralamak. Ve bu nerede şeyler oldu Biraz aptal kısaca var. Eğer bu bir listesini sıralamak nasıl boyut, bir, burada, bu sayı, dört gibi mi? Bu sıralanır var. Sen bitti. Ama sonra bir listesini sıralamak nasıl boyutu iki numara var mi? Peki, ama şimdi ne aynı şey oldu Üçüncü ve Birleştirme Sırala önemli bir adım? Sen sol birleştirmek zorunda Yarım ve sağ yarısı. Biz yaptığımız Ve bir kez, biz baktı dört, biz iki baktı. Biz, bütün hak verdi Açıkçası iki önce gelir bu yüzden biz iki koymak onun ardından dört bir yer. Ve şimdi sen tür sarmak zorunda, ve bu özelliğinin tür Birleştirme gibi bir algoritma Sıralama, bellekte geri sarma. Hikayenin sonraki satır neydi? Bir sonraki ne odaklanarak olmalıdır? sol sağ yarısı Altı ve sekiz buçuk. Bu yüzden bana bu adım adım izin çok fazla Konuyu fazla uzatmadan olmadan. Altı ve sekiz, sonra altı olduğunu sıralanır, sekiz sıralanır. Bu gibi onları bir araya Birleştirme, ve şimdi bir sonraki büyük adım Tabii ki, sağ yarısı tür Bu algoritmanın ilk adımı. Yani biz bir, üç, yedi, beş odaklanmak. Daha sonra sol yarısında odaklanmak. Bu sol yarısı, sağ yarısı Bu, daha sonra bir ve üç birleştirme. Sonra sağ yarısı, daha sonra yarım bıraktı Bunun, sonra bunun sağ yarısı. Adım kalır ne şimdi birleştirmek, ve? Büyük sol yarısı ve büyük Birleştirme Sağ yarım, yani bir, oraya gider daha sonra, daha sonra, iki, üç, dört, Beş, altı ardından, daha sonra yedi, ardından sekiz. Peki şimdi neden bu sonuçta açıklayıcıdır, Özellikle eğer n ve logaritma daha genellikle oldukça, seni kaçış en azından son bellekte? Peki, bu şeyin yüksekliğini fark. Biz sekiz unsurları vardı ve biz iki tarafından, iki tarafından, ikiye bölünmüş bunu. Yani taban oturum sekiz iki Bize üç veriyor. Ve bu bana güven varsa Bu biraz puslu. Ancak, sekiz iki, üç taban log bu yüzden birleşmesi üç kat yaptım. Ve biz birleşti zaman elemanları, kaç elemanları Biz bu satırların her biri üzerinde bakmak mı? N toplam, değil mi? Üst satır birleştirme Çünkü, Biz parça parça yaptım bile, sonuçta kez her numarayı dokundu. Ve ikinci satırda için boyut, iki bu listeleri birleştirme, kez her elemanı dokunmak kaldı. Ve sonra burada gerçekten açıkça, son satırda, biz onlardan her dokunmak zorunda bir kez, ama yalnızca bir kez elemanları, yani burada bizim n log n, daha sonra, yalan. Ve şimdi sadece işler biraz yapmak için Sadece bir an için resmi daha, eğer Şimdi bu analiz edildi daha yüksek seviyede bir tür olarak ve ne kadar iyi, karar deneyin Eğer ifade hakkında gitmek olabilir Bu algoritma çalışma süresi Sadece ona değil, bakarak Bir yapmacık bir örnek kullanarak? Peki, ne kadar zaman bir derdi sarı bu alacağını gibi adım, n <2 dönüş olur? Bu ne büyük bir Ey değil mi? Yani, bir, bu yüzden bir adım görüyorum belki iki adımlar eğer çünkü ve daha sonra geri dönmek, ama var zaman sabiti, değil mi? Bu yüzden O (1), ve bu dedi Ben bu ifade edeceğiz nasıl. T, sadece zaman çalışıyor olması. N, girdi büyüklüğü böylece T (n), sadece bir fantezi yol çalışan söyleyerek n büyüklüğünde zaman verilen giriş sipariş üzerine olacak zaman sabitinin, O (1). Ama aksi takdirde, bu konuda ne? Eğer ifade ediyorum nasıl bu sarı çizginin çalışma süresi? Ne T? Sen tür burada hile ve döngüsel soruma cevap. Yani çalışma süresi eğer biz sadece söylemek Genel T (n). Ve şimdi ne tür burada punting konum ve , iyi, sadece sol yarısını sıralamak, diyerek ve sonra sağ yarısını sıralamak. Sembolik temsil edebilir nasıl bu sarı çizginin çalışma süresi? Ne T? Giriş büyüklüğü nedir? üzerinde iki n. Neden sadece söylemek değil mi? Sonra bu bir, T (n / 2) ve daha sonra Yine, ben iki sıralı yarılarını birleştirme durumunda, kaç elemanları Ben gidiyorum Toplam dokunmak zorunda? n. Yani, bu ifade edebilir Sadece, bir tür fantezi olarak genel çalışma süresi olarak. T (n), T (n / 2) sadece çalışan zamanı artı T (n / 2), yarım ve sağ yarım bıraktı ayrıca, muhtemelen N adım O (n), ama belki, ben iki parmağınızı kullanarak ediyorsam, birçok iki kat daha adımlar, ama doğrusal değil. Bu adımların bazılarını sayı Bu, bir n faktördür Bu yüzden biz bu gibi bu ifade olabilir. Ve bu biz punt edeceğiz nerede şimdi geri lise matematik ders kitabı biz sonuçta nüks şeyiz biter, bu eşit, n kere log n aslında dışarı yaparsanız matematik daha resmen. Yani sadece iki bakış açısı var. Bir Tek sayısal temsili bir örnek kodlanmış Sekiz sayı ve bir daha kullanma Biz orada var nasıl genel bakış. Ama burada ne gerçekten ilginç yine, bisiklet bu kavramıdır. Ben döngüler için kullanarak değilim. Ben tür tanımlama ediyorum kendisi açısından bir şey, sadece bu ile matematiksel fonksiyon, ama aynı zamanda bu sahte kod açısından. Bu sahte kod özyinelemelidir Çizgilerinin bu iki aslında bunu anlatıyor gitmek küçük çözmek için kendisini kullanmak daha küçük bir sorun ve daha sonra tekrar tekrar ve yine kadar biz eritmek onu Bu sözde temel duruma düştü. Yani aslında daha çekici çizelim take-away bu izler gibi. Beni gedit gitmek ve bir atalım Bugünün kaynak kodunun bazı bakmak, Bu örnek, burada, özellikle de. Görünüşe göre ekler Sigma 0, sayılar n boyunca bir. Peki tanıdık görelim Burada ve yabancı. Önce biz bir çift var içerir, bu nedenle yeni bir şey yok. Prototip. Ben biraz puslu değilim bu, birkaç gün sonra, ama biz ne dedin Bir fonksiyonun prototipi? HEDEF KİTLE: [duyulamaz]. HOPARLÖR 1: Bu nedir? HEDEF KİTLE: Biz duyurdu. HOPARLÖR 1: Biz duyurdu. Yani, hey, clang öğretiyoruz aslında henüz bu uygulama değil, ama bir yerde bu dosyada, muhtemelen, Bir işlev ne denir olacak? Sigma. Ve bu sadece bir sözdür ki böyle bakmaya gidiyor. Bu gibi bir tamsayı almaya gidiyor input-- ve ben daha açık olabilir ve int n -ve bu olduğunu söylüyorlar Bir int dönmek için gidiyor, ama noktalı virgül araçlar, mm, ben etrafında alırsınız Bir süre sonra bu uygulama için. Yine, Clang dilsiz olduğunu. Sadece ne bilmek gidiyor Eğer, yukarıdan aşağıya doğru söylemek bu yüzden en azından vermek gerekir bu ne bir ipucu gelmek. Şimdi burada ana bakalım. Burada aşağı ilerleyin edelim ve yaptığını ana görmek. Bir fonksiyonun uzun değil, ve Aslında burada yapı tanıdık. Sonra bir değişken n ilan ve Ben tekrar tekrar kullanıcı musallat GETINT kullanarak pozitif tamsayı için, ve bu döngünün dışına tek çıkış bir kez kullanıcı riayet etmiştir. While mı, biz alışık olduğunuz bu şekilde kullanıcıya musallat. Şimdi bu ilginç. Ben adında bir int ilan "cevabı." Ben dönüş değeri atamak olarak bilinen bir fonksiyonun "sigma". Ben henüz ne yaptığını bilmiyorum, ama yok Ben bir an önce bunu ilan hatırlıyorum. Ve sonra ben geçiyordum değer kullanıcı, yazdığınız n bu ve sonra cevap rapor. Peki geri kaydırma edelim Sadece bir an için. Şimdi bu dizine devam edelim, yapmak sigma 0, ve aslında bu programı çalıştırın ve ne olduğunu görün. Ben devam edin ve çalıştırın Yani Bu program ./sigma-0, ve ben olumlu yazın ikisi gibi tamsayı, Sigma, Yunan sembolü anlaşılacağı gibi, sadece bir tüm sayıları toplamak için gidiyor iki yukarı sıfır. Yani 0 artı 1 artı 2. Yani bu umarım bana 3 vermelidir. Yani yapıyor hepsi. Ve benzer, eğer yine bu çalıştırın ve ben, o numarayı üç vermek O yüzden o, 3 artı 2 var 5 artı 1 bana 6 vermelidir. Ve ben gerçekten deli olsun o eğer ve büyük sayılar yazmaya başlayın, bana vermelisin büyük ve daha büyük meblağlar. Yani hepsi bu. Peki sigma gibi görünüyor? Peki, bu oldukça basittir. Biz hayata nasıl olabileceğini bulunuyor Son birkaç haftadır bu. "Int" dönüş türü olacak. Sigma adı ve onu alır yerine n değişken bir m. Ben üst o kadar değiştireceğiz. Sonra bu sadece bir aklı kontrol olduğunu. Biz bir an neden görürsünüz. Şimdi başka bir değişken bildirmek, toplamı sıfıra başlatılamadı. Sonra döngü bu var görünüşe göre netlik için, yineleme, i = 1 kadar bir = m, hangi ne olursa olsun kullanıcı yazdığınız, ve sonra Böyle toplamı artırmak. Ve sonra toplamını döndürür. Soru Yani bir çift. Bir, ben bu benim yorumda iddia sonsuz bir döngü riskini önler. Neden negatif bir sayı geçirerek olur potansiyel, sonsuz bir döngü neden? İZLEYİCİ: Sen m ulaşmak asla. HOPARLÖR 1: m ulaşmak asla. Ama m geçti, bu yüzden atalım edilir Basit bir örnek düşünün. M tarafından geçirilir Negatif olarak kullanıcı. Bağımsız main. Ana bizi korur Bu da, bu yüzden ben sadece gerçekten Anal olmak sigma de emin olmak için Bu giriş negatif olamaz. M negatif Yani eğer, Negatif gibi bir şey. Ne ne olacak? Peki, ben gidiyor birine başlatıldı olsun, ve sonra ben olacak veya daha az m eşit? Stand by. Yani, 's etmeyelim Ben-- Şimdi bu hikayeyi nix verelim. Çünkü, bu soruyu sormadı Ben ima ediyorum riski Ben çünkü ne olacak değil Her zaman büyük edemememden Tamam gidiyor, Ben bu soruyu geri. TAMAM MI. Burada sadece bu bölümünde odaklanalım. Neden bazı ilan etmedi döngü dışında? Hat Ben ettik 49 Bildirimi döngü içinde i ilan, ancak çevrimiçi 48 var Bazı dışında ilan etti. Evet. HEDEF KİTLE: [duyulamaz]. HOPARLÖR 1: Tabii. Yani öncelikle ben kesinlikle yok beyan ve toplamı başlatmak istiyor sıfır içine Her yineleme döngü, Bu açıkça yenilgi çünkü numaralarını toplanmasıyla amacı. Ben sürekli değişiyor ediyorum geri sıfıra değer. Ve ayrıca, ne başka bir daha gizemli bulunuyor Aynı tasarım kararı nedeni? Evet. İZLEYİCİ: [duyulamaz]. HOPARLÖR 1: Kesinlikle. Ben dışarıda erişmek istiyorum çok hangi hat üzerinde döngü? 53 günü. Ve başparmak bizim üstünlüğüne dayalı konferanslar önce bir çift dan, değişkenler, gerçekten, kapsamlı edilir Onları kapsayacak kaşlı. İçimde toplamı beyan yoksa Yani Bu dış kaşlı ayraçlar arasında, Ben hat 53 kullanamazsınız. Ben ilan, başka bir deyişle Burada, hatta içinde toplamı Döngüsü için, ben 53 bunu erişemedi. Değişken etkili bir gitmiş olurdu. Yani orada nedenlerle bir çift. Ama şimdi geri dönelim ve ne olduğunu görün. Yani sigma çağrılır. Bu, 1 artı 2, veya 1 artı 2 ekler artı 3, ve sonra, değerini döndürür cevap saklar, ve burada printf Ben ekranda görüyorum nedeni budur. Yani biz bir iteratif arayacağım ne yaklaşım, nerede yineleme sadece Bir döngü kullanarak anlamına gelir. Döngü, bir iken döngü, bir Yapılacaklar iken A döngü, sadece tekrar bir şeyler yapıyor ve tekrar ve tekrar. Ama sigma düzgün bir fonksiyon türüdür Ben farklı şekilde uygulamak olabilir. Bu konuda neler, hangi Sadece, biraz serin olması beni gerçekten kurtulmak izin oyalama bir sürü Bu fonksiyon, çünkü gerçekten oldukça basittir. Diyelim whittle aşağı sadece Dört çekirdekli hatları ve kurtulmak tüm Yorum ve kaşlı. Bu zihin-üfleme tür alternatif uygulama. Pekala, belki akla-üfleme değil, ama seksi, tüm hak türlü, var çok daha özlü Bu bakmak için. Kod sadece dört hatları ile, Ben ilk bu aklı kontrol var. M daha az ya da eşit ise sıfır, sigma hiçbir mantıklı. Sadece olması gerekiyordu Pozitif sayılar için bu durum, bu yüzden sadece gidiyorum keyfi sıfır döndürür En azından olması için Bazı temel durum sözde. Ama burada güzellik. ekleyerek bu fikrin bütününü, n, 1 ila numaraları, ya da bu durumda m, kova geçen türüne göre yapılabilir. Peki, m 1 toplamı nedir? Peki, biliyor musun? Bu m toplamı aynıdır artı eksi 1 m 1 toplamı. Peki biliyor musun? M eksi 1 sigma nedir? Peki, eğer tür bu takip mantıksal, bu m eksi 1 olarak aynıdır artı m eksi 2 sigma. Yani bir tür sadece-- can Sadece eğer bu, gibi Bir arkadaş rahatsız çalışıyor ve onlar size bir soru sorabilir, ne tür bir soru ile cevap ne tür kova geçen tutabilirsiniz. Ama ne anahtar tutmak eğer olduğunu soru daha küçük hale ve küçük, sen sigma ne soran değil n, sigma ne n, n sigma nedir? Sen ne soruyorsun n sigma, ne sigma var n eksi 1, n eksi 2 sigma nedir? Sonunda soru ne olmaya devam etmektedir? Bir ya da sigma ne sıfır, bir çok küçük bir değer, ve en kısa sürede senin kadar bu, senin arkadaşınız olsun sormak için gidiş değildir Yine aynı soru, Sadece oh sıfır olduğunu söylemek için gidiyoruz. Biz bu tür oynarken bitirdiğinizde aptal döngüsel oyun. Yani yineleme programlama eylemidir Bir fonksiyonun kendisini çağıran. Derlenmiş ve çalıştırdığınızda bu program, aynı şekilde davranmaya gidiyor, ama ne anahtar olduğunu içeride Sigma olarak bilinen bir fonksiyonun, kod burada bir çizgi var biz kendimizi aradığınız normalde kötü olurdu. Örneğin, ne ilk ben eğer bu derlenmiş, yani sigma-- yapmak sigma 1 ./sigma-1 yapmak. Pozitif tamsayı, lütfen, 50 1275. Peki işlevi gibi görünüyor Doğru bir test dayalı olmak. Ama ben biraz tehlikeli ne olsun ve sözde temel olgu silmek, ve sadece iyi ben sadece yapıyorum demek o daha bu daha karmaşık. Sadece sigma hesaplamak Let m alarak ve daha sonra ekleyerek m eksi biri sigma mi? Peki, burada ne ne olacak? En uzaklaştırmak edelim. Programı yeniden derlemek edelim, , kaydetmek programı derlemeye, ve yakınlaştırma ./sigma-1 ardından hazır, 50 pozitif tamsayı lütfen giriniz. Kaçınız hazırız Bu görmeye fess? Tamam. Yani bunun için olabilir nedenlerle, bir dizi ve açıkçası bu hafta konum size onlardan daha vermek üzere. Ancak bu durumda, deneyin geriye mantığa Burada ne olmuş olabilir? Segmentasyon hatası, biz son sözü zaman, bellek bir segmente karşılık gelir. Kötü bir şey oldu. Ama bunu ne oldu mekanik ters gitti çünkü burada benim kaldırma sözde baz davanın, nerede bir sabit kodlanmış değeri döndü? Ne yanlış gitti sizce? Evet. İZLEYİCİ: [duyulamaz]. HOPARLÖR 1: Ah. İyi bir soru. Sayısı boyutuna yüzden Ben toplanmasıyla olduğunu o aştı ki büyük var bellek alanı boyutu. İyi fikir, ama temelde Bir çökmesine neden olacak. Bu tamsayı taşmasına neden olabilir, bit sadece çevirmek nerede ve sonra gerçekten büyük hata negatif bir sayı gibi numarası, ama kendisi bir çökmesine neden olmaz. Çünkü sonunda gün bir int hala 32 bit. Sen gitmiyorsun yanlışlıkla bir 33. biraz çalmak. Ama iyi bir düşünce. Evet. İZLEYİCİ: [duyulamaz]. HOPARLÖR 1: yöntemi asla çalışmayı durdurur, ve gerçekten de kendisini yeniden çağırır ve tekrar ve tekrar ve tekrar ve yine, ve hiçbiri Hiç bu fonksiyonlar onların tek hat çünkü bitirmek Kod tekrar tekrar kendilerini çağıran ve yine. Ve gerçekten var biz Buradaki, ve şimdi tür resimsel bu çizebilirsiniz. Bana bir yanına gidelim Sadece bir an için resim. Bu da, bir resim sonunda ayrıntılarıyla anlatacağım daha ayrıntılı, oluyor ne Bilgisayarınızın bellek içinde. Ve o dışarı çıkıyor Bu resmin alt yığın olarak adlandırılan şeydir. Bu bir yığınıdır Bellek, RAM yığın, bu sadece her zaman kullanılan Bir fonksiyon denir. Herhangi bir zaman, bir programcı, Bir işlevi çağırmak, İşletim sistemi, gibi Mac OS, Windows veya Linux, kapmak bayt bir demet, belki bir Birkaç kilobayt, belki birkaç megabayt bellek, onları eller Size ve ardından sağlar Eğer kullanarak işlevi çalıştırmak ne olursa olsun değişkenler ihtiyacınız. Ve sonra başka bir ararsanız fonksiyonu ve başka bir işlev, Eğer bellek başka dilim olsun ve bellek başka dilim. Ve gerçekten de, eğer bu yeşil tepsiler Annenberg gelen, belleğin temsil Burada ilk ne var zaman işlev sigma diyoruz. Böyle bir tepsi koyarak gibi Başlangıçta boş bir yığın var ne. Ama sonra eğer tepsi tabiri caizse, kendisini çağıran, Başka bir örneği çağıran sigma, işte işletim sistemini soran gibi, ooh, biraz daha fazla bellek gerekir bana ver. Ve sonra üstüne kazıklı alır. Ama ne burada anahtar olmasıdır İlk tepsi, hala orada O bu ikinci tepsiyi çağrılan çünkü. Şimdi arada, sigma sigma diyoruz, Bu daha fazla bellek soran gibi. Burada kazıklı Alır. sigma başka var, sigma çağrı Burada kazıklı alır tepsi. Ve sen bunu yapmaya devam eğer, Sonunda, bir tür bu görsel harita Bu grafiğe, ne oluyor tepsilerin yığını ile olur? Bu tutarı aşan gidiyor bellek bilgisayar vardır. Ve kısa sürede bu yeşil tepsi gibi yatay çizgi aşıyor yığının üstünde ve o kelime yığın üzerinde, hangi gelecekte geri geleceğiz, Bu kötü bir şey olduğunu. yığını farklıdır bellek kademeli, ve bu izin verirsen tepsiler kazık ve kazık üzerine Eğer aşmak için gidiyoruz bellek kendi segmenti, ve bir program gerçekten çökmesine gidiyor. Şimdi bir kenara olarak, bu fikri özyineleme, bu nedenle, açıkça sorunlara yol açabilir ancak mutlaka kötü bir şey değil. Düşünün Çünkü, sonra tüm how-- ve belki Bu bazı alışmak alır --Ne zarif ya da ne kadar basit sigma bu uygulama oldu. Ve biz kullanmak için gidiyoruz değil CS50 tüm bu kadar yineleme, ama CS51 içinde ve gerçekten herhangi bir sınıf Eğer veri yapılarını işlemek nerede ağaçlar, ya da aile ağaçları gibi, Bu, bazı hiyerarşi var süper kullanışlı, süper değil. Şimdi, bir kenara, böylece sen misin bilgisayar bilimcileri kalkınan gibi Google'ın bazı aşina Google'a giderseniz iç şakalar, ve ne kadar bakmak , tanımı diyelim, tekrarlama, girin. Hı-hı. Bir kenara, ben bir kaç çekti. Bu 10 dakika gibi oldu erteleme bu sabah. Eğer Ayrıca Google "çarpık" uyarı Başınızı eğerek slightly-- ve daha sonra bu belki de en önemlisi vahşi Birisi gibi harcanan beri Bu uygulama onların gün birkaç yıl hadi önce--. Ah, bekle-- bir hata var. Yani birinde çalışan Dünyanın en büyük web siteleri Bu aptal küçük Paskalya yumurtaları vardır. Muhtemelen bir tüketmek kod satırları nontrivial sayısı Sadece biz böylece Böyle küçük eğlenceli şeyler. Ama en azından şimdi olsun Bu iç şakalar bazılarıdır. Şimdi bazılarına bir göz atalım beyaz, biz geç söylüyorum yalan ve geri soyma başlar bazı tabakalar teknik Eğer gerçekten anlamak böylece ne oluyor oldu ve anlayabiliyorum tehditler bazı Shellshock gibi, bu Şimdi olmaya başladı herkesin ön planda dikkat, en azından medyada. Yani burada çok basit bir fonksiyon olduğunu Bu boşluk, hiçbir şey döndürür. Onun adı takas olduğunu. Bu iki değişken alır ve hiçbir şey döndürür. A ve b Alır. Yani hızlı bir gösteri. Biz bu kadar getirdi. Biz de biraz sürebilir Sadece bir an için burada mola ve içecek bir şeyler var. Birisi katılmadan sakıncası olmaz ise Burada sadece bir an için beni yukarı. Nasıl bordo gömlek senin hakkında? Hadi gel. Sadece bugün. Olsa, teşekkür ederiz. Pekala, biz var burada kim geliyor? Adınız ne? HOPARLÖR 4: Laura. HOPARLÖR 1: Laura. Hadi gel. Yani Laura, çok basit bir meydan okuma bugün. Yo karşılamak için güzel. Tamam. Yani biz burada biraz süt var ve Burada üzerinde bazı portakal suyu var ve bazı bardak ki Bugün Annenberg ödünç. HOPARLÖR 4: Ödünç. HOPARLÖR 1: Ve önde gidecek ve bu yarım bardak verin. Tamam. Ve size yarım vereceğim bir bardak süt. Oh, ve sadece can böylece Bu böyle ne olduğunu hatırlıyor Ben getirmek hatırladım Bu kadar ve bugün. Tamam. Sakıncası olmaz ise, bakalım, biz Kendi gözlük üzerinde onları koyabilirsiniz istersen. Bu Laura'nın gözlerinden dünya olacak. Tamam. Yani hedef, iki bardak verilen Burada sıvı, süt ve portakal suyu, İki içeriğini değiştirebilir şekilde portakal suyu, süt kabına gider ve süt gider portakal suyu fincan. HOPARLÖR 4: Başka bir fincan mı? HOPARLÖR 1: Ama, sen sordu sevindim çok iyi film olurdu Eğer sordu olmasaydı. Ama evet, size üçüncü bir sunabilir Tabii, boş bardak. Tamam. Yani orada içeriğini takas. Çok güzel. Çok iyi. Sen oldukça dikkatli yapıyoruz. Ve üç adım. Tamam. Mükemmel. Alkış büyük bir yuvarlak Laura için iyi olurdu. Tamam. Biz küçük bir ayrılık hediye var Sizin için, ama bana bu atalım. Çok teşekkür ederim. Yani basit bir örnek olsa da, Bunu yaparsanız olduğunu göstermek için içeriğini takas etmek istiyorum İki kabın, veya en değişkenler onlara diyelim, Eğer bazı geçici depolama ihtiyacı yani içindekiler birini sahneye aslında takas yapabilirsiniz. Yani aslında, burada bu kaynak kodu yukarı C tam olarak temsilcisidir. Portakal suyu ve süt olsaydı b oldu, ve biz iki takas etmek istedim Eğer yaratıcı bir şey deneyebilirsiniz diğer içine bir dökülerek, ama muhtemelen olmaz özellikle de biter. Ve bu yüzden üçüncü bir fincan, çağrıyı kullanın o, kongre tarafından, T-M-P tmp ve içeriğini koymak OJ ki, sonra bir fincan takas, Sonra içine oj koymak Orijinal fincan, böylece tam olarak, elde Laura takas yaptım. Yani tam olarak yapalım. Beni go ahead ve açalım bu bir örnek kadar aslında hiçbir "denir Bu değil çünkü ", takas Düşündüğünüz gibi basitçe yapılabilir. Yani bu programda, fark Ben stdio.h, bizim eski dostumuz kullanıyorum. Ben prototip var , orada takas için hangi uygulanması en anlamına gelir muhtemelen aşağı aşağıda, ve görelim ana bu ne Program benim için yapacak. Ben ilk int x alır beyan on, ve Y, iki alır int. Yani oj gibi olanların düşünüyorum sırasıyla ve süt. Ve sonra ben sadece bir var printf x bu olduğunu söyleyerek ve y sadece bu yüzden can, bu görsel neler görüyorum. Sonra iddia printf var Ben iki takas ediyorum ve sonra bir çıktısını Onlar takas olduğunuzu iddia, ve ben tekrar x ve y çıktı. Yani buraya takas olduğu yer tam Laura ne yaptığını, ve biz gördüğümüz tam olarak ne Bir an önce ekran. Yani öncesinde gidelim ve fena halde hayal kırıklığına. Hiçbir takas yapın ve hiçbir takas çalıştırın, Burada çıktı yakınlaştırma. Giriş x ve y takas değiştirme, 2, 1 'dir. x hala 1 ve y hala 2. Yani olsa, açıkçası, bu görünüyor Tam daha teknik olsa, gibi, Laura yaptıklarını, işe görünmüyordu. Peki neden? Peki, ne zaman çıkıyor böyle bir program yazmak Bu hem ana, burada vurgulanan etti ve daha sonra başka bir fonksiyon, takas gibi, Burada vurgulanan hangi dünya, aramalar gibi küçük bir şey görünüyor Bir an önce bu tepsiler. Ne zaman ana çağrılan ilk, Bu işletim sistemi soran gibi herhangi bir yerel hafıza biraz x ve y gibi ana vardır değişkenler, ve onlar orada bitirmek. Ana aramalar takas ve ana ama eğer İki argüman, a ve b takas geçer, portakal suyu ve süt, o gibi değil portakal suyu ve süt teslim Laura. Bir bilgisayar ne yapar, öyle portakal suyu kopyalarını geçer Böylece Laura süt ve kopya, Peki bu tepsinin içinde sonuçta var değer bir ve iki, ya da OJ olduğunu ve süt, ancak kopya bunların, öyle ki, bu noktada hikaye, orada Bu kasetlerin her OJ ve sütüdür. Bir ve iki var Bu tepsiler her, ve takas fonksiyonu gerçekten çalışıyor. İçinde onları takas ediyor İkinci üstteki tepsi, ancak değiştirme, herhangi bir etkisi yoktur. Ve sadece bazı dayalı biz ettik temel ilke önce konuştuk, ve gerçekten Sadece birkaç dakika önce, ne Değişen neden açıklayabilir swap içinde a ve b olsa bile, x ve y üzerinde hiçbir etkisi yoktur Ben takas fonksiyonu x ve y geçti. Burada anahtar kelime nedir basitçe açıklayabilir? Ben burada duydum düşünüyorum? HEDEF KİTLE: Dönüş. HOPARLÖR 1: İade? Döndürmez. Diğer biri ile gidelim. Bu da ne? İZLEYİCİ: [duyulamaz]. HOPARLÖR 1: Tamam, bu yüzden olabilir return-- Hikayenin dönüş çalışması, ama daha basit bir açıklaması var. HEDEF KİTLE: Kapsam. HOPARLÖR 1: Kapsam. Ben kapsamını alacağım. Peki kapsamı, nereye hatırlıyorum Bizim x ve y ilan etti. Onlar içinde bildirilen konum Ana sağ burada. a ve b, bu arada, olan etkin bir şekilde beyan swap içinde, oldukça içinde kaşlı ama hala swap genel alanında. Böylece gerçekten, a ve b, Sadece bu tepsiye içinde var Annenberg bulunan bu İkinci kod yığın. Yani biz aslında kopya değişiyor, ama konum gerçekten tüm bu yararlı değil. Yani bir göz atalım Bu biraz daha düşük seviyede. Ben geri gidiyorum Kaynak Rehberi, ve ben ilk gidiyorum Burada yakınlaştırmak ve sadece Ben bu değilim onaylamak için büyük terminal penceresi, Program hala böyle davranıyor. Şimdi bu varsayalım kasıtlı değildir. Açıkçası ben takas istedim iş, bu yüzden bir hata gibi hissediyor. Şimdi bir ekleme başlayabileceğini Benim kod printf yılların sürü, , buraya y x üzerinde baskı Burada, burada, burada b. Ama açıkçası, muhtemelen ne var Eğer birkaç hafta için yapıyorum Şimdi, mesai saatleri içinde ve evde çalışırken bazı hatalar bulmaya çalışıyor psets üzerinde. Değil zaten Ama eğer, göreceksiniz Bu sorun, üç tanıştırıyor set GDB adında bir komuta, nerede GDB, GNU debugger, kendisi bir sürü vardır özellikler aslında can Bize durumları anlatmak Bu gibi ama daha zorlayıcı, sorunları çözmek ve hata bulmak. Yani bu yapacağım. Bunun yerine ./noswap, ben yerine değilim GDB ./noswap çalıştırmak için gidiyoruz. Diğer bir deyişle, ben çalıştırmak için gidiyorum benim program değil Bash, bizim yeni arkadaş Bugün. Ben çalıştırmak için gidiyorum benim içeride Program noswap denilen bu diğer program Bir hata ayıklayıcı olan GDB, hangi yardımcı olmak için tasarlanmış bir programdır bulmak ve hataları kaldırmak, insanların. Ben burada Run isabet Yani eğer, orada metin iğrenç bir miktar Eğer gerçekten okumak zorunda asla. Bu aslında bir oyalama var isteminden hangi Ben Kontrol-L vurmak için gidiyorum Orada üst kalkmak. Bu GDB istemi. Ben şimdi bu programı çalıştırmak istiyorsanız, Bugünün bu küçük hile levha olarak slayt çalıştırın ilk anlaşılacağı Biz tanıtmak anlamına geliyordu komutları. Ve ben sadece yazın gidiyorum GDB içinde burada koşmak, ve gerçekten de benim programı koştu. Şimdi bazı ek var Bu gibi ekran çıkışları, ama bu GDB sadece olmak anal var ve neler söylemek bizi. Gerçekten endişelenmenize gerek yok Şu anda bu detaylar hakkında. Ama gerçekten güzel ne Ben yaparsam GDB, bu again-- Kontrol-L gitmeme izin screen-- temizler önde ve tipi dolayısıyla "ana kırmak", Ben Enter vurduğunuzda, ne ayarı Bir kırılma noktası noswap.c denir, GDB olan hat 16, aslında benim programını anladım olduğunu, benim işlevi aslında. Şimdi için görmezden edeceğiz Bu ama bu adres var özellikle bu fonksiyonun anısına. Yani şimdi ben koşmak tipi zaman, Burada serin ne fark. Benim program satırı I sonları yürütmeye duraklatmak için GDB söyledi. Yani şimdi benim kodunu değiştirmek zorunda değilsiniz, Bazı printf 's eklemek onu derlemeniz, yeniden çalıştırın o, değiştirmek, bazı printf 's eklemek kaydetmek, onu yeniden derlemeniz, çalıştırın. Ben sadece benim program sayesinde yürüyebilir İnsan hızda adım adım adım, değil hız Intel iç tür de. Peki şimdi bu satırı fark Ben geri gitmek burada görünür, ve gedit benim programa, aslında olduğunu fark kod ilk satırı. Hat 16 gedit içinde var. Orada hat 16 GDB içinde var, ve hatta Bu siyah ve beyaz arayüz olsa neredeyse kullanıcı olarak ise dost, bu demektir Bu hat 16 idam edilmemiştir Henüz değil, ama o olmak hakkında. Yani gerçekten ben baskı yazarsanız x değil printf, sadece print x, Ben, sıfır bazı sahte değerini almak x henüz başlatılmamış çünkü. Eğer Yani, önümüzdeki yazın gidiyorum, ya da ben sadece önümüzdeki N, fantezi olmak istiyorum. Ama önümüzdeki şimdi, girin tipi zaman bu hat 17 geçer edin. Yani mantıklı, ben idam ettik hat 16 ve ben şimdi baskı x yazın Ben ne görmek gerekir? Bir. Ve şimdi bu kuşkusuz kafa karıştırıcı. 2 $, sadece bir fantezi yoludur eğer Daha sonra bu değere başvurmak istiyorum, Eğer "Dolar iki oturum." diyebilirsiniz Bir arka referans gibi. Ama şimdi, sadece görmezden. Ne ilginç ne olduğunu Eşittir işaretinin sağ tarafta. Ve şimdi yanında yine yazarsanız ve baskı y I 2 görmelisiniz. Ben de şimdi yazdırabilirsiniz tekrar x, ve açıkçası, Ben olarak biraz karıştı alıyorum eğer Ben neredeyim, ben liste için liste yazabilirsiniz ve sadece etrafında bazı bağlamda görmek nokta aslında kulüpler. Ve şimdi ben yazabilirsiniz Bir sonraki ve orada x 1'dir. Şimdi önümüzdeki yazın. Ah, y 2 olduğunu. Ve yine, bu kafa karıştırıcı GDB üretiminin çünkü Kendi çıkışı ile kaynaştı ediliyor. Ama tarafından akılda tutarsak ileri geri kodu bakarak veya yan dışarı atarken belki yan, sen olacak Gerçekten ben sadece görmek Benim program sayesinde atlama. Ama tam anlamıyla, sonra ne fark. İşte satır 22 var. Böylece hareketli, beni üzerine gidelim 23, ve ben şimdi, hala bir x yazdırın. Ve ben hala, şimdi y yazdırmak. Yani bu yararlı bir egzersiz değildir. Yani bu kokan edelim. Bana kadar geri dönelim Yine üst ve tipi çalıştırın. Ve bu programı söylüyor Bu ayıklanacak var Zaten başladı, başından itibaren başladı. Evet, yine bu yapalım. Ve bu sefer, gelecek yapalım Bir sonraki, sonraki, bir sonraki, bir sonraki, ama şimdi işler ilginçleşiyor. Şimdi adım istiyorum takas, bu yüzden bir sonraki yazmayın. Ben bunu fark şimdi adım yazın ve noswap.c hattına 33 beni atladı. Ben gedit geri giderseniz, satır 33 ne? Bu gerçek, ilk var swap içinde kod satırı. Hangi çünkü artık ben can, güzel tür etrafında karıştırmak ve meraklı olsun olarak orada ne gerçekten oluyor. Bana tmp yazdırmak edelim. Vay. Neden tmp bazı var deli, sahte çöp değeri var mı? HEDEF KİTLE: Bu başlatılmadı. HOPARLÖR 1: Bu başlatılmadı. Ve gerçekten de, bir program çalıştırdığınızda, Eğer bellek bir sürü verilen konum işletim sistemi tarafından, ancak herhangi bir değer başlatıldı değil, böylece ne olursa olsun bit sen o olsa bile, burada görme Bu deli büyük negatif sayı, sadece anlamına gelir Bu bu kalıntıları vardır RAM önceki bazı kullanım, Ben değil olsa bile kendimi henüz gerekli. Yani şimdi ben önde ve tipi gidiyorum Bir sonraki ve ben şimdi baskı tmp yazarsanız, Ben ne görmek gerekir? Ne olursa olsun bir değeri vardı, adil, ilk argüman x gibi ilk şey, geçirilen yani ve x, aynı olmalıdır, böylece yazdırmak tmp bana bir tane yazdırmak gerekir. Eğer sorun sette görürsünüz Peki Üç, GDB ile ilgili bir tür öğretici ama bu başlangıç ​​olduğunu biliyoruz Bir araç bir görünüm aslında olacak Eğer sorunları çözmeye yardımcı çok daha etkili. Sonuçta konum neler Çarşamba günü yapacağız Birkaç katmanları geri soyma başlar edilir ve bazı eğitim tekerlekleri kaldırmak. O şey denir dize o Biz bir süre kullandım yavaş yavaş o götürmek için gidiyoruz ve sizden hakkında konuşmaya başlamak bir şey daha ezoterik char * olarak bilinen, ama biz güzel bu yapmak için gidiyoruz ve yavaşça ilk başta, hatta işaretçiler olsa, dedikleri gibi, bazı yapabilirsiniz eğer istismar çok kötü şeyler, küçük bir claymation bakarak Bizim arkadaş Stanford Nick Parlante Üniversite, bilgisayardaki bir profesör Bu önizleme araya bilim Bu Çarşamba gelmek olduğunu ne. [VİDEO OYNATMA] -Hey, Binky. Uyanmak. Bu işaretçi eğlence zamanı. Ne o? Işaretçiler hakkında bilgi edinin? Ah, ne güzel! [SON VİDEO OYNATMA] HOPARLÖR 1: Bu Çarşamba günü sizi bekliyor. Size daha sonra göreceğiz. [VİDEO OYNATMA] -Ve Şimdi, Derin Düşünceler, DAV Farnham tarafından. -Neden C öğrenme >>? Neden A +? [KAHKAHA] [SON VİDEO OYNATMA]