[მუსიკის დაკვრა] დინამიკები 1: ყველა უფლება, ეს არის CS50, და ეს არის დაწყების კვირაში ოთხი, და როგორც თქვენ შეიძლება გსმენიათ ან წავიკითხე, მსოფლიოში უკვე დამთავრებული. აპირებს მთელი ინტერნეტ უკვე ცოდნის და ინფორმირებულობის შეცდომა პროგრამაში, პროგრამირების ენა მოუწოდა Bash. ეს უკვე შესანიშნავად ბრენდირებული როგორც Shellshock, ან Bash კარით, მაგრამ ასეთი სტატიების არ ყოფილა იშვიათია. და სინამდვილეში, ბევრი მათგანი მოუტანს უკან მოგონებები Heartbleed, რომელიც თქვენ შეიძლება არ შეამჩნია დააჭიროთ უკან გასულ გაზაფხულზე, რომელიც იყო ასეთივე საკმაოდ დრამატულია. ახლა იმ თქვენ აქ დღეს, რამდენი გაქვთ, მაშინაც კი, თუ თქვენ არ მესმის რა ეს ყველაფერი, გამიგია Shellshock? ყველა უფლება, და რამდენი კომპიუტერები, რომლებიც სოციალურად დაუცველ? OK, არ უნდა იყოს შორს, უფრო მეტ ხელს, up ახლა, იმის გამო, ვნახოთ. მოდით შევხედოთ, თუ რა არის უკვე მიმდინარეობს მედიაში და შემდეგ აუხსნას, რომ ცოტა აქ ჩვენთვის ტექნიკურად. დინამიკები 2: უსაფრთხოების ექსპერტები გააფრთხილა, რომ სერიოზული ხარვეზი იქნებოდა იყოს იმის შესახებ, იმოქმედებს ასობით მილიონობით მსოფლიოში ვებგვერდი მომხმარებლებს. ასე რომ, რა არის შეცდომა, რომელიც უკვე გახმოვანებული Shellshock და რას აკეთებს ის? ასევე, Shellshock ასევე ცნობილია, როგორც Bash bug, პროგრამული იყენებს. ჰაკერები იყენებენ ვირუსის სკანირების დაუცველი სისტემები გაშვებული Linux და Unix ოპერაციული სისტემები და შემდეგ აინფიცირებს მათ. Bash არის ბრძანების shell. ეს საშუალებას აძლევს მომხმარებლებს, გასცეს ბრძანებები დაიწყოს პროგრამები და თვისებები ფარგლებში პროგრამული უზრუნველყოფა აკრეფით ტექსტი. ეს, როგორც წესი, პროგრამისტები და არ უნდა იყოს ღია უფრო ფართო მსოფლიოში, თუმცა Shellshock ცვლილებები, რომ. ასევე, worringly, ზოგიერთი ანალიტიკოსი გააფრთხილოს იგი შეიძლება იყოს უფრო დიდი საფრთხე, რადგან Shellshock საშუალებას იძლევა სრულ კონტროლის ინფიცირებული მანქანა, იმის გამო, რომ Heartbleed ნებადართულია მხოლოდ ჰაკერების ჯაშუშური კომპიუტერი. ეს იმდენად სერიოზული, რომ ის უკვე შეაფასა 10 out of 10 სიმძიმის ეროვნული დაუცველობის მონაცემთა ბაზა. 2/3 ყველა ვებ სერვერებს, რომლებიც რისკი, მათ შორის ზოგიერთი Mac კომპიუტერი. ასევე, დარწმუნდით, თქვენ Patch თქვენი სისტემების ახლა. ვინმეს მასპინძლობს ნახვა გაშვებული დაზარალებული ოპერაციული სისტემები უნდა მიიღონ ზომები, რაც შეიძლება მალე. ყველას, ვინც ვერ ახერხებს ის უნდა გამოიყურებოდეს მათი მონიტორინგის და ვებ განაცხადის ეკრანები, რათა გამოიყურებოდეს out ნებისმიერი თავდასხმები. დინამიკები 3: ყველაზე ცუდი რამ რაც შეიძლება მოხდეს არის რომ ვინმემ დაწეროს კოდი, რომელიც რაც ავტომატურად წავიდეს და ეძებოს ინტერნეტით და იმოქმედებდა ყველა ამ კომპიუტერებს. და კიდევ ისინი, რომ, ასევე, ყველაზე უარესი, რაც მათ შეეძლოთ, უბრალოდ წაშლის, ყველაფერი, ან დახურეს საიტები ქვემოთ. ამიტომ ვერ ვხედავ დაზიანება საწყისი თვალსაზრისით, სადაც ჩვენ არ გვაქვს მავნე ადამიანი ვინც უბრალოდ გადაწყვეტს, გამოიწვიოს Havoc მიერ შემოტანა სისტემების ქვემოთ ან წაშლის ფაილი, და რამ, როგორიცაა, რომ. დინამიკები 2: ზოგი ამბობს, რომ ეს არის ერთ ერთი ყველაზე რთული გავზომოთ შეცდომებს წლის განმავლობაში, და შეიძლება კვირით ან თუნდაც თვეში, რათა დადგინდეს მისი საბოლოო გავლენა. დინამიკები 1: ასე რომ, ყველა, რომ მართალია, მაგრამ სასაცილო ის არის,, თითქმის ყველა გამოსახულება უბრალოდ დაინახა, გარდა შესაძლოა კლავიატურის, არაფერი აქვს ერთად შეცდომის გარეშე. სერვერები და მავთული და ა.შ., ეს ერთგვარი tangentially დაკავშირებული, მაგრამ ძირითადი ეს რეალურად საკმაოდ ნაცნობი რა ხდება აქ. ფაქტობრივად, ნება მომეცით წასვლას ჩვენი CS50 ელექტრო მოწყობილობების. ნება მომეცით წავიდეთ წინ და მაქსიმალურად ტერმინალის ფანჯარაში აქ. და შენ არ იყენებს ამ, ან ეს ჩანერგილი მობილური მისი, in gedit რათა დაწეროს პროგრამები, ტიპის ბრძანებები, და ა.შ., და ეს არის რეალურად, და აქვს უკვე კვირების განმავლობაში, Bash, B-A-S-H. ეს არის Bourne ისევ ჭურვი, რომელიც არის მხოლოდ ლამაზი გზა ამბობდა, ეს არის პროგრამა, რომელიც აქვს მოციმციმე სწრაფი, პრაქტიკულად, იქ რომ ზის ელოდება შეყვანის თქვენთვის. და ეს ბრძანება ინტერფეისის მეშვეობით, რომელიც თქვენ ბიჭები არ იქნა გაშვებული ბრძანებები და საბოლოოდ შედგენა და შემდეგ გაშვებული პროგრამები. მაგრამ Bash ასევე პროგრამირების ენის შემდეგ აზრი. თქვენ იცით, რომ არსებობს ბრძანებები, როგორიცაა CD და ls და ასევე clang და სხვები, მაგრამ თქვენ შეგიძლიათ განსაზღვროთ თქვენი საკუთარი ბრძანებები ახორციელებს მათ Bash. ახლა ჩვენ არ ვაპირებთ წასვლას დიდი დეტალურად როგორც Bash პროგრამირების ენა, მაგრამ ვიცი, რომ, მაგალითად, ამ ეტაპზე, არ არსებობს ბრძანება მოუწოდა "Hello". ასე რომ, ეს შეიძლება იყოს ნაპოვნი ერთი ასეთი პაკეტები. ეს არ არის დამონტაჟებული ჩემი კომპიუტერი. სთხოვეთ თქვენს ადმინისტრატორს. მაგრამ თუ მინდა, რომ იყოს პროგრამა ე.წ. "Hello" Bash ან ჩემი დროული, მე რეალურად შეუძლიათ სინტაქსი, რომ არის საკმაოდ მოსწონს C. ეს არ არის იგივე, მაგრამ ეს გამოიყურება საკმაოდ მსგავსი ფუნქცია, თუმცა აკლია ზოგიერთი დეტალი. არაფერი არ მოხდება, მაგრამ ახლა თუ მე აკრიფოთ "Hello" თქვენ შეგიძლიათ რეალურად დაწეროს პროგრამა კი არა, C, არა Java, არა სხვა პროგრამირების ენის, მაგრამ Bash თავად. ახლა გასაღები აქ არის ის, რომ მე დავწერე მომხმარებლის სახელი მინდოდა, რათა ამ ახალი ბრძანება, და ფრჩხილებში არიან ასევე სიმბოლური ეს როგორც ფუნქცია. როგორც განზე, ასევე შეგიძლიათ გააკეთოთ გართობა რამ, და, სხვათა შორის, on Mac OS, ეს არის პროგრამის მოუწოდა Terminal. ის მოდის ჩაშენებული ვინმეს კომპიუტერი, რომელსაც აქვს Mac ამ ოთახში, და შეგიძლიათ გააკეთოთ მსგავსი რამ Mac OS, მაგრამ შეიძლება უფრო მიღმა. და ეს არის პატარა tangential, მაგრამ ეს ერთგვარი გართობა. მე შეახსენა ამ დილით, როდესაც ვფიქრობ ამ გზით, პატარა თამაში მე უნდა ითამაშოს ერთი CS50 ყოფილი TFs რომლის დროსაც ნებისმიერ დროს, იგი ფეხით დაშორებით მისი კლავიატურა მისი ეკრანზე გახსნილია, მინდა შეასრულოს ბრძანება მსგავსი რამ "მიესალმე." და ახლა ნებისმიერ დროს იგი დაბრუნდა თავის კლავიატურის შემდეგ I განბაჟებული ეკრანზე და იგი ზის ქვემოთ, ვცდილობთ გავაკეთოთ ზოგიერთი მუშაობა, მიუთითეთ შინაარსი მისი დირექტორიაში [აუდიო აღწარმოების] -Hello. Hello. დინამიკები 1: ასე, რომ სამართლიანობა, ეს არ იყო რეალურად "Hello". ეს, ჩვეულებრივ, რაღაც უფრო akin რომ that-- [აუდიო აღწარმოების] -Beep. დინამიკები 1: --that I would-- ასე რომ მისი კომპიუტერი ლანძღავთ მას ნებისმიერ დროს, რეალურად კი დაჯდა კლავიატურაზე. და ძალიან სწრაფად მან figured out არ დატოვებს ეკრანზე გახსნილია. მაგრამ ეს მეტყველებს სახის სულელური გართობა, რომ თქვენ შეიძლება ჰქონდეს რაღაც Bash. მაგრამ ცოტა მეტი სერიოზული, დარწმუნებული უნდა იყოს, ვიდრე, რომ. და ფაქტობრივად, ეს არის ერთ ერთი ყველაზე ყველაზე საშიში და ხანგრძლივი შეცდომები რომ ნამდვილად მოხვდა მსოფლიოში გლობალურად. ეს შეცდომა უკვე გარშემო დაახლოებით 20 წლის განმავლობაში, და თქვენ უნდა დაარტყა მხოლოდ მომენტში მისი ნათესავი სიმარტივე. ასე რომ, ეს არის წარმომადგენლობითი ბრძანება, რომ თუ ფლობდეს Mac, ფაქტიურად ახლა როდესაც თქვენ გაქვთ თქვენი სახურავი ღიაა, შეგიძლიათ ცდილობენ აკრეფით, რომ პროგრამა მოუწოდა Terminal. Terminal მზადების პროგრამები Utilities-- ერთხელ, Windows წევრებს არ აქვთ ფიქრი ამ კონკრეტულ threat-- მაგრამ იმ თქვენ, Macs, შეგიძლიათ აკრიფოთ ამ შევიდა ფანჯარა, როგორიცაა მე აქ, და თუ აკრიფოთ რომ ამ პროგრამის წოდებული ტერმინალი, როგორც მე ახლა, თუ ხედავთ სიტყვა "დაუცველი" თქვენს კომპიუტერში არ არის დაუცველი ექსპლუატაცია. ახლა, რას ნიშნავს რეალურად? და ეს არის მართლაც ზოგიერთი საკმაოდ გიჟები სინტაქსი, მაგრამ მოდით მინიმუმ შემუშავებაა ზოგიერთი საინტერესო ასპექტები. ამიტომ არსებობს გარკვეული სინტაქსური რომელიც გამოიყურება ცოტა ნაცნობი, თუნდაც C და პროგრამირების უფრო ზოგადად. მე ვხედავ რაღაც მრგვალი, semicolons, curly braces, და ასეთი, მაგრამ აღმოჩნდება, რომ ეს სისულელე აქ ყვითელი არსებითად ფუნქცია რომ არაფერს არ აკეთებს. მსხვილი ნაწლავის საშუალებით არაფერი, და მძიმით იმას ნიშნავს, შეჩერება არაფერს აკეთებს. ასე რომ შიგნით ამ curly braces, ის ფაქტი, რომ მე აქვს თანაბარი მოაწეროს მარცხენა, ამ არსებითად ქმნის ბრძანება, ან ცვლადი, მოუწოდა x, და იმის, რომ ყვითელი ცოტა კოდი არსებობს. ეს შეიძლება იყოს რაღაც "ეხო Hello "ან" აცხადებენ, beep "ან რამე akin რომ. მაგრამ შეამჩნია, თუ თქვენი თვალები wander უფრო მარჯვნივ, არსებობს კიდევ ეს ხაზი, ვიდრე უბრალოდ ბოლომდე რომ მძიმით. "ეხო დაუცველი", და შემდეგ მიღმა, რომ იქ კიდევ უფრო. სხვა მძიმით, bash-C :. ასე მოკლედ, ამ ხაზი კოდი არის საკმარისია მყარი კომპიუტერი, რომელიც არის სოციალურად დაუცველი თავისსავე რომ გსურთ ამის გაკეთება, იმიტომ, რომ იქ შეცდომა Bash, რომლის დროსაც მიუხედავად იმისა, რომ Bash იყო უნდა შეწყვიტოს კითხულობს ხაზები ბრძანება უფლება არსებობს შემდეგ ყვითელი ტექსტი 20-plus წლის bug, Bash ფაქტობრივად კითხულობს მიღმა, რომ მძიმით და საკმაოდ ბევრი აკეთებს რა უთხრა. ასე რომ, რაც გულისხმობს რომ საბოლოო ჯამში? მე უბრალოდ განაცხადა "ეხო Hello" ან "ეხმიანება დაუცველი" მაგრამ რა, თუ თქვენ გააკეთეთ რამე რეალურად მუქარის, როგორიცაა rm -rf * რომელიც თქვენ შეიძლება არ ოდესმე აკრეფილი, და გულწრფელად, ალბათ, არ უნდა ძალიან მალე, იმიტომ, რომ თქვენ არ შეუძლია გააკეთოს ბევრი ზიანი მას. რატომ? rm აკეთებს იმას, რასაც, რა თქმა უნდა? შლის. * რას ნიშნავს? ყველა. ასე რომ, ეს ე.წ. ველური ბარათი, რაც იმას ნიშნავს, წაშლა ყველაფერი მიმდინარე დირექტორია. -r ხდება ნიშნავს რეკურსიული, რაც იმას ნიშნავს, თუ თქვენ მას წაშლის დირექტორია და შიგნით არსებობს არის სხვა ფაილი და სხვა საიტები, რეკურსიული ჩაყვინთვის შევიდა არსებობს და წაშლა ყველა, რომ. და -f არის ყველაზე უარესი მათ ყველა. რა რა -f ნიშნავს აქ? Force. ასე რომ აიძულოს საშუალებით, მაშინაც კი, თუ ეს არ არის ცუდი იდეა, ამის გარეშე მკარნახობდა შემდგომი დადასტურება. ასე რომ, თქვენ იცით, რომ ჩვენ სიცილისათვის ეს, მაგრამ გულწრფელად, მე, ალბათ, ჩაწერეთ ეს რამდენჯერმე დღეს, იმიტომ, რომ რეალობა არის ის, რომ უსწრაფესი გზა წაშლა მთელი bunch პერსონალის. მაგრამ მაშინაც კი, მე არ კეთდება გარკვეული ზიანი. მაგრამ თუ თქვენ შეასრულა კომპიუტერი შევიდა განსაზღვრის ზოგიერთი სულელური ცვლადი ან ფუნქცია მოუწოდა x, მაგრამ შემდეგ tricking კომპიუტერული სიკვდილით დაესაჯა საზღვრებს, რომ ფუნქცია, მიღმა, მძიმით, თქვენ შეიძლება მართლაც შეასრულა კომპიუტერი სიკვდილით დაესაჯა რაღაც rm -rf ან Email ბრძანება ან კოპირება. არაფერი ფაქტიურად შეგიძლიათ გააკეთოთ ერთად კომპიუტერი, თუ არა ის წაშლის ფაილი, შექმნა ფაილი, სპამერთა ვინმე, თავს დაესხნენ რამდენიმე სერვერზე დისტანციურად, თუ გამოთქმის ბრძანება, თქვენ შეგიძლიათ შეასრულა კომპიუტერული შევიდა აკეთებს, რომ. ახლა რა მაგალითი როგორ შეიძლება ამის გაკეთება? ასევე, არსებობს ბევრი კომპიუტერები ინტერნეტ გაშვებული Bash. ყველა ჩვენგანი Mac წევრებს, მათ შორის. ბევრი Linux სერვერები შორის მათ ასევე, და Unix სერვერები. Windows კვლავ იღებს შედარებით გამოეყვანა მოთმინებიდან თუ თქვენ დაყენებული სპეციალური პროგრამული უზრუნველყოფა. ახლა ბევრი სერვერები, for მაგალითად, აწარმოებს ვებ სერვერები, და, ფაქტობრივად, Linux, ალბათ, ყველაზე პოპულარული ოპერაციული სისტემა აწარმოებს კომპიუტერები ინტერნეტ რომ ემსახურება up ვებ გვერდები. ახლა, როგორც ვნახავთ, მოგვიანებით სემესტრში, როდესაც თქვენ აგზავნით მოთხოვნის თქვენი ბრაუზერი Chrome, Internet Explorer, whatever-- სერვერზე, გამოდის, რომ, მიუხედავად იმისა, თქვენ უბრალოდ აკრეფილი www.example.com, თქვენი ბრაუზერის აგზავნის გზავნილი რომ ცოტა უფრო arcane, მოსწონს ეს. მაგრამ შეამჩნია რაღაც უცნაური. პირველი ორი ხაზი მე არასოდეს მინახავს ადრე, მაგრამ ისინი არ გამოიყურება განსაკუთრებით საშიში. მაგრამ შეამჩნია რა მე მოპარული რომ მესამე ხაზი აქ. თუ ცუდი ბიჭი იყო, რათა შეტყობინების გაგზავნა ისევე როგორც ეს მის კომპიუტერში რომ დაუცველი Mac ან სოციალურად დაუცველი Linux სერვერზე, სასაცილო ის არის, რომ Bash, რომ უბრალო პატარა command prompt, ყველგან მყოფია და ხშირად გამოიყენება არსებითად შეასრულოს შინაარსი გაგზავნა, რომ ის იღებს. და ლოგიკა, თქვენ შეგიძლიათ შეასრულა სერვერზე, შესაბამისად, გაგზავნით რაღაც User-Agent, რომელიც, როგორც წესი, უნდა ვთქვა, სახელი თქვენს ბრაუზერში. User-Agent Chrome, User-Agent ინტერნეტი Explorer, User-Agent Firefox, ამ მხოლოდ თქვენი ბრაუზერის გზა საიდენტიფიკაციო თავად. მაგრამ თუ ცუდი ბიჭი ძალიან cleverly ამბობს, mm მმ, მე არ ვაპირებ გითხრათ, რა ჩემი ბრაუზერს, მე ნაცვლად აპირებს გამოგიგზავნით ამ cryptic ორიენტირებული რამ rm -rf * მას, თქვენ შეგიძლიათ სიტყვასიტყვით შეასრულა სოციალურად დაუცველი სერვერზე ინტერნეტში სიკვდილით დაესაჯა ზუსტად რომ იქ წაშლის ყველა ფაილი. და გულწრფელად ვამბობ, რომ ეს არ არის კიდევ უარესი ის. შეგიძლიათ არაფერი. თქვენ შეიძლება დაიწყოს განაწილებული უარის თქმის სამსახურის თავდასხმა თუ გააგზავნა ეს შეტყობინება მთელი კონა ვებ სერვერები შემდეგ კი ყველა მათგანი წარმოშობის, for მაგალითად, Harvard.edu სერვერები, და თქვენ შეგიძლიათ დაალაგოთ bang heck გარეთ მათ ქსელის ტრაფიკის, რომელიც იყო წინააღმდეგ შემთხვევაში, გამოიწვია ამ ცუდი ბიჭი. ასე რომ, მოკლედ, თითქმის ყველას ამ ოთახში, რომელიც ფლობს Mac დაუცველი ეს. ვერცხლის უგულებელყოფა არის, რომ თუ თქვენ გაშვებული სერვერზე თქვენი ლეპტოპი, და თუ თქვენ რეალურად კონფიგურაცია ეს საშუალებას მისცემს რაღაც SSH შევიდა, თქვენ რეალურად ემუქრება. ის დაუცველია, მაგრამ იქ არ არის ერთ ცდილობს თქვენი ლეპტოპი, ასე რომ თქვენ შეგიძლიათ სახის დანარჩენი დავრწმუნდი. თუმცა, Apple მალე განახლებას სარემონტო ამისთვის. მსოფლიოს Linux უკვე გაათავისუფლეს რიგი აფიქსირებს Fedora და Ubuntu და სხვა ვერსიებს Linux, და მართლაც თუ თქვენ აწარმოებს update 50 მოწყობილობის, თუნდაც ის, რომ ძალიან იქნება განახლებული და შესწორებული. მაგრამ ეს ძალიან არ აქვს მართლაც დაუცველი, იმიტომ, რომ თუ თქვენ tinkered ერთად ელექტრო და გააკეთა თქვენი ლეპტოპი საჯაროდ ინტერნეტში, რომელიც არ არის ჩვეულებრივ, თქვენ რეალურად ჯარიმა, რადგან საქართველოს firewalling და სხვა ტექნიკა. მაგრამ ეს უკიდურესი მაგალითია შეცდომის შესახებ რომ ჩვენ ცხოვრობდა ფაქტიურად 20 წლის განმავლობაში, და ვინ იცის, თუ ვინმე ყველა ამ დროს უკვე ცნობილია ამის შესახებ? და, ფაქტობრივად, ეს არის ერთ ერთი ფუნდამენტური გამოწვევები ჩვენ დავინახავთ შემდეგ სემესტრის უშიშროების, ის არის, რომ ისევე, როგორც რეალურ ცხოვრებაში, კარგი ბიჭები არიან მინუსი. იმისათვის რომ ცუდები, ჩვენ უნდა დარწმუნდით, რომ ყველა კარი დაკეტილია, რომ ყველა ფანჯარა არის უსაფრთხო, რომ ყველა პუნქტი შევიდა სახლში უსაფრთხო შენარჩუნება ცუდი ბიჭები out. მაგრამ რა ცუდი ბიჭი უნდა ამის გაკეთება რეალურად კომპრომისზე თქვენს სახლში და მოიპაროს თქვენ? იგი უბრალოდ უნდა იპოვონ unlocked კარით ჩამსხვრეული ფანჯრის, ან რაღაც გარდა იმ ხაზები, და ეს იგივე კომპიუტერის უსაფრთხოება. ჩვენ შეგვიძლია დავწეროთ მილიონობით ხაზები პროგრამული კოდი და გაატაროთ ასობით ან ათასობით საათი ცდილობს სწორი, მაგრამ თუ მხოლოდ ერთი შეცდომა სისწორე, თქვენ შეგიძლიათ განათავსოთ მთელი სისტემა და მართლაც, ამ შემთხვევაში, მთელი ინტერნეტ და მსოფლიოს რისკი. ასე რომ, თუ გსურთ შეიტყოთ უფრო მეტი ამ, ამ URL აქ. არ არსებობს აუცილებლობა action დღეს თუ თქვენ მათ შორის, უფრო კომფორტული რომ უკვე გაშვებული თქვენი საკუთარი ვებ სერვერზე, ამ შემთხვევაში თქვენ უნდა, ფაქტობრივად, პროგრამული უზრუნველყოფის განახლება. და ესეც სათაური სიტყვის და ახლა ქაღალდი, რომ ჩვენ უკავშირდება შესახებ რა თქმა უნდა ნახვა დღეს. ეს იყო თანამემამულე სახელად კენ ტომპსონი, რომელიც იყო მიღების ძალიან ცნობილი ჯილდო კომპიუტერულ მეცნიერებაში, და მან ამ სიტყვის რამდენიმე წლის წინ, ძირითადად, ამ თემაზე. ითხოვს ეგ კითხვა, უნდა ნამდვილად ნდობა, საბოლოო ჯამში, პროგრამული უზრუნველყოფა თქვენ მიეცა? მაგალითად, ჩვენ გვაქვს ყველა წერდა პროგრამების, და ჩვენ შედგენა მათ Clang. და თქვენი ცოდნა, თქვენ წერილობითი ნებისმიერი პროგრამების CS50 სადაც არ არის უკან კარი ჯიშები, არსებობს გზა რომ ცუდი ბიჭი, თუ გაშვებული პროგრამა, შეიძლება მეტი თქვენი კომპიუტერი? ალბათ, არა? Mario და Greedy და საკრედიტო. ეს არის ყველა საკმაოდ პატარა პროგრამებს. ნეტავ უნდა იყოს საკმაოდ ცუდი, თუ თქვენ ნამდვილად გააკეთა თქვენი მთელი კომპიუტერი დაუცველი დაწერის შემდეგ 10 ან 20 ხაზი კოდი, ან თუნდაც იცის ზოგიერთი უსაფრთხოების რისკები. ახლა კი ვიტყვი, რომ facetiously, მაგრამ ჩვენ ვაპირებთ, რომ დღეს ამ კვირაში ეს, ფაქტობრივად, მართლაც, მართლაც ადვილი უნდა იყოს ცუდი და კიდევ მოკლე პროგრამები დაუცველი. მაგრამ ახლა, მინიმუმ, გააცნობიეროს რომ კითხვა მიმდინარეობს სთხოვა აქ არის Clang in შემდგენელი. რატომ არ ჩვენ უკვე ვაღიარებთ Clang ბოლო ორი ან სამი კვირის? ვინ არის იმის თქმა, რომ ვინც წერდა Clang არ აქვს "თუ" მდგომარეობა იქ რომ არსებითად გაუკეთეს რამდენიმე zeros და ადამიანებს ყველა პროგრამა, რომ იგი ადგენს რომ მისცეს ან მისი ხელმისაწვდომობის თქვენს კომპიუტერში როდესაც თქვენ ეძინა და თქვენი ლეპტოპი სახურავი ღიაა და თქვენი კომპიუტერის გაშვებული? არა? ჩვენ გვაქვს ამ სახის პატივი სისტემის სწორი ახლა, სადაც ჩვენ გვწამს, რომ Clang არის legit. ენდობით, რომ ელექტრო მოწყობილობების არის legit. ენდობით, რომ ფაქტიურად ყველა პროგრამა თქვენს Mac ან PC არის სანდო. და, როგორც ეს მარტივი შეცდომის ვარაუდობს, მაშინაც კი, თუ ეს არ არის მავნე, ეს აბსოლუტურად არ სავარაუდოა, რომ იყოს საქმე. ასე რომ თქვენ უნდა იყოს შეშინებული, როგორც ჯოჯოხეთი. გულწრფელად ვამბობ, არ არსებობს მარტივი გამოსავალი ამ სხვა არა ერთგვარი საზოგადოებრივი შეგნების მზარდი კომპლექსურობის ჩვენ ვაშენებთ თავზე ჩვენი კომპიუტერული სისტემების, და როგორ უფრო დაუცველი ჩვენ შეიძლება ძალიან კარგად იქნება. ახლა რომ თქვა, Breakout. ასე Breakout არის პრობლემა მითითებული სამი და Breakout არის თამაშის yesteryear რომ თქვენ ალბათ გახსოვთ, მაგრამ ჩვენთვის პრობლემა კომპლექტი, სამი, ეს საშუალებას გვაძლევს მიიღოს რამ up მაღალი დონის ასე რომ, როდესაც ჩვენ წერილობით პროგრამებს, კი ტერმინალის ფანჯარაში, როგორც ეს, ჩვენ შეგვიძლია რეალურად აწარმოებს, საბოლოო ჯამში, გრაფიკული პროგრამები, განსხვავებით, ჩვენ გვქონდა ხელმისაწვდომობის, Scratch. ასე რომ, ეს არის პერსონალის განხორციელების Breakout, რომელიც მხოლოდ ამ აგურის breaking თამაში, რომ თქვენ გადაადგილება თქვენი paddle უკან და მეოთხე, და თქვენ მოხვდა ბურთი იმ პირთა მიმართ, ფერადი აგური up დაბრუნება. ასე რომ, ეს მოგვიყვანეთ სახის დაბრუნება, სადაც ჩვენ შევძელით, რომ ძალიან სწრაფად ერთად Scratch, და ახლა C, ახორციელებს საკუთარი გრაფიკული მომხმარებლის ინტერფეისი. მაგრამ უფრო მეტიც, ეს პრობლემა კომპლექტი წარმოადგენს პირველ რომელშიც ჩვენ ვაძლევთ თქვენ bunch of კოდი. და რეალურად, მე მოუტანს გამოკვეთილ ყურადღებას, რადგან განსაკუთრებით იმ ნაკლებად კომფორტული, ამ პრობლემა კომპლექტი, მინიმუმ, ერთი შეხედვით, აპირებს იგრძნონ ჩვენ აღებული ეს მაღალი დონის. იმიტომ, რომ ჩვენ, თქვენ, ზოგიერთი ძიების და დახარისხება პრობლემები pset, რამოდენიმე კოდი რომ ჩვენ წერდა, და რამოდენიმე კომენტარი რომ ვთქვათ, "ამის გაკეთება", სადაც თქვენ უნდა შეავსონ ბლანკები. ასე რომ, არ არის ძალიან საშიში, მაგრამ ეს არის პირველი შემთხვევა ჩვენ გადაცემის თქვენ კოდი, რომ თქვენ უნდა პირველად წავიკითხე, მესმის, და შემდეგ დაამატოთ და შეავსოთ იგი. და შემდეგ Breakout, ჩვენ ვაპირებთ, რომ გავაკეთოთ იგივე, გაწვდით რამდენიმე ათეული ხაზები კოდი, რომელიც, სიმართლე გითხრათ, გაძლევთ ბევრი ჩარჩოს თამაში მაგრამ შეჩერება მოკლე განხორციელების აგური და ბურთი და paddle, მაგრამ ჩვენ განხორციელება სხვა ფუნქციები. და კიდევ, რომ ერთი შეხედვით, კიდევ ერთხელ, მით უმეტეს, თუ ნაკლებად კომფორტული, შესაძლოა, როგორც ჩანს, განსაკუთრებით შემაშფოთებელი და ფიქრობთ, რომ ამდენი ახალი ფუნქციები თქვენ უნდა გადაიტანოთ თქვენი აზრით გარშემო, და რომ ეს ასეა. მაგრამ გახსოვდეთ, ეს საკმაოდ მოსწონს Scratch. შანსი თქვენ არ გამოიყენონ ყველა თავსატეხი ცალი Scratch. შანსი თქვენ არ აღელვებს, რომ გადაიტანოთ თქვენი აზრით გარშემო ყველა მათგანი იმიტომ, რომ ყველა დასჭირდა სწრაფი შეხედვით უნდა გვესმოდეს, რა, რომ ის, რაც მე შემიძლია გავაკეთო რომ თავსატეხი ცალი. და მართლაც, რომ პრობლემა კომპლექტი 3 spec, ჩვენ აღვნიშნო თქვენ იმ დოკუმენტაციას, რომელიც ხელს წარმოგიდგინოთ ახალი ფუნქციები, და ბოლოს, პროგრამირება აშენებს გამოიყენოთ. პირობები, მარყუჟების, ცვლადები და ფუნქციები იდენტური იქნება ის, რაც ჩვენ ვნახეთ დღემდე. ასე რომ, რა თქმა უნდა, ის, რაც ჩვენ მივცემ თქვენ გარკვეული ნიმუში კოდი, რომელიც საშუალებას გაძლევთ შექმნათ window რომ ძალიან არ განსხვავდება ამ, და საბოლოოდ ჩართოთ იგი რაღაც მსგავსი. ასე რომ ისარგებლოს CS50, განხილვა საათებში და მეტი, და ნუგეში ის ფაქტი, რომ ოდენობით კოდი თქვენ უნდა დაწეროს რეალურად არ არის ყველა, რომ ბევრად. პირველი გამოწვევა არის ის, acclimate თავს ზოგიერთი კოდი ჩვენ წერილობით. ნებისმიერი კითხვები pset3, Shellshock, ან სხვაგვარად? აუდიტორია: თითქოს გადის Breakout რომ კოდი, თითქმის ობიექტზე ორიენტირებული სტილი, მაგრამ ვფიქრობდი, რომ C იყო ობიექტზე ორიენტირებული პროგრამა. დინამიკები 1: კარგი კითხვა. ასე რომ, გადახედეთ განაწილების კოდი, კოდი ჩვენ წერდა pset3, მათთვის, ვინც იცნობს, ის ჰგავს ეს პატარა ობიექტზე ორიენტირებული. მოკლე პასუხი არის, ის არის. ის დაახლოებას, თუ როგორ შეიძლება გავაკეთოთ ობიექტზე ორიენტირებული კოდი გამოყენებით ენის მსგავსად C, მაგრამ ეს ჯერ კიდევ საბოლოოდ პროცედურული. არ არსებობს მეთოდები შიგნით ცვლადები, როგორც თქვენ. მაგრამ ეს არის თქვენში, რომ. და ჩვენ ვხედავთ, რომ ფუნქცია ერთხელ როდესაც ჩვენ ვიღებთ PHP და JavaScript დასასრულს სემესტრში. მაგრამ ახლა, ვფიქრობ, რომ ეს მინიშნება რა მოვა. კარგი კითხვაა. ყველა უფლება. ასე რომ შერწყმა დალაგების, თუ რამდენად ჩვენ მარცხენა რამ ბოლო დროს. და შერწყმა დალაგების იყო მაგარი გრძნობა, რომ ეს იმდენად სწრაფად, მინიმუმ საფუძველზე ზედაპირული ტესტები ჩვენ გავაკეთეთ გასულ კვირას, ვიდრე, ვთქვათ, bubble დახარისხების, შერჩევის დალაგების, Insertion დალაგების. და რა იყო სუფთა ესეც მხოლოდ როგორ მოკლედ და cleanly შეგიძლიათ გამოხატვა. და რა მივიღეთ ამბობენ, რომ ეს იყო ზედა შეკრული გაშვებული დრო შერწყმა დასალაგებლად? ჰო? აუდიტორია: N შესვლა n? დინამიკები 1: N შესვლა N, უფლება. N შესვლა n. და ჩვენ დავბრუნდებით რა, რომ ნამდვილად ნიშნავს, ან სად რომ მოდის, მაგრამ ეს იყო უკეთესი გარდა იმისა, რაც ქრონომეტრაჟი ჩვენ ვნახეთ ბუშტი შერჩევა და Insertion დალაგების? ისე N კვადრატში. n კვადრატში უფრო დიდია, ვიდრე ეს, და მაშინაც კი, თუ ეს არ არის აშკარაა, ვიცი, რომ log N მცირეა n, ასე რომ, თუ n-ჯერ რაღაც პატარა, ვიდრე n, ეს იქნება ნაკლები N კვადრატში. ეს ცოტა ინტუიცია არსებობს. მაგრამ ჩვენ გადახდილი ფასი ამ. ეს იყო უფრო სწრაფად, მაგრამ თემა რომ დაიწყო წარმოშობა გასულ კვირას ამ tradeoff. მე მივიღე უკეთესი შესრულება დროის ბრძენი, მაგრამ რა არც მე უნდა დაიხარჯოს სხვა მხრივ, რათა მივაღწიოთ, რომ? აუდიტორია: Memory. დინამიკები 1: ამბობენ, რომ კიდევ ერთხელ? აუდიტორია: Memory. დინამიკები 1: მეხსიერება, ან ფართი ზოგადად. და ეს არ იყო სუპერ ცხადია, ჩვენს ადამიანებში, მაგრამ გავიხსენოთ, რომ ჩვენი მოხალისეები იყო სტეპინგზე ველით და აძლიერებს უკან თითქოს არ მასივი აქ, თითქოს, არსებობს მეორე მასივი აქ, რომ შეეძლო, იმიტომ, რომ ჩვენ საჭირო ადგილას შერწყმა იმ ეგ. ჩვენ ვერ მხოლოდ სვოპ მათ ადგილას. ასე რომ შერწყმა დალაგების ბერკეტები მეტი სივრცე, რომელიც ჩვენ არ გვჭირდება სხვა ალგორითმები, მაგრამ თავდაყირა არის, რომ ის ბევრად უფრო სწრაფად. და გულწრფელად, რეალურ სამყაროში სივრცე ამ days-- ოპერატიული მეხსიერება, ხისტი დისკი სივრცეში შედარებით იაფია, და ისე, რომ არ არის აუცილებლად ცუდი რამ. ასე რომ, მოდით მიიღოს სწრაფი შევხედოთ, პატარა უფრო მეთოდურად, რაც ჩვენ გავაკეთეთ და ამიტომ განაცხადა, რომ მას N შესვლა n. ასე რომ, აქ რვა ნომერს და რვა მოხალისეები გვქონდა ბოლო დროს. და პირველი, რაც შერწყმა Sort გვითხრა, რომ ამის გაკეთება, რა ხდება? აუდიტორია: დაიყოს ორი. დინამიკები 1: ამბობენ, რომ კიდევ ერთხელ? აუდიტორია: დაიყოს ორი. დინამიკები 1: დაიყოს ორ, მარჯვნივ. ეს არის ძალიან თქვენში სატელეფონო წიგნი, გათიშე და დაიპყროთ უფრო ზოგადად. ასე რომ, ჩვენ შევხედე მარცხენა ნახევარში. და შემდეგ კიდევ თქმით, ერთგვარი მარცხენა ნახევარში ელემენტები, რა მივიღეთ შემდეგი ვთქვა? დასალაგებლად მარცხენა ნახევარში მარცხენა ნახევარი, რომელიც საშუალებას გვაძლევს, შემდეგ გამყოფი ორი, ფოკუსირება ოთხი და ორი. როგორ დასალაგებლად სია ახლა, ყვითელი, ზომა ორი გამოყენებით შერწყმა დალაგება? კარგად დაყოფის ის ნახევარზე, და დასალაგებლად მარცხენა ნახევარში. და ეს იყო, სადაც ყველაფერი ძალიან ცოტა სულელური მოკლედ. როგორ დასალაგებლად სია რომ საქართველოს ზომა ერთი, როგორც ეს ნომერი ოთხი აქ? ეს დახარისხებული. თქვენ გაკეთდეს. მაგრამ შემდეგ როგორ დასალაგებლად სია ზომა, როდესაც ის ნომერი ორი? ისე, იგივე, მაგრამ ახლა რა იყო მესამე და გადამწყვეტი შერწყმა დალაგება? თქვენ ჰქონდა შერწყმა მარცხენა ნახევარი და მარჯვენა ნახევარში. და კიდევ ჩვენ რომ, ჩვენ შევხედე ოთხი, ჩვენ შევხედე ორი. ჩვენ გადავწყვიტეთ, ყველა უფლება, ცხადია, ორი მოდის პირველი, ამიტომ ჩვენ ორი თავის ადგილი, მოჰყვა ოთხი. და ახლა თქვენ უნდა სახის გადახვევა, და ეს არის ერთგვარი მახასიათებელი ალგორითმი, როგორიცაა შერწყმა დალაგება, გადახვევა მეხსიერებაში. რა იყო შემდეგი ხაზი ამბავი? რა უნდა იყოს აქცენტი მომავალი? მარჯვენა ნახევარში, მარცხენა ნახევარი, რომელი ექვსი და რვა. ნება მომეცით უბრალოდ დახევას მეშვეობით გარეშე belaboring წერტილი ძალიან ბევრი. ექვსი და რვა, მაშინ ექვსი არის დახარისხებული, რვა დალაგებულია. შერწყმა მათ ერთად, როგორც, რომ, და ახლა შემდეგი ნაბიჯი , რა თქმა უნდა, დასალაგებლად მარჯვენა ნახევარში პირველი ნაბიჯი ამ ალგორითმი. ასე რომ, ჩვენ ფოკუსირებული ერთი, სამი, შვიდი, ხუთი. ჩვენ შემდეგ ფოკუსირება მარცხენა ნახევარში. მარცხენა ნახევარში, რომელიც, მარჯვენა ნახევარში რომ, შემდეგ შერწყმა ერთ და სამი. შემდეგ მარჯვენა ნახევარში, შემდეგ მარცხენა ნახევარი , მაშინ მარჯვენა ნახევარში იგი. შერწყმის, და ახლა რა ნაბიჯი რჩება? შერწყმა დიდი მარცხენა ნახევარში და დიდი მარჯვენა ნახევარში, ასე რომ ერთი მიდის down იქ, შემდეგ ორი, სამი, მაშინ ოთხი, მაშინ ხუთ, მაშინ ექვსი, მაშინ, შვიდი წლის შემდეგ რვა. ასე რომ, ახლა რატომ არის ეს საბოლოო ჯამში გამოვლენა, მით უმეტეს, თუ n და logarithms მეტი ზოგადად საკმაოდ გაქცევა, მინიმუმ ბოლო მეხსიერება? ყურადღება მიაქციეთ, სიმაღლე ამ რამ. ჩვენ გვქონდა რვა ელემენტები, და ჩვენ იყოფა ეს ორი, ორი, ორი. ასე რომ შედით ბაზაზე ორი რვა გვაძლევს სამი. და მერწმუნეთ, რომ თუ ცოტა ბუნდოვანი იყო. მაგრამ შეხვიდეთ ბაზის ორი რვა არის სამი, ამიტომ, ჩვენ გავაკეთეთ სამი ფენების შერწყმა. და როდესაც ჩვენ შეუერთდა ელემენტები, რამდენი ელემენტები ჩვენ არ შევხედოთ თითოეული ამ სტრიქონების? სულ n, არა? იმის გამო, რომ შერწყმა ყველაზე ზედიზედ, მიუხედავად იმისა, რომ ჩვენ ეს გავაკეთეთ მცირედი, ჩვენ საბოლოოდ შეეხო ყველა ნომერი ერთხელ. და მეორე ზედიზედ, შერწყმა იმ სიები ზომა ორი, ჩვენ გვქონდა შეეხოთ თითოეულ ელემენტს ერთხელ. და მაშინ აქ ნამდვილად აშკარად ბოლო row, ჩვენ გვქონდა შეხება თითოეული იმ ელემენტები ერთხელ, მაგრამ მხოლოდ ერთხელ, ასე ღირს, ჩვენი N შესვლა n. და ახლა უბრალოდ, რათა რამ ცოტა უფრო ფორმალური მხოლოდ ერთი წუთით, თუ იყო, ახლა ამ ერთი სახის მაღალ დონეზე და ცდილობენ გადაწყვიტოს, ისევე როგორ შეიძლება წავიდეთ გამოხატავს ქრონომეტრაჟი ამ ალგორითმი მხოლოდ შევხედავთ მას, და არა გამოყენებით contrived მაგალითად? ასევე, რამდენი დრო იტყვით ნაბიჯ, როგორც ეს ყვითელი მიიღებს, თუ n <2 სანაცვლოდ? ეს არის დიდი O რა? ასე რომ, მე ხედავს, ასე რომ ერთი ნაბიჯი, იქნებ ორი ნაბიჯი იმიტომ, რომ თუ ხოლო შემდეგ დაბრუნდნენ, მაგრამ ეს მუდმივი დროს, არა? ჩვენ ვთქვით O (1), და როგორ მე გამომეხატა ეს. T, უბრალოდ გაშვებული დრო. N არის ზომა შეყვანის, ასე T (n), უბრალოდ ლამაზი გზა ვამბობ გაშვებული დრო მოცემულია შეყვანის ზომა n იქნება ბრძანებით მუდმივი დროს, O (1). მაგრამ სხვაგვარად, რა არის ეს? როგორ გადმოსცემდით ქრონომეტრაჟი ამ ყვითელი ხაზი? T რა? შეგიძლიათ სახის მოტყუებას აქ და კითხვაზე პასუხი გაეცა ციკლურად. ასე რომ, თუ ქრონომეტრაჟი ზოგადად, ჩვენ, უბრალოდ, ვამბობთ, რომ T (n). და ახლა თქვენ სახის punting აქ და განაცხადა, რომ, ისევე, დასალაგებლად მარცხენა ნახევარში, და შემდეგ დასალაგებლად მარჯვენა ნახევარში. როგორ შეიძლება ჩვენ სიმბოლურად წარმოადგენს ქრონომეტრაჟი ამ ყვითელი ხაზი? T რა? რა ზომის შეყვანის? N ორი. რატომ არ მე უბრალოდ ვამბობ, რომ? და ეს არის კიდევ ერთი T (n / 2) და შემდეგ კიდევ ერთხელ, თუ მე შერწყმა ორი დახარისხებული halves, რამდენი ელემენტია მე ვაპირებ უნდა შეეხოთ სულ? n. ასე, რომ შეიძლება გამოხატოს ამ, უბრალოდ უნდა იყოს ისეთი ლამაზი, როგორც ქრონომეტრაჟი კულტურას. T (n) არის უბრალოდ გაშვებული დრო T (n / 2) პლუს T (n / 2) მარცხენა ნახევარში და მარჯვენა ნახევარში, plus O (n), რომელიც, სავარაუდოდ, N ნაბიჯები, მაგრამ იქნებ, თუ მე გამოყენებით ორი თითი, ის ორჯერ მეტი ნაბიჯები, მაგრამ ეს სწორხაზოვანი. ეს გარკვეული რაოდენობის ნაბიჯები რომ არის ფაქტორი n, ასე რომ, ჩვენ შეიძლება გამოხატავდეს, რადგან ეს. და ეს არის, სადაც ახლა ჩვენ punt to უკან ჩვენი უმაღლესი სკოლის მათემატიკის სახელმძღვანელოს ჩვენ რომ არ განმეორდეს, საბოლოო ჯამში, მთავრდება რითაც ამ, N ჯერ შესვლა N, თუ თქვენ მართლაც, მათემატიკის უფრო ფორმალურად. ასე რომ მხოლოდ ორი პერსპექტივები. ერთი რიცხობრივი ერთად მყარი კოდირებული წარმომადგენელი მაგალითად გამოყენებით რვა და უფრო ზოგადად შეხედეთ როგორ მოვხვდით. მაგრამ რა მართლაც საინტერესო აქ კიდევ ერთხელ, ეს ცნება Cycling. მე არ იყენებს ამისთვის მარყუჟების. მე სახის განმსაზღვრელი რაღაც თვალსაზრისით თავად, არა მხოლოდ ამ მათემატიკური ფუნქცია, არამედ იმ თვალსაზრისით, ამ ფსევდო კოდი. ამ ფსევდო კოდი არის რეკურსიული რომ ორი მისი ხაზები არსებითად ვეუბნებოდი მას წასვლა გამოყენება თავად გადაწყვიტოს პატარა პრობლემა მცირე ზომის, და ისევ და ისევ და ისევ, სანამ ჩვენ whittle ის ქვემოთ ამ ე.წ. ბაზის შემთხვევაში. მოდით რეალურად მიაპყროს უფრო მყარი მიიღოს დაშორებით ეს შემდეგნაირად. ნება მომეცით წასვლას gedit და მიიღოს შევხედოთ ზოგიერთი დღევანდელი კოდის, კერძოდ ეს მაგალითი აქ. Sigma 0, რომელიც, როგორც ჩანს, დასძენს ნომრები ერთი გზით n. ასე რომ, ვნახოთ, რა ნაცნობი და უცხო აქ. პირველ რიგში, ჩვენ გვაქვს რამდენიმე მოიცავს, ასე რომ არაფერი ახალი იქ. პროტოტიპი. მე ცოტა ბუნდოვანი on ამის შემდეგ, რამდენიმე დღეში, მაგრამ რა მივიღეთ ამბობენ პროტოტიპი ფუნქცია? აუდიტორია: [INAUDIBLE]. დინამიკები 1: რა არის ეს? აუდიტორია: ჩვენ აცხადებს იგი. დინამიკები 1: ჩვენ აცხადებს იგი. ასე, რომ თქვენ ასწავლით Clang, hey, რეალურად არ ახორციელებს ამ ჯერ, მაგრამ სადღაც ამ ფაილის, სავარაუდოდ, იქნება ფუნქცია მოუწოდა რა? Sigma. და ეს მხოლოდ დაპირება, რომ ის აპირებს ასე გამოიყურება. ის აპირებს მიიღოს მთელი რიცხვი, როგორც შეყვანის და შემიძლია უფრო ზუსტად და ვთქვათ int n --and ეს დაბრუნებას აპირებს int, მაგრამ მძიმით საშუალებით, mm, მე კიდევ გარშემო შეასრულოს ამ ცოტა მოგვიანებით. ერთხელ, Clang არის მუნჯი. ეს მხოლოდ აპირებს ვიცით რა თქვენ ვუთხრა მას ზემოდან, ამიტომ ჩვენ უნდა მაინც მისცეს ეს მინიშნება რა მოვა. ახლა მოდით შევხედოთ მთავარი აქ. მოდით გადახვევა ქვემოთ აქ და ვნახოთ, რა ძირითადი აკეთებს. ეს არ არის, რომ დიდი ხნის ფუნქცია, და ფაქტობრივად შენება აქ არის ნაცნობი. I აცხადებენ ცვლადი N, და შემდეგ I pester შესახებ ისევ და ისევ დადებითი რიცხვის getInt, და მხოლოდ გასასვლელი ამ loop კიდევ მომხმარებლის შეასრულა. ამის გაკეთება მიუხედავად იმისა, რომ ჩვენ გამოიყენება pester შესახებ, რომ გზა. ახლა ეს არის საინტერესო. ვაცხადებ int მოუწოდა "პასუხი." მე დაავალოს ეს დაბრუნების ღირებულება ფუნქცია მოუწოდა "sigma". მე არ ვიცი რა, რომ ჯერ არ არის, მაგრამ მახსოვს გამოცხადების ის მომენტი წინ. და მაშინ მე გავლის ღირებულება, რომელიც მომხმარებლის აკრეფილი, n, და მერე ანგარიშს პასუხი. კარგად მოდით გადახვევა უკან მხოლოდ ერთი წუთით. მოდით წავიდეთ წინ ამ დირექტორიაში, რათა sigma 0, და რეალურად აწარმოებს ამ პროგრამის და ვნახოთ, რა მოხდება. ასე რომ, თუ მე წავიდეთ წინ და აწარმოებს ეს პროგრამა, ./sigma-0, და მე აკრიფოთ დადებითი რიცხვი, როგორც ორი, Sigma, საბერძნეთის სიმბოლო გულისხმობს, არის მხოლოდ აპირებს დაამატოთ მდე ყველა ნომრები ნულოვანი მდე ორი. ასე რომ 0 პლიუს 1 და 2. ასე რომ, ეს უნდა იყოს იმედია მომეცი 3. რომ ყველა ის აკეთებს. და ანალოგიურად, თუ მე აწარმოებს ამ ერთხელ და მე ვაძლევ ნომერი სამი, რომ 3 პლუს 2, ასე რომ 5, პლუს 1 უნდა მომეცი 6. და თუ მე ნამდვილად გიჟები და დაიწყება აკრეფით უფრო დიდი ციფრები, ეს უნდა მომეცი დიდი და უფრო დიდი თანხები. ასე რომ ყველა. ასე რომ, რას sigma ჰგავს? ისე, ეს საკმაოდ მარტივია. ის, თუ როგორ შეიძლება არ განხორციელდა ამ ბოლო რამდენიმე კვირის განმავლობაში. "Int" იქნება დაბრუნების ტიპის. Sigma არის სახელი, და ეს ხდება ცვლადი m ნაცვლად n. მე შეიცვალოს, რომ ზევით. მაშინ ეს მხოლოდ საღი აზრის ქვითარი. ჩვენ დავინახავთ, თუ რატომ მომენტში. ვაცხადებ, კიდევ ერთი ცვლადი, თანხა, ინიციალიზაცია იგი ნულის ტოლია. მაშინ მე ამ loop iterating, როგორც ჩანს, სიწმინდე, საწყისი i = 1 მდე = მ, რომელიც რასაც მომხმარებლის აკრეფილი, და მერე ნამატი თანხა მოსწონს ეს. და შემდეგ დაბრუნდნენ თანხა. ასე რომ, რამდენიმე კითხვას. ერთი, მე აცხადებენ, ჩემი კომენტარი, რომ ეს თავს არიდებს რისკს უსასრულო ციკლი. რატომ იქნებოდა გავლის უარყოფითი ნომერი გამოიწვიოს, პოტენციურად, უსასრულო loop? აუდიტორია: თქვენ არასოდეს აღწევს m. დინამიკები 1: არასოდეს აღწევს m. მაგრამ m გავიდა, მოდით განვიხილოთ უბრალო მაგალითი. თუ m გავიდა მიერ შესახებ, როგორც ნეგატიური. მიუხედავად იმისა, მთავარი. მთავარი გვიცავს ეს ძალიან, ასე რომ მე უბრალოდ როგორც ძალიან anal ერთად sigma, ასევე დარწმუნდით რომ შეყვანის არ შეიძლება იყოს უარყოფითი. ასე რომ, თუ m უარყოფითი, რაღაც უარყოფითი. რა მოხდება? ისე, მე აპირებს მისაღებად ინიციალიზაცია ერთი, და მერე იქნება ნაკლები ან ტოლია მ? დგას. რომ was-- მოდით არ, მოდით nix ეს ამბავი. მე არ ვთხოვ, რომ კითხვაზე, რადგან რისკი იმისა, რომ მე და მიანიშნებენ არ მოხდება, რადგან მე ყოველთვის აპირებს იყოს უფრო მეტი than-- OK, I უარყოფა კითხვაზე. OK. მოდით ფოკუსირება მხოლოდ ამ ნაწილს აქ. რატომ მე ვაცხადებ გარეთ მარყუჟის? განაცხადის on line 49 მე განაცხადა i შიგნით მარყუჟის, მაგრამ ამჟამად 48 მე გამოაცხადა გარკვეული გარეთ. Yeah. აუდიტორია: [INAUDIBLE]. დინამიკები 1: რა თქმა უნდა. ასე რომ, პირველ რიგში, რა თქმა უნდა, არ მინდა განვაცხადო და ინიციალიზაცია თანხა ნულოვანი შიგნით loop ყოველ iteration, იმიტომ, რომ ეს ნათლად დამარცხება მიზანი შემაჯამებელი ნომრები. მე შენარჩუნება შეცვლის ღირებულება ნული. და ასევე, რა არის კიდევ უფრო arcane მიზეზი, რომ იგივე დიზაინის გადაწყვეტილება? Yeah. აუდიტორია: [INAUDIBLE]. დინამიკები 1: ზუსტად. მინდა წვდომისათვის გარეთ მარყუჟის ძალიან, თუ რა ხაზი? 53. და ეფუძნება ჩვენი უზენაესობის ცერის საწყისი რამდენიმე ლექცია წინ, ცვლადების scoped, მართლაც, curly braces რომ მოიცავს მათ. ასე რომ, თუ არ ვაცხადებ თანხა შიგნით ამ გარე curly braces, მე ვერ გამოიყენოს იგი ხაზის 53. სხვა სიტყვებით რომ ვთქვათ, თუ მე განაცხადა, თანხა აქ, ან თუნდაც ამისთვის მარყუჟის, მე ვერ ვებგვერდზე 53. ცვლადი ეფექტურად უნდა წავიდნენ. ასე რომ, რამდენიმე მიზეზი არსებობს. მაგრამ ახლა მოდით დავუბრუნდეთ და ვნახოთ, რა მოხდება. ასე sigma იღებს მოუწოდა. იგი დასძენს მდე 1 და 2, ან 1 და 2 დამატებული 3, და შემდეგ დააბრუნებს ღირებულება, ინახავს მას პასუხი, და printf აქ ამიტომ მე ვხედავთ ეკრანზე. ასე რომ, ეს არის ის, რაც ჩვენ მოვუწოდებთ განმეორებითი მიდგომა, სადაც გამეორების მხოლოდ ნიშნავს გამოყენებით loop. ამისთვის მარყუჟის, ხოლო მარყუჟის, Do მიუხედავად იმისა, loop, უბრალოდ აკეთებს რაიმეს და ისევ და ისევ. მაგრამ sigma სახის სისუფთავე ფუნქცია რომ მე ვერ განახორციელებს მას განსხვავებულად. რაც შეეხება ამ, რომელიც უბრალოდ უნდა იყოს სახის cool, მიადევნე თვალი ნამდვილად დავაღწიოთ ბევრი განადგურების რადგან ამ ფუნქციის მართლაც საკმაოდ მარტივია. მოდით whittle ის ქვემოთ მხოლოდ მისი ოთხი ძირითადი ხაზები და მოშორება ყველა კომენტარები და curly braces. ეს არის ერთგვარი გონება აფეთქებით ალტერნატიული განხორციელება. ყველა უფლება, იქნებ არ იბადება აფეთქებით, მაგრამ ეს ერთგვარი sexier, ყველა უფლება, შევხედოთ ეს ასე ბევრად უფრო მოკლედ. მხოლოდ ოთხი ხაზების კოდი, მე პირველი უნდა ამ საღი აზრის ქვითარი. თუ m ნაკლებია ან ტოლი ნულოვანი, sigma აზრი არა აქვს. ეს მხოლოდ უნდა იყოს ამ შემთხვევაში დადებითი ციფრები, ასე რომ მე უბრალოდ აპირებს დაბრუნების ნულოვანი თვითნებურად ასე, რომ ჩვენ მაინც უნდა ზოგიერთი ე.წ. ბაზის შემთხვევაში. მაგრამ აქ სილამაზით. მთლიანად ამ იდეას და დასძინა, 1 დან n, ან m ამ შემთხვევაში, შეიძლება გაკეთდეს სახის გავლის მამალი. ისე, რა არის თანხა, 1 მ? კარგად, თქვენ იცით, რა? ეს იგივეა, რაც თანხა m პლუს თანხა 1 მ მინუს 1. კარგად იცით, რა? რა არის sigma მ მინუს 1? ასევე, თუ თქვენ სახის მიყევით ამ ლოგიკურად, ეს იგივეა, რაც m -1 plus sigma მ მინუს 2. ასე რომ თქვენ შეგიძლიათ სახის just-- ეს მოსწონს, თუ თქვენ მხოლოდ ცდილობს გააღიზიანოს მეგობარს და ისინი გთხოვოთ, კითხვა, თქვენ სახის საპასუხო კითხვა, შეგიძლიათ სახის შენარჩუნება გავლის მამალი. მაგრამ რა არის მთავარი არის, რომ თუ თქვენ გაქვთ მიღების საკითხი, პატარა და პატარა და პატარა, თქვენ არ გეკითხებით რა არის sigma ო, რა sigma of n, რა sigma N? თქვენ გეკითხებით, რა არის sigma ო, რა sigma ო მინუს 1, რა sigma of n-2? საბოლოოდ თქვენი კითხვა აპირებს გახდეს, თუ რა? რა არის sigma ერთი ან ნულოვანი, ძალიან მცირე ღირებულება, და როგორც კი თქვენ მიიღოს, თქვენი მეგობარი, თქვენ არ აპირებს გთხოვოთ იგივე კითხვა ისევ, თქვენ უბრალოდ აპირებს ამბობენ, მე ის ნულოვანი. ჩვენ გაკეთდა თამაშობენ ამ სახის სულელური ციკლური თამაში. ასე რომ, უკან აქტი პროგრამირებაში ფუნქცია მოუწოდებდა თავად. ამ პროგრამას, როდესაც შედგენილი და აწარმოებს, არის აპირებენ მოიქცევა ზუსტად ისე, მაგრამ რა არის მთავარი არის, რომ შიგნით ფუნქცია მოუწოდა სიგმა, არის ხაზი კოდი, სადაც ჩვენ მოუწოდებდა საკუთარ თავს, რომელიც ჩვეულებრივ იყოს ცუდი. მაგალითად, მე ვფიქრობ პირველი შედგენილი ამ, ასე რომ sigma-- მიიღოს სიგმა 1 ./sigma 1. დადებითი მთელი რიცხვი, გთხოვთ, 50 1275. ასე რომ, რა ფუნქცია, როგორც ჩანს, იქნება, რომელიც ეფუძნება ერთი გამოცდა, სწორი. მაგრამ რა, თუ მე ცოტა საშიში და წაშლა ე.წ. ბაზის შემთხვევაში, და მხოლოდ ამბობენ, რომ მე უბრალოდ მიღების ეს უფრო რთული, ვიდრე ეს. მოდით უბრალოდ გამოთვლაც sigma გავაპროტესტებ m და შემდეგ დასძინა, სიგმა მ მინუს ერთი? ისე, რა მოხდება აქ? მოდით დააშორებს. მოდით recompile პროგრამა, გადარჩენა მას, recompile პროგრამა, და მაშინ მზად ./sigma 1 მასშტაბირება, შესვლის დადებითი მთელი რიცხვი, გთხოვთ, 50. რამდენი მზად არიან to fess up ხედავს, რომ? OK. ასე რომ, ეს შეიძლება მოხდეს რიგი მიზეზების გამო, და გულწრფელად ამ კვირაში ჩვენ შესახებ, რათა თქვენ უფრო მეტი მათგანი. მაგრამ ამ შემთხვევაში, ცდილობენ რომ მიზეზი უკან რა შეიძლება მომხდარიყო აქ? სეგმენტაცია ბრალია, ჩვენ ვთქვით, ბოლო დრო, ეხება სეგმენტი მეხსიერება. რაღაც ცუდი მოხდა. მაგრამ რა იყო ის, მექანიკურად რომ წავიდა awry აქ იმიტომ, რომ ჩემი მოხსნა რომ ე.წ. ბაზის შემთხვევაში, სადაც დავბრუნდი მყარი კოდირებული მნიშვნელობა? როგორ ფიქრობთ, რა მოხდა? Yeah. აუდიტორია: [INAUDIBLE]. დინამიკები 1: Ah. კარგი კითხვაა. ასე ზომა ნომერი , რომ მე შემაჯამებელი ისე დიდი, რომ ეს გადააჭარბა ზომის მეხსიერების სივრცე. კარგი იდეა, მაგრამ არ არის ფუნდამენტურად აპირებს გამოიწვიოს ავარიის. , რომელიც შეიძლება გამოიწვიოს მთელი რიცხვი overflow, სადაც ბიტი უბრალოდ Flip მეტი და მაშინ ჩვენ შეცდომა მართლაც დიდი ნომერი, როგორც უარყოფითი ნომერი, არამედ ის, რომ თავად არ გამოიწვევს ავარიის. იმის გამო, რომ ბოლომდე დღეს int ჯერ კიდევ 32 ბიტი. თქვენ არ აპირებს შემთხვევით იპარავს 33 bit. მაგრამ კარგი აზრის. Yeah. აუდიტორია: [INAUDIBLE]. დინამიკები 1: მეთოდი არასოდეს აჩერებს გაშვებული, და მართლაც ის მოუწოდებს თავად ერთხელ და ისევ და ისევ და ისევ და ისევ, და არცერთი ამ ფუნქციების ოდესმე დასრულდება, რადგან მათი ერთადერთი ხაზი კოდი მოუწოდებს themself ისევ და ისევ და ისევ. და რა არის ნამდვილად ხდება აქ, და ახლა ჩვენ შეგიძლიათ სახის მიაპყროს ამ ილუსტრირებული. ნება მომეცით წავიდეთ გადასცა სურათს რაღაც მომენტში. ეს არის სურათი, რომელიც საბოლოოდ ხორცი უფრო დეტალურად, თუ რა ხდება შიგნით თქვენი კომპიუტერის მეხსიერებაში. და აღმოჩნდება, რომ ბოლოში ამ სურათს რაღაც მოუწოდა Stack. ეს არის ბლოკი მეხსიერება, ბლოკი RAM, ეს მხოლოდ გამოიყენება ნებისმიერ დროს ფუნქცია ეწოდება. ნებისმიერ დროს თქვენ, პროგრამისტი, მოვუწოდებთ ფუნქცია, ოპერაციული სისტემა, როგორიცაა Mac OS, Windows, ან Linux, grabs რამოდენიმე ბაიტი, შესაძლოა, რამდენიმე kilobytes, შესაძლოა, რამდენიმე მბ მეხსიერება, გადასცემს თქვენ, და შემდეგ საშუალებას თქვენ აწარმოებს თქვენი ფუნქციის გამოყენებით რასაც ცვლადი გჭირდებათ. და თუ შემდეგ მოვუწოდებთ სხვა ფუნქცია და სხვა ფუნქცია, თქვენ კიდევ ნაჭერი მეხსიერება და კიდევ ერთი ნაჭერი მეხსიერება. და მართლაც, თუ ეს მწვანე ქაღალდის საწყისი Annenberg წარმოადგენს, რომ მეხსიერება, აქ რა ხდება პირველი ჯერზე რეკავთ ფუნქცია sigma. ეს აყენებს უჯრა მოსწონს ეს რა არის თავდაპირველად ცარიელი დასტის. მაგრამ შემდეგ, თუ ეს უჯრა მოუწოდებს თავად, ასე ვთქვათ, დარეკვით სხვა ინსტანციის სიგმა, რომ მოსწონს ითხოვს ოპერაციული სისტემა, ooh, გვჭირდება ცოტა მეტი მეხსიერება, მაძლევს, რომ. და შემდეგ იგი იღებს დაგროვილი on თავზე. მაგრამ რა არის აქ ის არის, რომ პირველი უჯრა ჯერ კიდევ არსებობს, იმიტომ, რომ მან მოიყვანა მეორე უჯრა. ახლა იმავდროულად, sigma დარეკეთ sigma, ასეთი ითხოვს მეტი მეხსიერება. იღებს დაგროვილი მეტი აქ. sigma დარეკეთ sigma, რომ სხვა უჯრა რომ იღებს დაგროვილი აქ. და თუ თქვენ ექცევით, საბოლოოდ, სახის რუკა ვიზუალურ რომ სქემა, თუ რა ხდება მოხდეს Stack of ქაღალდის? იგი აპირებს აღემატებოდეს მეხსიერების თქვენს კომპიუტერში. და როგორც კი ეს მწვანე უჯრა აღემატება ჰორიზონტალური ხაზი ზემოთ დასტის და ზემოთ რომ სიტყვა ბევრი, რომელიც ჩვენ დავბრუნდებით მომავალში, რომ არის ცუდი რამ. ბევრი არის სხვადასხვა სეგმენტი მეხსიერება, და თუ კი ამ ქაღალდის pile და წყობის, თქვენ აპირებს უნდა აღემატებოდეს საკუთარი სეგმენტი მეხსიერება, და პროგრამა მართლაც აპირებს მისაწოდებლად. ახლა, როგორც განზე, ამ იდეის უკან, შესაბამისად, ნათლად გამოიწვიოს პრობლემები, მაგრამ ეს არ არის აუცილებლად ცუდი რამ. რადგან მიიჩნევენ, მას შემდეგ, ყველა, how-- და შესაძლოა ეს იღებს გარკვეული შეგუება to --how ელეგანტური და რამდენად მარტივია რომ განხორციელების sigma იყო. და ჩვენ არ ვაპირებთ მის გამოყენებას უკან ყველა რომ ბევრი CS50, მაგრამ CS51, და მართლაც ნებისმიერი კლასის სადაც თქვენ მანიპულირება მონაცემთა სტრუქტურები მსგავსი ხეები, ან ოჯახის ხეები, რომ გარკვეული იერარქია, ეს სუპერ, სუპერ სასარგებლო. ახლა, როგორც განზე, ასე რომ თქვენ როგორც მიისწრაფვიან კომპიუტერის მეცნიერები იცნობს ზოგიერთი Google-ს შიგნით ხუმრობები, თუ წასვლა Google და თქვენ ეძებოთ რა არის განმარტება, ვთქვათ, უკან, შეიყვანოთ. Uh-დიდია. როგორც განზე, მე გამოყვანილია რამდენიმე. ეს იყო, როგორც 10 წუთი გაჭიანურება ამ დილით. თუ თქვენ ასევე Google "askew," ცნობა დახრილი თქვენი უფროსი slightly-- და შემდეგ ეს ერთი, ალბათ ყველაზე სასტიკი ყველა მას შემდეგ, რაც ვინმე გაატარა მოსწონს მათი დღეში ახორციელებს ამ რამდენიმე წლის ago-- მოდის. Oh, wait-- რომ bug. ასე გაშვებული ერთი მსოფლიოში ყველაზე დიდი საიტებზე არიან ამ სულელური პატარა სააღდგომო კვერცხები. ისინი, ალბათ, მოიხმარენ nontrivial ნომერი ხაზების კოდი უბრალოდ, ასე რომ ჩვენ შეგვიძლია პატარა fun რამ, როგორიცაა, რომ. მაგრამ მაინც ახლა თქვენ ზოგიერთი ასეთი შიგნით ხუმრობები. ახლა მოდით შევხედოთ ზოგიერთი თეთრი მდგომარეობს ჩვენ ვეუბნებით გვიან, და დაიწყოს კანი უკან რამდენიმე ფენა ტექნიკურად ასე რომ თქვენ ნამდვილად მესმის რა ხდება on თქვენ შეგიძლიათ გააცნობიეროთ ზოგიერთი საფრთხეები, როგორიცაა Shellshock, რომელიც უკვე დაიწყო გახდეს ბერკეტები ყველას ყურადღება, მინიმუმ მედიაში. ასე რომ აქ არის ძალიან მარტივი ფუნქცია რომ ბრუნდება არაფერი, ბათილად. მისი სახელი არის swap. იგი იღებს ორი ცვლადის და ის დააბრუნებს არაფერი. იღებს და ბ. ასე სწრაფი დემონსტრირება. ჩვენ მოუტანა ამ up. ჩვენ შეიძლება ასევე ცოტა შესვენება აქ მხოლოდ ერთი წუთით და ცოტა რაიმე სასმელი. თუ ვინმე არ იბადება გაწევრიანების ჩემთვის აქ მხოლოდ ერთი წუთით. როგორ შესახებ თქვენ maroon პერანგი? მოდის up. მხოლოდ ერთ დღეს. დიდი მადლობა, თუმცა. ყველა უფლება, და ჩვენ ახლოვდება, რომელიც აქ არის? რა გქვია? დინამიკები 4: Laura. დინამიკები 1: Laura. მოდის up. ასე რომ, Laura, ძალიან მარტივია წინაშე დგას. ლამაზი შეხვდება yo. ყველა უფლება. ასე რომ, ჩვენ გვაქვს გარკვეული რძე აქ და ჩვენ გვაქვს რამდენიმე ფორთოხლის წვენი მეტი აქ და რამდენიმე ჭიქა რომ ჩვენ ნასესხები Annenberg დღეს. დინამიკები 4: ნასესხები. დინამიკები 1: და ვაპირებ წავიდეთ წინ და გაძლევთ ნახევარი ჭიქა ამ. ყველა უფლება. და ჩვენ მოგცემთ ნახევარი ჭიქა რძე. ოჰ, და მხოლოდ, ასე რომ შეგიძლიათ მახსოვს, რა იყო ეს, როგორიცაა, გამახსენდა, რათა ამ და დღეს. Okay. თუ არ იბადება, ვნახოთ, ჩვენ შეგიძლიათ განათავსოთ მათ მეტი საკუთარი სათვალეები თუ გინდათ. ეს იქნება მსოფლიოს Laura თვალში. ყველა უფლება. ასე რომ თქვენი მიზანი, მოცემული ორი ჭიქა თხევადი აქ, რძე და ფორთოხლის წვენი, არის სვოპ ორი შინაარსი ისე, რომ ფორთოხლის წვენი გადადის რძის თასი და რძის გადადის ფორთოხლის წვენი თასი. დინამიკები 4: მივიღებ ერთი ჭიქა? დინამიკები 1: მე ასე მოხარული ვარ, რომ თქვენ სთხოვა, თუმცა ეს იქნებოდა ბევრად უკეთესი კადრები თუ არ უთხოვია. მაგრამ დიახ, ჩვენ შეგვიძლია შემოგთავაზოთ მესამე თასი რომ ცარიელი, რა თქმა უნდა. ყველა უფლება. ასე რომ სვოპ შინაარსი არსებობს. ძალიან ლამაზი. ძალიან კარგი. თქვენ ამით საოცრად ფრთხილად. და ნაბიჯი სამი. ყველა უფლება. შესანიშნავი. დიდი რაუნდი ტაში კარგი იქნებოდა, ლაურა. ყველა უფლება. ჩვენ გვაქვს პატარა მოსაყვანად საჩუქრად მიართვა თქვენთვის, მაგრამ ნება მომეცით მიიღოს ამ. დიდი მადლობა, რომ. ასე მარტივი მაგალითი, თუმცა, დემონსტრირება, რომ თუ მინდა, რომ სვოპ შინაარსი ორი კონტეინერი, ან მოდით მოვუწოდებთ მათ ცვლადები, თქვენ უნდა გარკვეული დროებითი შენახვის დადგმა ერთი შინაარსი ასე რომ თქვენ შეგიძლიათ რეალურად გავაკეთოთ swap. ასე რომ, რა თქმა უნდა, ამ კოდის up აქ C წარმომადგენელი ზუსტად რომ. თუ ფორთოხლის წვენი იყო და რძის იყო b, და გვინდოდა, რომ სვოპ ორი, შეიძლება ცდილობენ რაღაც შემოქმედებითი ასხამს ერთი შევიდა მეორე, მაგრამ ეს ალბათ არ დასრულდება განსაკუთრებით კარგად. და ასე რომ ჩვენ ვიყენებთ მესამე თასი, დარეკეთ ეს tmp, T-M-P კონვენციის, და შინაარსი OJ რომ, მაშინ სვოპ ერთი თასი, შემდეგ დააყენა OJ შევიდა ორიგინალური თასი, რითაც მისაღწევად, ზუსტად ისე, როგორც Laura გააკეთა, swap. ასე რომ, მოდით გავაკეთოთ ზუსტად რომ. ნება მომეცით წავიდეთ წინ და გახსნა მაგალითად რომ არის ფაქტობრივად მოუწოდა "არ სვოპ ", რადგან ეს არ არის უბრალოდ გაკეთდეს, როგორც თქვენ შესაძლოა იფიქროს. ასე რომ ამ პროგრამის შეამჩნევთ, რომ მე გამოყენებით stdio.h, ჩვენი ძველი მეგობარი. მაქვს პროტოტიპი for swap up არსებობს, რომელიც ნიშნავს, რომ მისი განხორციელების ს ალბათ ქვემოთ, და ვნახოთ რა ეს მთავარი პროგრამა აპირებს ჩემთვის. მე პირველ განაცხადოს int x იღებს ერთი, და int y იღებს ორი. ასე რომ, ვფიქრობ ეს რაც OJ და რძე, შესაბამისად. და მაშინ მე უბრალოდ printf ვამბობ x არის ეს და y არის, უბრალოდ ასე, რომ შეიძლება ვიზუალურად ვხედავ, რა ხდება. მერე არ printf აცხადებდნენ რომ მე შევცვალე ორი, და მერე ამობეჭდოთ აცხადებენ, რომ ისინი გაცვალეს, და მე ამობეჭდოთ x და y ერთხელ. ამიტომ ქვემოთ აქ swap არის ზუსტად ის, რაც Laura გააკეთა, და ზუსტად რა ვნახეთ ეკრანზე მომენტში წინ. მოდით წავიდეთ წინ და sorely იმედგაცრუებული. რათა არ swap, და აწარმოებს არ swap, მასშტაბირება გამომავალი აქ. შეიყვანეთ x 1, y 2, შევცვალე გაცვალეს. x კვლავ 1 და Y კვლავ 2. ამიტომ, მიუხედავად იმისა, სიმართლე გითხრათ, ეს გამოიყურება ზუსტად ისევე, თუმცა უფრო ტექნიკურად, რა Laura გააკეთა, როგორც ჩანს არ მუშაობს. რატომ არის, რომ? ისე, ეს თურმე ჩვენ წერენ პროგრამა მოსწონს ეს რომელიც როგორც ძირითადი, ხაზგასმით აქ, შემდეგ კი კიდევ ერთი ფუნქცია, როგორც swap, ხაზგასმით აქ, რომელიც ის მოუწოდებს, მსოფლიო გამოიყურება პატარა რაღაც ამ ქაღალდის მომენტში წინ. როდესაც მთავარ პირველი იღებს მოუწოდა, ასეთი ითხოვს ოპერაციული სისტემა ცოტა მეხსიერების ნებისმიერი ადგილობრივი ცვლადები როგორც x და y, რომ მთავარ, და მათ დასრულდება მდე აქ. მაგრამ თუ ძირითადი მოუწოდებს სვოპ და მთავარი გადის სვოპ ორი არგუმენტები, და ბ, ფორთოხლის წვენი და რძე, რომ არ მოსწონს გადაცემის ფორთოხლის წვენი და რძე ლაურა. რაც კომპიუტერში აკეთებს, არის ის, გადის ასლები ფორთოხლის წვენი და ასლები რძის Laura, ისე, რომ რა არის საბოლოოდ შიგნით უჯრა არის ღირებულება ერთი და ორი, ან OJ და რძე, მაგრამ მათი ასლების, ასე რომ, ამ ეტაპზე, ამბავი, არსებობს არის OJ და რძის თითოეულ ამ ქაღალდის. არსებობს ერთი და ორი თითოეულ ამ ქაღალდის, და swap ფუნქცია მართლაც სამუშაო. ეს შევცვალე მათ შიგნით მეორე უმაღლეს უჯრა, მაგრამ რომ შევცვალე არ აქვს გავლენა. და ეფუძნება მხოლოდ რამდენიმე ძირითადი პრინციპი, რომ ჩვენ ვისაუბრეთ ადრე, და მართლაც რამდენიმე წუთის წინ, რა შესაძლოა რატომ იცვლება და ბ შიგნით swap აქვს ეფექტი x და y, მიუხედავად იმისა, მე გაიარა x და y swap ფუნქცია. რა არის გასაღები სიტყვა აქ, რომ შეიძლება simplistically ახსნას? ვფიქრობ, გავიგე აქ? აუდიტორია: დაბრუნება. დინამიკები 1: დაბრუნება? არ დაბრუნდება. მოდით წავიდეთ ერთად ერთი სხვა. რა არის ეს? აუდიტორია: [INAUDIBLE]. დინამიკები 1: OK, ასე რომ დაბრუნდეს შეგვეძლო მიიღოს დაბრუნების მუშაობა ამბავი, მაგრამ არსებობს უფრო მარტივი ახსნა. აუდიტორია: Scope. დინამიკები 1: Scope. მე მიიღოს ფარგლებს. ასე ფარგლებს, მახსოვს, სადაც ჩვენი x და y განაცხადა. ისინი განაცხადა შიგნით ძირითადი უფლება აქ. და ბ, იმავდროულად, არიან ეფექტურად განაცხადა შიგნით swap, არ საკმაოდ curly braces, მაგრამ მაინც გენერალური ფართობი swap. და ასე ნამდვილად, და ბ მხოლოდ არსებობს ამ უჯრა საწყისი Annenberg, ამ მეორე ბლოკი კოდი. ასე რომ, ჩვენ მართლაც შეცვლის ასლი, მაგრამ ეს არ არის ნამდვილად, რომ სასარგებლოა. ასე რომ, მოდით შევხედოთ ეს ცოტა ქვედა დონეზე. მე ვაპირებ დაბრუნდეს წყარო დირექტორია, და მე ვაპირებ პირველი მიუახლოვდით აქ, და მხოლოდ იმის დასადასტურებლად, რომ მე ამ დიდი ტერმინალი ფანჯარა, პროგრამა ჯერ კიდევ იქცევიან, რომ. ვარაუდობენ, რომ ამ არ არის გამიზნული. ცხადია, მინდოდა სვოპ მუშაობა, ასე რომ იგრძნობა შეცდომა. ახლა მე ვერ დაიწყება და დასძინა, ბევრი printf ს ჩემი კოდი, დაბეჭდვისას x მეტი აქ, y-ზე აქ, სწორედ აქ, b აი აქ. მაგრამ გულახდილად რომ ვთქვათ, ალბათ, თქვენ უკვე აკეთებს რამდენიმე კვირის ახლა, ოფისში საათის და სახლში, როდესაც მუშაობა on psets ცდილობს იპოვოს გარკვეული შეცდომები. მაგრამ დაინახავთ, თუ არ უკვე, რომ პრობლემა კომპლექტი სამი წარუდგენს თქვენ რომ ბრძანება მოუწოდა GDB, სადაც GDB, GNU debugger, თავად მთელი bunch თვისებები, რომელიც შეიძლება რეალურად მოდით ესმის სიტუაციებში მსგავსი, მაგრამ უფრო compellingly, პრობლემების მოსაგვარებლად, რათა შეცდომები. ამიტომ, მე ვაპირებ ამის გაკეთება. ნაცვლად ./noswap, მე ნაცვლად ვაპირებ აწარმოებს GDB ./noswap. სხვა სიტყვებით, მე ვაპირებ აწარმოებს პროგრამა არ Bash, ჩვენი ახალი მეგობარი, დღეს. მე ვაპირებ აწარმოებს პროგრამა noswap შიგნით ამ და სხვა პროგრამა მოუწოდა GDB, რომელიც debugger, რომელიც არის პროგრამა, რომელიც მიზნად ისახავს დაეხმაროს თქვენ ადამიანებზე და ამოიღონ შეცდომები. ასე რომ, თუ მე მოხვდა Run აქ, იქ მტკივნეული თანხის ტექსტი რომ თქვენ ნამდვილად არასოდეს არ წაიკითხოს. ეს არსებითად განადგურების საწყისი სწრაფი, რომელიც მე ვაპირებ მოხვდა კონტროლის-L მისაღებად up ზედა არსებობს. ეს არის GDB ზოლზე. თუ მინდა, რომ აწარმოებს ამ პროგრამის არის, როგორც ამ პატარა cheat ფურცელი დღეს slide ვარაუდობს, Run პირველი ბრძანებები, რომ ჩვენ იმას ნიშნავდა, რომ წარმოგიდგინოთ. და მე უბრალოდ აპირებს აკრიფოთ აწარმოებს აქ შიგნით GDB, და მართლაც გაიქცა ჩემი პროგრამა. ახლა არსებობს რამდენიმე დამატებითი შედეგები ეკრანზე, როგორც ეს, მაგრამ ეს GDB მხოლოდ იმიტომ, რომ anal და გვეუბნება, თუ რა ხდება. თქვენ ნამდვილად არ უნდა ფიქრი ამ დეტალები ახლავე. მაგრამ რა მართლაც მაგარი შესახებ GDB, თუ ამ ერთხელ Control-L წინანდელ ეკრანზე ნება მომეცით წავიდეთ წინ და ტიპის "შესვენება მთავარ," ამით, როდესაც მე დააჭიროთ, განსაზღვრავს, თუ რა არის ე.წ. შესვენების ადგილამდე noswap.c, line 16, რომელიც, სადაც GDB figured out my პროგრამის რეალურად , ჩემი ფუნქცია რეალურად არის. ეს ჩვენ იგნორირება ახლა მაგრამ ეს მისამართი მეხსიერების სპეციალურად ამ ფუნქციას. ისე ახლა, როდესაც მე აკრიფოთ პერსპექტივაში, შეამჩნია რა მაგარი აქ. ჩემი პროგრამა არღვევს ხაზის I განუცხადა GDB პაუზის შესრულების დროს. ასე რომ არ უნდა ახლა შეცვლის ჩემი კოდი, დაამატოთ ზოგიერთი printf ს, recompile ის, გამეორება ის, შეცვალოს, დაამატეთ რამდენიმე printf ს, გადარჩენა მას, recompile ის, გაუშვით. შემიძლია უბრალოდ გავლა ჩემი პროგრამა ნაბიჯ ნაბიჯ ნაბიჯ ადამიანის სიჩქარე, არ Intel-შიგნით, ასეთი ტემპებით. ამიტომ ახლა შეამჩნია ეს ხაზი როგორც ჩანს, აქ, და თუ მე დაბრუნდეს ჩემი პროგრამა gedit, შეამჩნია, რომ ეს არის, ფაქტობრივად, პირველივე ხაზი კოდი. იქ ხაზი 16 gedit. არსებობს line 16 ფარგლებში GDB, და კიდევ თუმცა ეს შავი და თეთრი ინტერფეისი არ არის თითქმის როგორც შესახებ მეგობრული, ეს იმას ნიშნავს, რომ line 16 დღემდე არ შესრულებულა არ არის, მაგრამ ეს უნდა იყოს. ასე რომ, მართლაც, თუ მე აკრიფოთ ბეჭდვა x, არ printf, ამობეჭდოთ x, მე რამდენიმე ყალბი ღირებულება არსებობს ნულოვანი, რადგან x არ ინიციალიზაცია ამჟამად. ამიტომ, მე ვაპირებ აკრიფოთ შემდეგი, ან, თუ მინდა, რომ იყოს ლამაზი, უბრალოდ N მომავალი. მაგრამ როდესაც მე აკრიფოთ შემდეგი შესვლის, ახლა შეამჩნია, რომ მოძრაობს ხაზი 17. ლოგიკურად ასეა, თუ მე შესრულებული ხაზის 16 და მე ახლა აკრიფოთ ბეჭდვითი x, რა უნდა ნახოთ? ერთი. და ახლა ეს მართლაც გაუგებარია. $ 2 არის მხოლოდ ლამაზი გზა, თუ გსურთ ეხება, რომ არც შემდეგ, შეიძლება ითქვას "დოლარის ნიშანი ორი." ეს იგივეა უკან მითითება. მაგრამ ახლა, ნუ მიაქცევთ ყურადღებას. რა არის საინტერესო არის ის, რაც მარჯვენა თანაბარი ნიშანი. და ახლა თუ მე აკრიფოთ შემდეგი ერთხელ და ბეჭდვითი y, მე უნდა დაინახოს 2. შემიძლია ასევე ბეჭდვა x ერთხელ, და გულწრფელად, თუ მე მიღების ცოტა დაბნეული, სადაც მე ვარ, მე შემიძლია აკრიფოთ სია სია და უბრალოდ ნახეთ ზოგიერთი კონტექსტში გარშემო წერტილი მე რეალურად. და ახლა შემიძლია აკრიფოთ შემდეგი, და x არის 1. ახლა აკრიფოთ შემდეგი. Oh, Y არის 2. და ისევ, ეს არის დამაბნეველი, რადგან GDB ის გამომუშავება მიმდინარეობს ერთობლივი საკუთარი გამომუშავება. მაგრამ თუ თქვენ გაქვთ გათვალისწინებით, glancing უკან და მეოთხე თქვენი კოდი ან ჩამოყალიბებულია ის ჩვენს მხარესაა გვერდით, ალბათ, თქვენ , რომ ნამდვილად მე უბრალოდ სტეპინგზე მეშვეობით ჩემი პროგრამა. მაგრამ შეამჩნია, რა ხდება შემდეგ, ფაქტიურად. აქ ხაზი 22. ნება მომეცით წასვლა მეტი, რითაც მოძრავი დან 23, და თუ მე ბეჭდვა x ახლა, კიდევ ერთი. და თუ მე ბეჭდვა y ახლა, კიდევ ერთი. ასე რომ, ეს არ არის სასარგებლო exercise. ასე რომ, მოდით redo ამ. ნება მომეცით დაბრუნდეს მდე ზედა და ტიპის პერსპექტივაში კვლავ. და ის რომ პროგრამა რომ მიმდინარეობს debugged დაიწყო უკვე, დაიწყო თავიდანვე. დიახ, მოდით ეს კიდევ ერთხელ გავაკეთოთ. და ამ დროს, მოდით გავაკეთოთ შემდეგი, მომდევნო, მომდევნო, მაგრამ ახლა რამ საინტერესო. ახლა მინდა დახევას შევიდა swap, ასე რომ მე არ აკრიფოთ შემდეგი. მე აკრიფოთ ნაბიჯი და ახლა შეამჩნია ეს გადახტა ჩემთვის noswap.c ხაზი 33. თუ მე დაბრუნდეს gedit, რა ხაზი 33? ეს არის პირველი ფაქტობრივი ხაზი კოდი შიგნით swap. რომელიც არის ლამაზი, რადგან ახლა მე არ შემიძლია სახის poke გარშემო და ცნობისმოყვარე ის, თუ რა ხდება ნამდვილად არსებობს. ნება მომეცით ბეჭდვა tmp. Whoa. რატომ არ tmp აქვს გარკვეული გიჟები, ყალბი ნაგვის ღირებულება? აუდიტორია: ეს არ ინიციალიზაცია. დინამიკები 1: ეს არ ინიციალიზაცია. და მართლაც, როდესაც თქვენ აწარმოებს პროგრამა, თქვენ მოცემული მთელი bunch მეხსიერება ოპერაციული სისტემა, მაგრამ თქვენ არ ინიციალიზდება რაიმე ღირებულებები, ასე რომ რაც ბიტი თქვენ აი, აქ, მიუხედავად იმისა, რომ ეს გიჟები დიდი უარყოფითი ნომერი, მხოლოდ იმას ნიშნავს, რომ ეს არის გადმონაშთებზე ზოგიერთი წინა გამოყენება, რომ RAM, მიუხედავად იმისა, რომ მე არ მაქვს თავს საჭირო ამაზე. ასე რომ, ახლა მე ვაპირებ წავიდეთ წინ და ტიპის შემდეგი, და თუ მე ახლა აკრიფოთ ბეჭდვითი tmp, რა უნდა ნახოთ? რასაც ღირებულება იყო, არის პირველი არგუმენტი, უბრალოდ როგორიცაა x პირველი იყო, რამ გადავიდა,, ასე და x უნდა იყოს იგივე, ასე ბეჭდვა tmp უნდა ამობეჭდოთ მე ერთი. ასე რომ, რას დაინახავთ პრობლემა კომპლექტი სამი არის სამეურვეო სახის შესახებ GDB, მაგრამ გახსოვდეთ, რომ ეს არის დასაწყისი საქართველოს შევხედოთ ინსტრუმენტი, რომელიც რეალურად დაგეხმარებათ გადაწყვიტოს პრობლემები ასე ბევრად უფრო ეფექტურად. რაც ჩვენ, საბოლოო ჯამში, ვაპირებთ, რომ გავაკეთოთ ოთხშაბათს არის დაიწყოს კანი უკან რამდენიმე ფენა და ამოიღონ ზოგიერთი სასწავლო დისკები. ეს რამ მოუწოდა სიმებიანი, რომ ჩვენ გამოიყენება გარკვეული დროის განმავლობაში, ჩვენ ვაპირებთ, რომ ნელა, რომ მიიღოს დაშორებით თქვენ და დაიწყოს საუბარი რაღაც უფრო ეზოთერულად ცნობილია, როგორც char *, მაგრამ ჩვენ ვაპირებთ, რომ ეს ლამაზი და ნაზად პირველი, მიუხედავად იმისა, მითითებას, როგორც ისინი უწოდებენ, შეუძლია გარკვეული ძალიან ცუდი რამ თუ შეურაცხყოფა, შევხედავთ ცოტა claymation საწყისი ჩვენი მეგობარი Nick Parlante სტენფორდის უნივერსიტეტის პროფესორი კომპიუტერულ მეცნიერების, რომლებიც ერთად წინასწარი გადახედვისას რა მოვა ამ ოთხშაბათს. [ვიდეო აღწარმოების] -Hey, Binky. ვიღვიძებ. დროა მაჩვენებელი fun. რა არის ეს? ბუნებაში პოინტერები? Oh, გუდი, [END ვიდეო აღწარმოების] დინამიკები 1: ეს გელით ოთხშაბათს. ჩვენ დავინახავთ, თქვენ შემდეგ. [ვიდეო აღწარმოების] და ახლა, ღრმა აზრები, მიერ Daven Farnham. რატომ ვართ ჩვენ სწავლის C? რატომ არ +? [სიცილი] [END ვიდეო აღწარმოების]