>> [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]