>> [संगीत खेल]
>> स्पीकर 1: सब ठीक है, इस CS50 है, और इस सप्ताह चार की शुरुआत है,
और आप सुना सकते हैं या पढ़ें, दुनिया का अंत हो गया है.
इंटरनेट के आसपास सभी जा रहे हैं गया ज्ञान और जागरूकता है
एक कार्यक्रम, एक में एक बग की बैश बुलाया प्रोग्रामिंग भाषा.
इस शानदार ब्रांडेड किया गया है SHELLSHOCK, या बैश द्वार के रूप में,
लेकिन इस तरह के लेख असामान्य नहीं किया गया है.
और वास्तव में, उनमें से कई लाना Heartbleed के पीछे यादें,
आप में देखा हो जो यह पिछले वसंत पीछे प्रेस जो
इसी प्रकार काफी नाटकीय था.
अब आप में से उन लोगों के यहां आज, आप में से कितने हैं,
आप समझ में नहीं आता है, भले ही क्या यह SHELLSHOCK के बारे में सुना, सब के बारे में?
सब ठीक है, और आप में से कितने कमजोर कर रहे हैं कि कंप्यूटर है?
ठीक है, दूर, बहुत अधिक हाथ होना चाहिए अभी, कारणों के लिए हम देखेंगे.
>> का क्या है पर एक नज़र रखना मीडिया में चल रहा
और फिर इसे थोड़ा समझा यहाँ हमारे लिए तकनीकी रूप से.
>> अध्यक्ष 2: सुरक्षा विशेषज्ञों चेतावनी दी एक गंभीर दोष सकता है कि
के सैकड़ों को प्रभावित करने के बारे में हो दुनिया की वेब उपयोगकर्ताओं के लाखों.
तो क्या वास्तव में हो गया है कि बग क्या है SHELLSHOCK करार दिया, और यह क्या करता है?
खैर, SHELLSHOCK भी रूप में जाना जाता है बैश बग, यह कारनामे सॉफ्टवेयर.
हैकर्स कमजोर स्कैन करने के लिए वायरस का उपयोग लिनक्स और यूनिक्स चल प्रणालियों
ऑपरेटिंग सिस्टम और फिर उन्हें संक्रमित.
पार्टी की योजना बनाई एक कमांड लाइन खोल रहा है.
यह उपयोगकर्ताओं को इस मुद्दे को लांच करने की आज्ञा देता है सॉफ्टवेयर के भीतर कार्यक्रमों और सुविधाओं
पाठ में टाइप करके.
यह आमतौर पर प्रोग्रामर द्वारा इस्तेमाल किया है, और व्यापक दुनिया के लिए खुला नहीं होना चाहिए,
SHELLSHOCK कि परिवर्तन है.
>> खैर, worringly, कुछ विश्लेषकों यह एक बड़ा खतरा हो सकता है चेतावनी दी है,
SHELLSHOCK पूरी अनुमति देता है एक संक्रमित मशीन का नियंत्रण,
Heartbleed जबकि केवल अनुमति दी हैकर्स कंप्यूटर पर जासूसी करने के लिए.
यह बात है, तो गंभीर है 10 में से एक 10 दर्जा दिया गया
नेशनल द्वारा गंभीरता के लिए भेद्यता डाटाबेस.
सभी वेब सर्वर की 2/3 पर हैं कुछ मैक कंप्यूटरों सहित जोखिम,.
खैर, आप यह सुनिश्चित कर लें अब आपके सिस्टम पैच.
एक वेबसाइट चलाने की मेजबानी किसी को भी प्रभावित ऑपरेटिंग सिस्टम
जितनी जल्दी हो सके कार्रवाई करनी चाहिए.
यह देखना चाहिए बर्दाश्त कर सकते हैं जो कोई उनकी निगरानी और वेब आवेदन करने के लिए
फायरवॉल किसी भी हमले के लिए बाहर देखने के लिए.
स्पीकर 3: सबसे बुरी बात हो सकता है
किसी कोड लिखना होगा कि कि स्वचालित रूप से जाने के लिए और स्कैन होगा
इंटरनेट और प्रभावित करेगा इन सभी कंप्यूटरों.
और वे अच्छी तरह से करना है कि, एक बार, वे कर सकते सबसे बुरी बात
अभी सब कुछ नष्ट कर रहा है, या नीचे साइटों बंद.
इसलिए हम क्षति को देख सकता था देखने के उस बिंदु से,
हम दुर्भावनापूर्ण लोग कहाँ होगा जो सिर्फ तबाही का कारण करने का फैसला
सिस्टम को नीचे लाने या हटाने के द्वारा कि जैसे फाइलें, और बातें.
अध्यक्ष 2: कुछ इस एक है कहना सबसे मुश्किल का उपाय करने के लिए
साल में कीड़े, और यह सप्ताह लेने या भी हो सकता है
महीने के अपने अंतिम प्रभाव को निर्धारित करने के लिए.
>> स्पीकर 1: तो है कि सभी, सच है लेकिन मजेदार बात यह है कि लगभग सभी है,
कल्पना की तुम सिर्फ देखा था, शायद कीबोर्ड के अलावा,
साथ कुछ नहीं करना है जो भी बग.
सर्वर और तारों और बहुत आगे है, यह एक तरह से tangentially संबंधित है,
लेकिन मूल में यह बहुत वास्तव में है परिचित यहाँ क्या हो रहा है.
वास्तव में, मुझे में चलते हैं हमारे CS50 उपकरण.
मुझे आगे जाना है और अधिकतम चलो यहां टर्मिनल विंडो.
और तुम लोग, इस का उपयोग किया गया या, उसके संस्करण एम्बेडेड
प्रोग्राम लिखने के क्रम में एडिट में, इसके आगे आदेश टाइप करें, और,
और यह वास्तव में है, और है सप्ताह की मार, बी ए एस एच के लिए किया गया.
यह वह जगह है बॉर्न फिर, शैल जो कह रही है की सिर्फ एक अच्छा तरीका है,
यह एक है कि एक कार्यक्रम है प्रभावी ढंग से, शीघ्र निमिष,
कि इंतज़ार कर बैठता आप के लिए इनपुट के लिए.
और यह आदेश है लाइन इंटरफेस है, जो के माध्यम से
तुम लोग आदेशों से चल रहा है और अंततः संकलन और फिर चल
कार्यक्रम.
>> लेकिन बैश भी एक प्रोग्रामिंग है निम्नलिखित अर्थों में भाषा.
आप की तरह आदेश जानते हैं कि वहाँ सीडी और लोकसभा और भी बजना और दूसरों को,
लेकिन आप अपने खुद के आदेशों को परिभाषित कर सकते हैं बैश में उन्हें लागू करने से.
अब हम नहीं जा रहे हैं महान विस्तार में जाने
के रूप में प्रोग्रामिंग भाषा बैश, लेकिन करने के लिए पता है, उदाहरण के लिए, इस समय यह है कि,
कहा जाता है कि कोई आदेश नहीं है "नमस्ते."
तो उस में पाया जा सकता है इन पैकेजों में से एक.
यह मेरे कंप्यूटर पर स्थापित नहीं है.
अपने व्यवस्थापक से पूछें.
लेकिन मैं वहाँ चाहते हैं एक कार्यक्रम होने के लिए बैश में या मेरे प्रॉम्प्ट पर "हैलो" कहा जाता है,
मैं वास्तव में उस वाक्यविन्यास का उपयोग कर सकते हैं काफी सी की तरह यह बहुत ही नहीं है
लेकिन यह एक सुंदर करने के लिए इसी तरह लग रहा है समारोह, कुछ विवरण लापता यद्यपि.
कुछ भी नहीं होने लगता है, लेकिन अब मैं "हैलो" टाइप
आप वास्तव में एक लिख सकते हैं कार्यक्रम, नहीं सी में, नहीं जावा में,
नहीं एक और प्रोग्रामिंग में भाषा, लेकिन बैश अपने आप में.
>> अब यहां महत्वपूर्ण यह है कि मैं ने लिखा है मैं इस नए आदेश देना चाहता था नाम,
और कोष्ठकों भी हैं इस का प्रतीकात्मक एक समारोह किया जा रहा है.
एक अलग रूप में, आप भी मजा कर सकते हैं , और वास्तव में, यहां तक ​​कि मैक ओएस पर बातें,
इस टर्मिनल नामक एक कार्यक्रम है.
यह किसी के भी में निर्मित आता इस कमरे में एक मैक है कि कंप्यूटर,
और आप मैक में इसी तरह की बातें कर सकते हैं ओएस, लेकिन आप से परे है कि अधिक से जा सकते हैं.
और यह एक छोटी सी स्पर्शरेखा है लेकिन यह मजाक की तरह है.
मैं आज सुबह याद दिला रहा था, इस सोच के माध्यम से करते हैं,
एक छोटे से खेल की मैं खेलने के लिए इस्तेमाल किया CS50 के पूर्व TFS में से एक के साथ
किसी भी समय वह दूर से चलना होगा जिससे उसकी स्क्रीन के साथ अपने कीबोर्ड खुला,
मैं एक आदेश पर अमल होगा this-- तरह "नमस्ते कहना."
और अब किसी भी समय वह वापस आया उसके कुंजीपटल मैं स्क्रीन को मंजूरी दे दी के बाद
और वह नीचे बैठते थे कुछ काम करने की कोशिश,
उसकी directory-- की सामग्री की सूची
>> [ऑडियो प्लेबैक]
>> हैलो.
नमस्कार.
>> निष्पक्षता में तो,: अध्यक्ष 1 यह "नमस्ते." वास्तव में नहीं था
यह आमतौर पर कुछ था that-- के सदृश
[ऑडियो प्लेबैक]
-Beep.
स्पीकर 1: मैं would-- --that इसलिए अपने कंप्यूटर होगा
वह वास्तव में उस पर किसी भी समय कसम खाता अपने कीबोर्ड पर बैठ गए.
और बहुत जल्दी वह समझ से बाहर उसकी स्क्रीन खुला छोड़ने के लिए नहीं.
लेकिन इस तरह का सुझाव बेवकूफ मजाक की है कि आप
बैश तरह कुछ के साथ हो सकता है.
लेकिन यह एक छोटे से अधिक है गंभीर, उस से भी सुनिश्चित हो.
और वास्तव में, इस में से एक है सबसे खतरनाक और लंबे समय तक चलने कीड़े
कि वास्तव में विश्व स्तर पर दुनिया में पहुंच गई है.
इस बग के आसपास रहा है कुछ 20 साल के लिए,
और आप सिर्फ एक में मारा हो जाएगा उसके रिश्तेदार सादगी से पल.
>> तो यह एक प्रतिनिधि है आज्ञा है कि आप अगर
सचमुच अभी, एक मैक ही आप अपने ढक्कन खुला है,
आप उस में टाइप करने की कोशिश कर सकते हैं टर्मिनल बुलाया कार्यक्रम.
टर्मिनल के नीचे है आवेदन Utilities--
एक बार के लिए, विंडोज उपयोगकर्ताओं के लिए नहीं है इस विशेष threat-- के बारे में चिंता
लेकिन एमएसीएस साथ आप उन लोगों टाइप कर सकते हैं एक खिड़की में यह है कि मैं यहाँ क्या करेंगे जैसे,
और आप टाइप करते हैं इस कार्यक्रम में कि
मैं अब क्या करेंगे जैसे, टर्मिनल कहा जाता है, आप शब्द देखते हैं "कमजोर"
अपने कंप्यूटर है शोषण की चपेट में.
>> अब जब कि वास्तव में क्या मतलब है?
और यह मानते है कुछ सुंदर पागल वाक्यविन्यास,
लेकिन कम से कम बाहर खींचना दिलचस्प पहलुओं के कुछ.
तो लग रहा है कि कुछ वाक्य रचना नहीं है कम से कम सी से, एक छोटे से परिचित
और अधिक आम तौर पर प्रोग्रामिंग.
मैं कुछ कोष्ठकों देखते हैं, अर्धविराम, घुंघराले ब्रेसिज़, और इस तरह,
लेकिन यह इस पता चला है कि पीले रंग में यहाँ बेवकूफ बात
एक समारोह अनिवार्य है कि कुछ भी नहीं है.
पेट के साधन कुछ नहीं करते, और अर्धविराम कुछ नहीं कर रोकने का मतलब है.
इनमें से अंदर तो घुंघराले ब्रेसिज़, तथ्य
मैं एक समान है कि छोड़ दिया, इस पर हस्ताक्षर
अनिवार्य रूप से पैदा होता है एक आदेश, या एक चर,
एक्स कहा जाता है, और यह बताए वहाँ कोड की कि पीला सा.
कि "गूंज ऐसा कुछ हो सकता है नमस्ते "या" कहना बीप "या कुछ और
कि जैसा.
लेकिन अपनी आँखें अगर नोटिस अधिकार के लिए आगे घूमना,
की तुलना में इस लाइन के लिए और भी है कि अर्धविराम की बस अंत.
फिर, "कमजोर" गूंज और उस पार भी अधिक है.
एक और अर्धविराम, पार्टी की योजना बनाई सी :.
>> तो लंबी कहानी को कम, कोड की इस पंक्ति है
सम्मोहक के लिए पर्याप्त है कि एक कंप्यूटर
कुछ कर रही है की चपेट में आप क्या करना चाहते हैं कि,
पार्टी की योजना बनाई जिससे में एक बग है क्योंकि बैश रोकने के लिए चाहिए था, भले ही
आदेश सही से पढ़ लाइनों वहाँ पीले पाठ के बाद,
एक 20 से अधिक साल पुराने बग के लिए, पार्टी की योजना बनाई वास्तव में पढ़ रहा है
कि अर्धविराम से परे और सुंदर ज्यादा यह बताया जाता है कि क्या कर रही है.
>> इसलिए निहितार्थ क्या है का है कि अंततः?
मैं सिर्फ "हैलो गूंज" कहा या ", कमजोर गूंज"
लेकिन क्या आप कुछ किया तो वास्तव में दुर्भावनापूर्ण, rm- आरएफ * जैसे,
जो तुम नहीं हो सकता पहले कभी टाइप किया है,
और स्पष्ट रूप से आप शायद नहीं भी जल्दी ही चाहिए,
आप एक कर सकते हैं क्योंकि इसके साथ नुकसान की बहुत.
क्यों?
आरएम का पाठ्यक्रम क्या करता है?
निकालता है.
* क्या मतलब है?
सभी.
तो यह एक तथाकथित है वाइल्ड कार्ड, यह तो इसका मतलब है
में सब कुछ नष्ट वर्तमान निर्देशिका.
-r पुनरावर्ती मतलब होता है, आप को हटाने क्या कर रहे हैं तो जो मतलब
एक निर्देशिका है, और वहाँ के अंदर अन्य फाइलें और अन्य निर्देशिकाओं है
बारी बारी से वहाँ में डुबकी और है कि सभी को हटा दें.
और च उन सब का सबसे बुरा है.
किसी को भी च यहां का मतलब क्या है?
फोर्स.
तो भी, साधन मजबूर यह एक बुरा विचार है,
मुझे उत्साह के बिना यह कर आगे की पुष्टि के लिए.
तो, आप जानते हैं, हम पर हंस इस, लेकिन स्पष्ट रूप से, मैं शायद
यह कई बार टाइप एक दिन, वास्तविकता क्योंकि
यह करने के लिए सबसे तेज़ तरीका है सामान की एक पूरी गुच्छा हटा दें.
लेकिन फिर भी मैं कुछ नुकसान किया है.
>> लेकिन अगर आप एक कंप्यूटर चाल थे कुछ मूर्ख चर को परिभाषित करने में
या समारोह एक्स कहा जाता है, लेकिन फिर क्रियान्वित करने में कंप्यूटर चकरा देनेवाला
उस की सीमाओं से परे समारोह, कि अर्धविराम से परे,
आप वास्तव में एक कंप्यूटर चाल सकता है आरएम की तरह कुछ क्रियान्वित करने में -rf
या ईमेल कमान या कॉपी कमान.
कुछ भी सचमुच आप के साथ क्या कर सकते हैं कंप्यूटर, यह फ़ाइलों को हटाने चाहे,
, फाइल बनाने किसी स्पैमिंग, दूर से कुछ सर्वर पर हमला,
आप इसे व्यक्त कर सकते हैं एक आदेश के साथ, आप
कर रही है कि में एक कंप्यूटर चाल कर सकते हैं.
>> अब का एक उदाहरण क्या है तुम ऐसा कैसे कर सकता है?
खैर, कंप्यूटर का एक बहुत कुछ है इंटरनेट चल बैश पर.
हमें मैक उपयोगकर्ताओं के सभी उन के बीच में हैं.
लिनक्स सर्वर की एक बहुत शामिल हैं साथ ही उन्हें, और यूनिक्स सर्वर.
विंडोज फिर से हो जाता है अपेक्षाकृत हुक बंद
आप को स्थापित किया है, जब तक विशेष सॉफ्टवेयर.
सर्वर की एक बहुत, के लिए उदाहरण के लिए, चलाने वेब सर्वर,
और वास्तव में लिनक्स शायद है सबसे लोकप्रिय ऑपरेटिंग सिस्टम
इंटरनेट पर कंप्यूटर पर चलाने के लिए उन वेब पृष्ठों की सेवा कर रहे हैं.
अब हम बाद में देखेंगे के रूप में सेमेस्टर, जब में
आप से एक अनुरोध भेज अपने browser-- क्रोम,
इंटरनेट एक्सप्लोरर, whatever-- एक दूरस्थ सर्वर के लिए,
यह पता चला है कि भले ही आप सिर्फ टाइप www.example.com,
अपने ब्राउज़र एक संदेश भेज रहा है कि एक छोटे से अधिक रहस्यमय, इस तरह है.
>> लेकिन अजीब एक छोटे से कुछ नोटिस.
पहली दो पंक्तियों मैंने पहले कभी नहीं देखा
लेकिन वे नहीं लगते विशेष रूप से धमकी.
लेकिन मैं चुरा लिया है क्या नोटिस यहाँ तीसरी लाइन के लिए.
एक बुरा आदमी एक संदेश भेज रहे थे अपने या अपने कंप्यूटर से इस तरह
एक कमजोर मैक या एक के लिए कमजोर लिनक्स सर्वर,
मजेदार बात यह है, कि पार्टी की योजना बनाई है कि साधारण सी कमांड प्रॉम्प्ट,
सर्वव्यापी है और अक्सर है अनिवार्य रूप से निष्पादित करने के लिए खेतों में
एक की सामग्री यह मिलने वाले संदेश.
और उस तर्क से, आप कर सकते हैं इसलिए, एक वेब सर्वर चाल,
जैसे कुछ भेजकर उपयोगकर्ता एजेंट, आमतौर पर जो
कहने के लिए माना जाता है अपने ब्राउज़र के नाम है.
उपयोगकर्ता एजेंट क्रोम, उपयोगकर्ता एजेंट इंटरनेट एक्सप्लोरर, उपयोगकर्ता एजेंट फ़ायरफ़ॉक्स, इस
बस अपने ब्राउज़र की है खुद की पहचान करने का तरीका.
लेकिन अगर एक बुरा आदमी बहुत चतुराई मिमी मिमी, मैं कर रहा हूँ, कहते हैं
आपको बता नहीं जा रहा क्या अपने ब्राउज़र है,
मैं बजाय आप इस भेजने के लिए जा रहा हूँ एक rm- आरएफ के साथ बात गुप्त दिखने
* यह में, आप सचमुच एक चाल कर सकते हैं इंटरनेट पर कमजोर वेब सर्वर
में है कि वास्तव में क्रियान्वित करने में वहाँ फ़ाइलों के सभी हटाने के लिए.
और सच कहूँ तो, ऐसा नहीं है इसके बारे में भी बुरी.
आप कुछ भी कर सकते हैं.
आप शुरू कर सकता है एक वितरित सेवा हमले के इनकार
आप को यह संदेश भेजा वेब सर्वर के पूरे गुच्छों
और फिर उन सब के लिए, उतरना पड़ा उदाहरण, Harvard.edu सर्वरों पर,
और आप धमाके की तरह कर सकते हैं उनमें से बाहर बिल्ली
था कि एक नेटवर्क यातायात से अन्यथा यह बुरा आदमी से शुरू हो गया.
>> तो, लंबी कहानी को कम, लगभग एक मैक का मालिक जो इस कमरे में हर कोई
इस की चपेट में है.
उम्मीद की किरण आप कर रहे हैं, जब तक कि है अपने लैपटॉप पर एक वेब सर्वर चल रहा है,
और आप वास्तव में विन्यस्त किया है जब तक यह इसे में एसएसएच तरह कुछ की अनुमति के लिए
आप वास्तव में सुरक्षित हैं.
यह कमजोर है, लेकिन कोई नहीं है एक अपने लैपटॉप में शामिल होने की कोशिश कर रहा है,
तो आप की तरह आश्वासन दिया आराम कर सकते हैं.
हालांकि, एप्पल जल्द ही होगा इस के लिए एक तय अद्यतन किया.
लिनक्स की दुनिया में पहले से ही जारी किया गया है फेडोरा और Ubuntu के लिए सुधारों की एक संख्या
और अन्य लिनक्स के संस्करणों, और वास्तव में आप उपकरण में अद्यतन 50 चलाते हैं,
बहुत हो जाएगा यह भी है कि अद्यतन और सही.
लेकिन वह भी नहीं है वास्तव में, कमजोर हो गया
आप जब तक क्योंकि उपकरणों के साथ tinkered
और सार्वजनिक रूप से अपने लैपटॉप बनाया नहीं है जो इंटरनेट पर सुलभ
डिफ़ॉल्ट रूप से, आप है वास्तव में, क्योंकि ठीक किया गया
firewalling और अन्य तकनीकों की.
>> लेकिन यह एक बग का एक चरम उदाहरण है हम सचमुच 20 के लिए के लिए रहता है कि
साल, और कोई है जो जानता है कि अगर यह सब समय इसके बारे में जाना जाता है?
और वास्तव में, इस में से एक है मौलिक चुनौतियों
हम बाद में देखेंगे कि सुरक्षा के बारे में सेमेस्टर,
कि, बस असली दुनिया में की तरह है अच्छे लोग नुकसान में रहे.
बुरे लोगों को बाहर रखने के लिए, हम करने के लिए है हर दरवाजा बंद कर दिया है कि यह सुनिश्चित कर लें,
हर खिड़की है कि सुरक्षित है कि एक घर में प्रवेश के हर बिंदु
बुरे लोगों को बाहर रखने के लिए सुरक्षित है.
लेकिन क्या करता है, बुरा आदमी के लिए है वास्तव में अपने घर से समझौता करने के लिए करते हैं
और तुम से चोरी?
वह या वह सिर्फ खुला एक खोजने के लिए है दरवाजा, एक टूटी हुई खिड़की, या कुछ और
उन पंक्तियों के साथ, और यह बात है कंप्यूटर सुरक्षा में एक ही बात.
हम में से लाखों लिख सकते हैं प्रोग्रामिंग कोड की लाइनों
और सैकड़ों या हजारों खर्च यह सही पाने के लिए कोशिश कर रहा घंटे की,
लेकिन अगर आप सिर्फ एक बना शुद्धता में गलती,
आप पूरे सिस्टम को रख सकते हैं और वास्तव में, इस मामले में पूरे इंटरनेट
और जोखिम पर दुनिया.
>> यदि आप अधिक जानकारी चाहते हैं तो अगर इस बारे में, यहाँ इस URL पर जाएं.
कार्रवाई के लिए कोई ज़रूरत नहीं है आज रात आप कर रहे हैं जब तक
उन है कि और अधिक आरामदायक के बीच अपने स्वयं के वेब चल रहा है
सर्वर, जो तुम चाहिए मामले में, वास्तव में, अपने सॉफ्टवेयर को अपडेट करें.
>> और यह भी का शीर्षक है एक भाषण, और अब एक कागज,
हम पर लिंक किया है कि आज के लिए पाठ्यक्रम की वेबसाइट.
यह एक साथी के द्वारा किया गया नामित केन थॉम्पसन, जो
एक बहुत प्रसिद्ध स्वीकार करने गया था कंप्यूटर विज्ञान के क्षेत्र में पुरस्कार,
और वह कुछ साल इस भाषण दिया पहले, अनिवार्य रूप से यह एक ही विषय पर.
सवाल लोगों पूछ, तुम चाहिए सच
विश्वास, अंततः, सॉफ्टवेयर आपको दिया गया है?
उदाहरण के लिए, हम सब की है कार्यक्रमों लिख गया,
और हम संकलन किया गया है बजना साथ उन्हें.
और अपने ज्ञान के लिए, आपको लिखा है CS50 के लिए किसी भी कार्यक्रम है, जहां
एक तरह की पीछे के दरवाजे, एक रास्ता है एक बुरा आदमी है कि अपने कार्यक्रम चल रहे हैं,
अपने कंप्यूटर पर ले सकता है?
शायद नहीं, सही?
मारियो, और लालची, और क्रेडिट.
ये सब बहुत छोटे प्रोग्राम हैं.
आप सुंदर होना होगा बुरा वास्तव में आप अगर
अपने पूरे कंप्यूटर कमजोर बनाया कोड की 10 या 20 लाइनें लिखने के बाद,
या कुछ की कम से कम अनजान सुरक्षा निहितार्थ की.
अब मुझे लगता है कि परिहास कहना लेकिन हम आज देखने जा रहे हैं
और इस सप्ताह यह वास्तव में है वास्तव में, वास्तव में आसान
बुरा हो सकता है और भी बनाने के लिए कम कार्यक्रमों कमजोर.
>> लेकिन अब के लिए, कम से कम, एहसास सवाल यहाँ कहा जा रहा है कि
एक संकलक में बजना के बारे में है.
क्यों हम बजना पर भरोसा किया गया है पिछले दो या तीन सप्ताह के लिए?
कौन है जो कोई भी बजना लिखा है कि कहने के लिए है वहाँ में एक "" अगर हालत नहीं था
कि अनिवार्य रूप से कुछ शून्य इंजेक्शन और हर कार्यक्रम में लोगों को यह compiles
कि ऐसा होगा उसे या उसके पहुँच अपने कंप्यूटर जब आप सो रहे हैं
और अपने लैपटॉप ढक्कन खुला है और आपके कंप्यूटर पर चल रहा है?
है ना?
हम सम्मान प्रणाली सही है की इस प्रकार है अब हम बजना कानूनी है कि भरोसा है.
आप उपकरण कानूनी है कि विश्वास है.
तुम पर भरोसा है कि सचमुच हर कार्यक्रम अपने मैक या पीसी पर भरोसेमंद है.
और इस सरल बग का सुझाव है, यह दुर्भावनापूर्ण नहीं है, भले ही
कि बिल्कुल नहीं है मामला होने की संभावना.
>> तो तुम नरक के रूप में डर होना चाहिए.
सच कहूँ तो, कोई आसान नहीं है इस दूसरे का हल
सामाजिक जागरूकता का एक तरह से बढ़ती जटिलता की
हम शीर्ष पर बना रहे हैं कि हमारे कंप्यूटर सिस्टम की,
और कैसे तेजी से कमजोर हम बहुत अच्छी तरह से हो सकता है.
>> अब जब कि ब्रेकआउट ने कहा, के साथ.
तो ब्रेकआउट है समस्या तीन सेट, और ब्रेकआउट पहल साल से एक खेल है
यदि आपको याद हो सकता है कि, लेकिन हमारे लिए समस्या में, तीन सेट
यह हमें लेने के लिए अनुमति देता है चीजों को एक पायदान का बैक अप
, हम कार्यक्रमों लिख रहे हैं ताकि जब यहां तक ​​कि इस तरह एक टर्मिनल विंडो में,
हम वास्तव में, अंत में, चला सकते हैं चित्रमय कार्यक्रमों नहीं
उन के विपरीत हम था स्क्रैच में करने के लिए उपयोग.
तो यह कर्मचारियों की है ब्रेकआउट के कार्यान्वयन,
जो सिर्फ इस ईंट तोड़ने है खेल, तुम वापस अपने पैडल को स्थानांतरित कि
और आगे, और आप गेंद को हिट ऊपर उन रंग ईंटों के खिलाफ.
तो यह हमें ला रहा है की तरह वापस करने के लिए जहां
हम बहुत जल्दी होने के लिए सक्षम थे खरोंच के साथ, और अब सी के साथ,
हमारे अपने को लागू ग्राफिकल यूजर इंटरफेस.
>> लेकिन उस से अधिक, यह समस्या सेट के पहले का प्रतिनिधित्व करता है
जिसमें हम दे रहे हैं आप कोड का एक गुच्छा.
और वास्तव में, मैं स्पष्ट लाना इस पर ध्यान, विशेष रूप से, क्योंकि
उन कम आराम के लिए, यह समस्या, कम से कम पहली नज़र में, सेट
की तरह महसूस करने के लिए जा रहा है हम एक पायदान ऊपर ले लिया है.
, हम आपको दे दिया है क्योंकि खोज से कुछ के लिए
और pset में समस्याओं छँटाई, हम लिखा है कि कोड का एक गुच्छा,
और टिप्पणियों के एक जोड़े कि, "ऐसा करने के लिए कहते हैं"
जहां आप रिक्त स्थान को भरने के लिए है.
तो भी डरावना नहीं है, लेकिन यह पहली बार है
हम आपको कोड सौंपने रहे हैं आप की जरूरत है कि पहला, पढ़ना, समझना, और उसके बाद के लिए जोड़
और इसे पूरा.
>> और फिर ब्रेकआउट के साथ, हम भी ऐसा ही करने जा रहे हैं
आप कुछ दर्जन से अधिक लाइनों दे कोड की, स्पष्ट रूप से, आप दे कि
ढांचे के लिए एक बहुत खेल लेकिन कम रोक
की ईंटों को लागू और गेंद और चप्पू,
लेकिन हम कुछ अन्य सुविधाओं को लागू करना.
और यहां तक ​​कि पहली नज़र में लगता है कि, फिर से, विशेष रूप से, कम आरामदायक अगर
विशेष रूप से कठिन लग सकता है और आप इतने सारे नए कार्य लगता है कि वहाँ
आप अपने मन लपेटो करने की जरूरत है चारों ओर, और यह सच है.
लेकिन यह बात है, मन में रखना काफी खरोंच की तरह.
बाधाओं आप सब का उपयोग नहीं किया हैं स्क्रैच में पहेली टुकड़े.
बाधाओं आप रैप करने के लिए परवाह नहीं की हैं उन सभी के आसपास अपने मन
यह सब ले लिया था क्योंकि एक नज़र, ओह, समझने के लिए
कि मैं क्या कर सकता है उस पहेली टुकड़े के साथ.
और वास्तव में, समस्या में सेट 3 कल्पना, हम आप बात करेंगे
प्रलेखन पर कि करेंगे कुछ नए कार्य करने के लिए परिचय,
और अंत में प्रोग्रामिंग आप उपयोग constructs.
, छोरों कानून, चर, और कार्य
करने के समान होगा क्या हम इस प्रकार अब तक देखा है.
>> तो वास्तव में, हम क्या दे दूँगा आप कुछ नमूना कोड है कि
आप एक खिड़की बना सकते हैं कि, इस के विपरीत नहीं लग रहा है
और अंततः में बदल जाते हैं काफी कुछ इस तरह.
तो CS50 का लाभ लेने, कार्यालय समय और अधिक चर्चा
और तथ्य यह है कि में आराम ले आप लिखने के लिए कोड की राशि
वास्तव में नहीं है कि सभी ज्यादा है.
पहली चुनौती सिर्फ acclimate करने के लिए है अपने आप को कुछ कोड को हम लिखा है.
>> Pset3 पर कोई प्रश्न, SHELLSHOCK, या अन्यथा?
>> दर्शक: यह की तरह लग रहा था ब्रेकआउट के साथ से गुजर रही
कोड लगभग है कि एक वस्तु उन्मुख शैली,
लेकिन मैं सी एक सोचा था वस्तु उन्मुख कार्यक्रम.
स्पीकर 1: एक अच्छा सवाल.
तो के माध्यम से तलाश में वितरण कोड, कोड
हम pset3 के लिए लिखा था उन परिचित के लिए, यह
यह एक है की तरह लग रहा है छोटी वस्तु उन्मुख.
संक्षिप्त जवाब यह है, है.
यह आप कैसे की एक सन्निकटन है का उपयोग कर वस्तु उन्मुख कोड हो सकता है
सी की तरह एक भाषा है, लेकिन यह है अभी भी अंततः प्रक्रियात्मक.
के अंदर कोई तरीके हैं चर, जैसा कि आप देखेंगे.
लेकिन यह उस की याद ताजा करती है.
और हम फिर से उस सुविधा देखेंगे हम PHP और जावास्क्रिप्ट को मिलता है जब
अंत सेमेस्टर की ओर.
लेकिन अब के लिए, के रूप में सोच क्या है की एक संकेत आने के लिए.
अच्छा सवाल है.
ठीक है.
इसलिए तरह था मर्ज कैसे हम बाएं बातें पिछली बार.
और प्रकार में अच्छा था मर्ज भावना यह इतना तेज था कि,
कम से कम सरसरी परीक्षण पर आधारित हम बुलबुले हैं, कहते हैं, की तुलना में पिछले हफ्ते किया
क्रमबद्ध, चयन क्रमबद्ध, सम्मिलन तरह.
और क्या बहुत साफ था बस है कैसे संक्षेप और सफाई
आप इसे व्यक्त कर सकते हैं.
और हम इसे एक ऊपरी था क्या कहा मर्ज का समय चल रहा है पर बाध्य
तरह?
हाँ?
>> दर्शक: n लॉग?
>> स्पीकर 1: n सही, लॉग एन. n लॉग.
और हम क्या करने के लिए कि वापस आ गया हूँ वास्तव में इसका मतलब है या कि कहाँ से आता है,
लेकिन यह बेहतर था क्या चल रहा है समय से
हम बुलबुले के लिए देखा था कि चयन और सम्मिलन सॉर्ट?
तो n चुकता. n चुकता , इस से भी बड़ा है
और यह काफी स्पष्ट नहीं है, भले ही लॉग एन की तुलना में छोटी है,
तो आप एन बार करते हैं n से कुछ छोटे,
यह n चुकता की तुलना में कम होने जा रहा है.
यह वहाँ अंतर्ज्ञान का एक सा है.
लेकिन हम इस बात के लिए एक कीमत चुकानी पड़ी.
यह तेजी से गया था, लेकिन एक विषय शुरू कर दिया है कि पिछले सप्ताह में उभरने के लिए इस tradeoff था.
मैं बेहतर प्रदर्शन मिला समय बुद्धिमान, लेकिन क्या
मैं दूसरे पर खर्च करने के लिए किया था हाथ, कि आदेश में प्राप्त करने के लिए?
>> दर्शक: मेमोरी.
स्पीकर 1: फिर से कहो?
दर्शक: मेमोरी.
स्पीकर 1: स्मृति, या अंतरिक्ष अधिक आम तौर पर.
और यह सुपर नहीं था हमारे मनुष्यों के साथ स्पष्ट,
लेकिन हमारे स्वयंसेवकों कि याद आगे कदम और आगे बढ़ गया
हालांकि के रूप में वापस एक सरणी है हालांकि यहाँ के रूप में, और वहाँ
यहां कि एक दूसरे सरणी वे इस्तेमाल कर सकते हैं क्योंकि हम
जरूरत किसी जगह उन लोगों को मर्ज करने के लिए.
हम सिर्फ जगह में उन्हें स्वैप नहीं कर सका.
तो क्रमबद्ध लाभ उठाने विलय और अधिक स्थान है, जो
हम साथ की जरूरत नहीं थी अन्य एल्गोरिदम,
लेकिन उल्टा यह बहुत तेजी से होता है.
और सच कहूँ तो, वास्तविक दुनिया अंतरिक्ष में इन days-- रैम, हार्ड डिस्क space--
अपेक्षाकृत सस्ता है, और इतनी है कि जरूरी नहीं कि एक बुरी बात.
>> तो, चलो एक त्वरित देखो एक छोटे से अवगत अधिक विधिपूर्वक, हम क्या किया
और यही कारण है कि हम इसे n लॉग रहा था.
तो यहाँ आठ नंबर हैं और आठ स्वयंसेवकों हम पिछली बार किया था.
और मर्ज कि पहली बात क्रमबद्ध करने के लिए हमें क्या बताया?
दर्शक: दो में फूट डालो.
स्पीकर 1: फिर से कहो?
दर्शक: दो में फूट डालो.
स्पीकर 1: दो में फूट डालो, ठीक है.
इस की बहुत याद ताजा करती है विभाजन की फोन बुक,
और अधिक आम तौर पर जीत.
इसलिए हम बाईं आधे पर देखा.
और हम क्रमबद्ध ने कहा, फिर एक बार तत्वों के बाईं आधा,
हम आगे क्या कहा?
वामपंथियों के बाईं आधा छांटे आधा, जो, हमें करने की अनुमति दी
दो में विभाजन के बाद, चार और दो पर ध्यान केंद्रित.
>> कैसे आप में, अब एक सूची तरह है पीले, सॉर्ट मर्ज का उपयोग आकार दो, की?
खैर यह आधे में विभाजित है, और बाईं आधा तरह.
और यह जहां चीजें थी एक थोड़ा बेवकूफ संक्षेप में मिला है.
आप की है कि एक सूची तरह कैसे आकार एक, यहाँ यह संख्या चार की तरह?
इसे हल है.
आप कर रहे हैं.
>> लेकिन तब आप कैसे की एक सूची तरह है आकार में यह संख्या दो है जब एक?
ठीक है, लेकिन अब क्या एक ही बात थी तीसरे और मर्ज प्रकार में महत्वपूर्ण कदम?
आप बाईं विलय करना पड़ा आधा और सही आधा.
हम किया है कि एक बार और, हम देखा चार में, हम दो को देखा.
हम सभी सही फैसला किया जाहिर है दो, पहले आता है
तो हम में दो डाल अपनी चार से पीछा जगह,.
और अब आप की तरह उल्टा करने के लिए, और इस विशेषता की तरह है
मर्ज की तरह एक एल्गोरिथ्म की क्रमबद्ध, स्मृति में उल्टा.
कहानी की अगली पंक्ति क्या था?
मैं आगे क्या करने पर ध्यान केंद्रित किया जाना चाहिए?
बाईं के ठीक आधे छह और आठ है जो आधे,.
>> तो मुझे सिर्फ इस माध्यम से कदम बहुत ज्यादा बात belaboring बिना.
छह और आठ, तो छह है हल, आठ हल है.
कि जैसे उन्हें एक साथ विलय, और अब अगला बड़ा कदम
जाहिर है, से ठीक आधे तरह है इस एल्गोरिथ्म के पहले ही कदम.
तो हम एक, तीन, सात, पांच पर ध्यान केंद्रित.
हम तो बाईं आधे पर ध्यान केंद्रित.
उस की बाईं आधा, के ठीक आधे कि, और फिर एक और तीन में विलय.
तो फिर ठीक आधे, तो आधा छोड़ा इसके बारे में, तो इसके बारे में सही आधा.
कदम क्या रहता है अब इसमें मिलाएं, और?
बड़ा बाईं आधा और बड़ा मर्ज सही आधा, तो एक है, वहाँ नीचे चला जाता है
तो फिर तो फिर दो, तीन, चार, पांच, तो छह, तो सात, फिर आठ.
>> तो अब यही कारण अंततः खुलासा है, खासकर अगर एन और लघुगणक अधिक
आम तौर पर नहीं बल्कि, आप बच कम से कम हाल की स्मृति में?
खैर, इस बात की ऊंचाई नोटिस.
हम आठ तत्वों की थी, और हम दो से, दो से, दो से विभाजित.
तो आधार के लिए लॉग इन आठ में से दो अमेरिकी तीन देता है.
और उस पर मुझे भरोसा है कि अगर उस पर थोड़ा धुंधला.
लेकिन, आठ की दो तीन आधार लॉग इन करें तो हम विलय की तीन परतों किया है.
और हम विलय कर दिया जब तत्वों, कितने तत्वों
हम उन पंक्तियों में से प्रत्येक पर पर लग रही थी?
एन के एक कुल, है ना?
शीर्ष पंक्ति को मर्ज करने की वजह से, हम टुकड़ों में ऐसा किया था, भले ही
हम अंत में एक बार हर संख्या को छुआ.
और दूसरी पंक्ति में, करने के लिए आकार दो की उन सूचियों विलय,
हम एक बार प्रत्येक तत्व को छूने के लिए किया था.
और फिर यहाँ सच स्पष्ट रूप से अंतिम पंक्ति में,
हम उन लोगों में से प्रत्येक को छूने के लिए किया था एक बार, लेकिन केवल एक बार तत्वों,
इसलिए इस के साथ साथ हमारी लॉग एन एन, तो, निहित है.
>> और अब सिर्फ एक छोटी चीजें बनाने के लिए बस एक पल के लिए औपचारिक अधिक, तुम अगर
अब इस विश्लेषण किया गया उच्च स्तर के एक प्रकार पर
और कैसे अच्छी तरह से तय करने की कोशिश आप को व्यक्त करने के बारे में जाना हो सकता है
इस एल्गोरिथ्म के समय चल रहा है बस इसे और नहीं देख कर
एक काल्पनिक उदाहरण का उपयोग करके?
खैर, कितना समय आप एक कहेंगे पीले रंग में इस ले जाएगा जैसे कदम,
n <2 वापसी तो क्या होगा?
यही है की एक बड़ी हे है?
इसलिए मुझे लगता है, एक है, तो एक कदम देख रहा हूँ शायद दो चरणों में यह तो है क्योंकि
और फिर लौटने के लिए, लेकिन यह बात है लगातार समय, सही?
इसलिए हम ओ (1), और कहा कि कहा मैं इस व्यक्त करेंगे.
टी, बस समय चल रहा हो.
एन, इनपुट के आकार है इसलिए टी (एन), सिर्फ एक अच्छा तरीका
चल रहा है कहने का आकार n का समय दिया इनपुट
क्रम पर होने जा रहा है लगातार समय की, हे में (1).
>> लेकिन अन्यथा, इस बारे में क्या?
आप व्यक्त करेंगे कैसे इस पीली लाइन का समय चल रहा है?
क्या टी?
आप की तरह यहाँ धोखा दे सकती है और cyclically मेरे सवाल का जवाब.
तो चल समय में अगर हम सिर्फ कहने जनरल टी (एन) है.
और अब आप की तरह यहाँ punting रहे हैं और , ठीक है, बस बाईं आधा सॉर्ट, कह रही है
और फिर सही आधा तरह.
हम प्रतीकात्मक प्रतिनिधित्व कैसे हो सकता है इस पीली लाइन का समय चल रहा है?
क्या टी?
इनपुट का आकार क्या है?
दो से अधिक एन.
क्यों मैं सिर्फ यह कहना है कि नहीं है?
और फिर यह एक और टी (एन / 2) और फिर फिर, मैं दो हल आधा मर्ज तो,
कितने तत्वों मैं जा रहा हूँ कुल स्पर्श करने के लिए है?
एन.
इसलिए मुझे लगता है, यह व्यक्त कर सकते हैं बस, एक तरह से कल्पना की
सामान्य तौर पर चल रहा है समय के रूप में.
टी (एन), टी (एन / 2) की बस चलने का समय है प्लस टी (एन / 2), आधा और सही आधा छोड़ा
प्लस शायद n कदम है जो हे (एन),, लेकिन हो सकता है, मैं दो उंगलियों का प्रयोग कर रहा हूँ,
यह कई के रूप में दो बार है कदम है, लेकिन यह रेखीय है.
यह कदम से कुछ नंबर कि, एन के एक कारक है
इसलिए हम इस रूप में व्यक्त हो सकता है.
और यह हम को बाज़ी करेंगे जहां अब है वापस अपने उच्च विद्यालय के गणित की पाठ्यपुस्तक की
हम अंततः पुनरावृत्ति कि हो समाप्त होता है, यह बराबर, एन बार लॉग एन
आप वास्तव में बाहर करते हैं गणित और अधिक औपचारिक रूप से.
>> तो यह है कि सिर्फ दो दृष्टिकोण है.
एक साथ एक संख्यानुसार प्रतिनिधि उदाहरण हार्ड कोडित
आठ नंबर, और एक अधिक का उपयोग हम वहाँ कैसे मिल गया पर सामान्य देखो.
लेकिन क्या यहां वाकई दिलचस्प है , फिर से, साइकिल की इस धारणा है.
मैं छोरों के लिए प्रयोग नहीं कर रहा हूँ.
मैं एक तरह से परिभाषित कर रहा हूँ खुद के मामले में कुछ,
न केवल इस के साथ गणितीय समारोह,
लेकिन यह भी इस छद्म कोड के संदर्भ में.
इस छद्म कोड पुनरावर्ती है इसके लाइनों की कि दो में
अनिवार्य रूप से यह कह रहा है जाने के लिए एक छोटे हल करने के लिए ही उपयोग
छोटे आकार की समस्या, और फिर बार बार
और फिर जब तक हम छीलना यह इस तथाकथित आधार मामले को नीचे.
>> तो चलो वास्तव में एक अधिक सम्मोहक खींचना ले दूर इस से इस प्रकार के रूप में.
मुझे एडिट में जाकर एक लेते हैं आज के स्रोत कोड से कुछ को देखो,
इस उदाहरण यहां विशेष रूप से.
जाहिरा तौर पर कहते हैं जो सिग्मा 0, संख्या n के माध्यम से एक.
तो क्या परिचित है चलो देखते हैं यहाँ और अपरिचित.
पहले हम की एक जोड़ी है भी शामिल है, तो कोई नई बात नहीं है वहाँ.
प्रोटोटाइप.
मैं पर थोड़ा धुंधला रहा हूँ यह कुछ दिनों के बाद,
लेकिन हम एक क्या कहा एक समारोह के प्रोटोटाइप है?
दर्शक: [अश्राव्य].
स्पीकर 1: वह क्या है?
दर्शक: हम यह घोषणा.
स्पीकर 1: हम यह घोषणा.
तो आप, अरे, बजना अध्यापन कर रहे हैं वास्तव में अभी तक यह लागू नहीं,
लेकिन कहीं न कहीं इस फाइल में, शायद, एक समारोह में क्या कहा जा रहा है?
सिग्मा.
और यह सिर्फ एक वादा है कि यह इस तरह लग रहा है.
यह रूप में एक पूर्णांक ले जा रहा है input-- और मैं अधिक स्पष्ट हो सकता है
और int n चार प्रकार यह है कहना एक पूर्णांक वापस जाने के लिए जा रहा है,
लेकिन अर्धविराम साधन, मिमी, मैं चारों ओर मिलेगा थोड़ी देर बाद इस को लागू करने के लिए.
फिर, बजना गूंगा है.
यह केवल पता है क्या हो रहा है आप नीचे से ऊपर यह बताने
तो हम कम से कम देने की जरूरत यह क्या है की एक संकेत आने के लिए.
>> अब यहाँ मुख्य देखो.
यहाँ नीचे स्क्रॉल करते हैं और कर रही है मुख्य देखते हैं क्या.
यह एक समारोह है कि लंबे समय तक नहीं है, और वास्तव में यहां निर्माण परिचित है.
मैं तो एक चर n घोषणा, और मैं फिर से और फिर उपयोगकर्ता परेशान
getInt का उपयोग कर एक सकारात्मक पूर्णांक के लिए, और इस लूप के बाहर ही बाहर निकलें
एक बार उपयोगकर्ता पालन किया है.
जबकि, हम करने के लिए उपयोग किया है उस रास्ते में उपयोगकर्ता परेशान.
अब यह दिलचस्प है.
मैंने फोन एक पूर्णांक घोषित "जवाब."
मैं यह मान असाइन कहा जाता है एक समारोह के "सिग्मा."
मुझे लगता है कि अभी तक क्या है पता नहीं है, लेकिन मैं एक पल पहले यह घोषणा कर याद.
और फिर मैं जा रहा हूँ मूल्य उपयोगकर्ता, में टाइप, एन कि
और फिर मैं जवाब की रिपोर्ट.
खैर वापस स्क्रॉल जाने बस एक पल के लिए.
इस निर्देशिका में आगे चलते हैं, कर सिग्मा 0, और वास्तव में इस कार्यक्रम को चलाने
और देखो क्या होता है.
मुझे आगे जाना है और चलाते हैं तो इस कार्यक्रम, ./sigma -0,
और मैं एक सकारात्मक में टाइप करें दो तरह पूर्णांक, सिग्मा,
ग्रीक प्रतीक के रूप में निकलता है, बस है से सभी नंबरों को जोड़ने के लिए जा रहा
दो के लिए ऊपर पर शून्य.
तो 0 प्लस 1 प्लस 2.
तो यह उम्मीद है कि मुझे 3 देना चाहिए.
यह बात कर रहा है सब है.
और इसी तरह, अगर मैं फिर से इस दौड़ और मैं यह संख्या तीन दे
कि इतना है कि, 3 प्लस 2 है 5, प्लस 1 मुझे 6 देना चाहिए.
और मैं वास्तव में पागल हो तो और अगर बड़ी संख्या में टाइपिंग शुरू,
यह मुझे देना चाहिए और बड़ी बड़ी रकम.
तो वह सब है.
>> तो क्या सिग्मा की तरह दिखता है?
खैर, यह बहुत स्पष्ट है.
यह हम लागू कर दिया है कैसे हो सकता है सप्ताह की पिछले कुछ के लिए यह.
"पूर्णांक" वापसी प्रकार होने जा रहा है.
सिग्मा नाम है, और इसे लेता है बजाय n के एक चर एम.
मैं शीर्ष कि ऊपर बदल देंगे.
तो यह सिर्फ एक मानसिक स्वास्थ्य की जांच है.
हम एक क्षण में क्यों देखेंगे.
अब मैं एक और चर घोषित, योग, शून्य करने के लिए यह इनिशियलाइज़.
तब मैं पाश के लिए यह है जाहिरा तौर पर स्पष्टता के लिए, पुनरावृति,
मैं = 1 पर से एक = मीटर करने के लिए, जो है जो भी उपयोगकर्ता में टाइप करें, और फिर मैं
इस तरह राशि वेतन वृद्धि.
और फिर राशि लौटा.
>> तो सवालों की एक जोड़ी.
एक, मैं यह है कि मेरी टिप्पणी में दावा एक अनंत लूप के जोखिम से बचा जाता है.
क्यों एक नकारात्मक संख्या में गुजर जाएगा , संभावित, एक अनंत लूप प्रेरित?
>> दर्शक: आप मीटर तक कभी नहीं करेंगे.
>> अध्यक्ष: 1 मीटर तक कभी नहीं.
लेकिन मीटर में पारित, तो चलो है एक सरल उदाहरण पर विचार करें.
एम द्वारा में पारित हो जाता है नकारात्मक रूप में उपयोगकर्ता.
चाहे मुख्य की.
मुख्य से बचाता है यह भी है, तो मैं अभी कर रहा हूँ
साथ वास्तव में गुदा जा रहा है सिग्मा भी बनाना
कि इनपुट नकारात्मक नहीं हो सकता.
एम नकारात्मक है तो, अगर नकारात्मक एक तरह से कुछ.
क्या होने वाला है?
खैर, मैं करने जा रहा है एक करने के लिए प्रारंभ हो,
और फिर मैं होने जा रहा है कम से कम या मीटर के बराबर?
>> समर्थन करना.
यही है, के नहीं जाने was-- इस कहानी से इंकार करते हैं.
मैं क्योंकि, यह सवाल नहीं पूछा मैं की ओर इशारा करते हूँ कि जोखिम
मैं है क्योंकि ऐसा करने के लिए नहीं जा रहा है हमेशा अधिक से अधिक than-- ठीक हो जा रहा है,
मुझे लगता है कि सवाल वापस लेना.
ठीक.
यहाँ केवल इस हिस्से पर ध्यान केंद्रित करते हैं.
क्यों मैं कुछ घोषित किया लूप के बाहर?
लाइन मैं 49 पर नोटिस लूप के अंदर मैं घोषित,
लेकिन ऑनलाइन 48 मैं कुछ बाहर की घोषणा की.
हाँ.
दर्शक: [अश्राव्य].
स्पीकर 1: यकीन है.
तो पहली और महत्वपूर्ण बात मैं निश्चित रूप से नहीं करना घोषित और राशि को प्रारंभ करना चाहते हैं
के शून्य के अंदर करने के लिए हर यात्रा पर पाश,
यह स्पष्ट रूप से हार होगी क्योंकि ऊपर की संख्या में संक्षेप के उद्देश्य.
मैं बदलते रखना होगा वापस शून्य करने के लिए मूल्य.
और यह भी, क्या एक और अधिक रहस्यमय है कि एक ही डिजाइन निर्णय के लिए कारण?
हाँ.
>> दर्शक: [अश्राव्य].
स्पीकर 1: बिल्कुल.
मैं इसे बाहर का उपयोग करना चाहते हैं भी क्या लाइन पर पाश की?
53 पर.
और अंगूठे के हमारे नियम पर आधारित व्याख्यान की एक जोड़ी पहले से,
चर के लिए, वास्तव में, scoped रहे उन्हें धरना कि घुंघराले ब्रेसिज़.
मैं अंदर राशि की घोषणा नहीं करते हैं तो इन बाहरी घुंघराले ब्रेसिज़ की,
मैं लाइन 53 में इसका इस्तेमाल नहीं कर सकते हैं.
मैं घोषित, तो दूसरा रास्ता रखो यहाँ में, या भी भीतर राशि
पाश के लिए, मैं 53 में इसे उपयोग नहीं कर सका.
चर प्रभावी रूप से चला गया होगा.
तो वहाँ कारणों की एक जोड़ी.
लेकिन अब चलो वापस जाना और देखो क्या होता है.
तो सिग्मा बुलाया जाता है.
यह 1 प्लस 2, या 1 प्लस 2 के लिए कहते हैं प्लस 3, और फिर, मान देता है
जवाब में यह स्टोर, और यहाँ printf मैं स्क्रीन पर देख रहा हूँ क्यों है.
तो यह है कि हम एक चलने का फोन करता हूँ क्या है दृष्टिकोण, जहां चलना बस
एक पाश का प्रयोग होता है.
पाश, एक जबकि पाश, एक मत देर के लिए एक पाश, बस फिर से कुछ कर रही है
और फिर और फिर.
>> लेकिन सिग्मा एक स्वच्छ समारोह में की तरह है मैं इसे दूसरे तरीके से लागू कर सकता है.
इस बारे में क्या, जो बस, एक तरह से शांत होने के लिए
मुझे वास्तव में छुटकारा मिलता है व्याकुलता का एक बहुत की
इस समारोह क्योंकि वास्तव में काफी आसान है.
चलो छीलना यह नीचे बस इसकी चार मुख्य लाइनों के लिए
और से छुटकारा पाने के सभी टिप्पणियाँ और घुंघराले ब्रेसिज़.
यह एक मन उड़ाने की तरह है वैकल्पिक कार्यान्वयन.
सब ठीक है, शायद दिमाग उड़ा नहीं, लेकिन यह sexier, सब ठीक है की तरह है,
इतना अधिक संक्षेप में इस पर ध्यान देने की.
कोड के सिर्फ चार लाइनों, मैं पहली बार इस मानसिक स्वास्थ्य की जांच की है.
मीटर से कम या बराबर है शून्य, सिग्मा कोई मतलब नहीं है.
यह केवल में माना जाता है सकारात्मक संख्या के लिए इस मामले,
तो मैं बस करने के लिए जा रहा हूँ मनमाने ढंग से शून्य वापस
हम कम से कम इतना है कि कुछ आधार मामले तथाकथित.
>> लेकिन यहाँ खूबसूरती है.
उनका कहना है इस विचार की संपूर्णता, n करने के लिए 1 से नंबर, या इस मामले में मीटर,
हिरन गुजर की तरह से किया जा सकता है.
खैर, एम 1 की राशि क्या है?
ठीक है, तुम जानते हो क्या?
यह मीटर की राशि के रूप में ही है प्लस एम शून्य से 1 के लिए 1 का योग.
वैसे आप जानते हो क्या?
एम शून्य से 1 के सिग्मा क्या है?
खैर, अगर आप इस तरह की पालन तार्किक रूप से, यह मीटर शून्य से 1 के रूप में ही है
प्लस एम शून्य से 2 की सिग्मा.
तो आप की तरह just-- कर सकते हैं आप अभी कर रहे हैं इस तरह है,
एक दोस्त को परेशान करने की कोशिश कर और वे तुम्हें एक सवाल पूछना,
आप की तरह, एक सवाल के साथ जवाब आप की तरह हिरन गुजर रख सकते हैं.
लेकिन क्या महत्वपूर्ण है कि आप रखना अगर वह यह है कि प्रश्न और छोटे छोटे बना
और छोटे, आप कर रहे हैं सिग्मा क्या पूछ नहीं
n के, की सिग्मा क्या है एन, एन के सिग्मा क्या है?
तुम क्या पूछ रहे हैं n के सिग्मा, क्या सिग्मा
के एन माइनस 1, एन शून्य से 2 की सिग्मा क्या है?
आखिरकार अपने सवाल क्या बनने जा रहा है?
एक या सिग्मा क्या है शून्य, कुछ बहुत छोटे मूल्य,
और जैसे ही आप के रूप में , कि, अपने दोस्त मिल
आप पूछने के लिए नहीं जा रहे हैं फिर वही सवाल,
तुम सिर्फ अरे यह शून्य है, कहने के लिए जा रहे हैं.
हम इस प्रकार का खेल कर रहे हैं बेवकूफ चक्रीय खेल की.
>> तो प्रत्यावर्तन प्रोग्रामिंग में कार्य है एक समारोह के ही बुला.
संकलित और चलाने जब इस कार्यक्रम है, ठीक उसी तरह व्यवहार करने के लिए जा रहा है,
लेकिन क्या महत्वपूर्ण है कि अंदर है सिग्मा नामक एक समारोह का,
कोड जिसमें से एक रेखा है हम खुद को बुला रहे हैं
जो सामान्य रूप से बुरा होगा.
उदाहरण के लिए, क्या पहले मैं अगर इस संकलित, तो sigma-- बनाने
सिग्मा 1 ./sigma -1 बना.
सकारात्मक पूर्णांक, कृपया, 50 1275.
तो क्या कार्य करने के लिए लगता है सही एक परीक्षण के आधार पर, हो.
लेकिन मैं एक छोटे से खतरनाक क्या मिलता है और तथाकथित आधार मामले को हटाना,
और सिर्फ अच्छी तरह से मैं अभी कर रहा हूँ, कहते हैं यह है की तुलना में यह अधिक जटिल.
चलो बस सिग्मा की गणना करते हैं एम लेने और फिर जोड़कर
एम शून्य से एक के सिग्मा में?
खैर, क्या यहाँ होने जा रहा है?
के बाहर ज़ूम करते हैं.
कार्यक्रम recompile करते हैं, , इसे बचाने के लिए कार्यक्रम recompile,
और फिर तैयार ./sigma-1, में zooming , 50 सकारात्मक पूर्णांक कृपया दर्ज करें.
आप में से कितने तैयार हैं उस देखने के लिए ऊपर fess करने के लिए?
>> ठीक.
तो इस बात के लिए भी हो सकता है कारणों में से एक नंबर,
और स्पष्ट रूप से इस सप्ताह हम कर रहे हैं आप उनमें से अधिक देने के बारे में.
लेकिन इस मामले में, कोशिश पीछे की ओर कारण
यहाँ क्या हुआ होगा?
विभाजन गलती, हम पिछले कहा समय, स्मृति का एक खंड को दर्शाता है.
कुछ बुरा हुआ है.
लेकिन यह क्या था यंत्रवत् धराशायी हो गईं कि
यहाँ क्योंकि मेरे हटाने की उस तथाकथित आधार मामले की,
जहां मैं एक हार्ड कोडित मान दिया?
आप क्या गलत हो गया लगता है?
हाँ.
>> दर्शक: [अश्राव्य].
स्पीकर 1: आह.
अच्छा सवाल है.
संख्या का आकार तो मैं संक्षेप गया था
यह पार हो गई है कि इतना बड़ा मिला स्मृति अंतरिक्ष के आकार.
विचार अच्छा है, लेकिन नहीं मौलिक एक दुर्घटना के कारण हो रहा.
यही पूर्णांक अतिप्रवाह के कारण हो सकता, बिट्स बस उलटा जहां
और फिर हम एक बहुत बड़ी गलती एक नकारात्मक संख्या तरह की संख्या,
लेकिन अपने आप में एक दुर्घटना का कारण नहीं होगा.
क्योंकि के अंत में दिन एक पूर्णांक अभी भी 32 बिट है.
आप के लिए नहीं जा रहे हैं गलती से एक 33 वीं बिट चोरी.
लेकिन एक अच्छा विचार.
हाँ.
>> दर्शक: [अश्राव्य].
स्पीकर 1: विधि कभी नहीं चल रहा बंद हो जाता है,
और वास्तव में यह फिर से खुद को कॉल और फिर और फिर और फिर
और फिर, और से कोई भी कभी उन कार्यों
के अपने एकमात्र लाइन क्योंकि खत्म कोड बार बार themself कॉल
और फिर.
और क्या सच है हम यहाँ क्या हो रहा है, और अब
तरह की pictorially यह आकर्षित कर सकते हैं.
मुझे एक के लिए खत्म हो जाने दो बस एक पल के लिए तस्वीर.
यह कि, एक तस्वीर है अंततः बाहर मांस होगा
और अधिक विस्तार में, क्या हो रहा है की आपके कंप्यूटर की मेमोरी के अंदर.
और यह उस पर पता चला है इस तस्वीर के नीचे
ढेर कहलाती है.
इस का एक हिस्सा है स्मृति, राम का एक हिस्सा,
कि बस किसी भी समय इस्तेमाल किया है एक समारोह में कहा जाता है.
किसी भी समय आप एक प्रोग्रामर, एक समारोह कॉल,
ऑपरेटिंग सिस्टम, जैसे मैक ओएस, विंडोज, या लिनक्स,
पकड़ लेता बाइट्स का एक गुच्छा, शायद एक कुछ किलोबाइट, शायद कुछ मेगाबाइट
स्मृति की, उन्हें हाथ आप के लिए, और फिर देता है
आप का प्रयोग कर अपने कार्य को चलाने जो भी चर आप की जरूरत है.
और तुम तो एक और फोन अगर समारोह और एक अन्य समारोह,
आप स्मृति का एक और टुकड़ा मिल और स्मृति का एक और टुकड़ा.
>> और वास्तव में, इन हरे ट्रे अगर Annenberg से, कि स्मृति का प्रतिनिधित्व
यहां पहले क्या होता है बार जब आप समारोह सिग्मा कहते हैं.
यह इस तरह एक ट्रे डाल की तरह है शुरू में एक खाली ढेर है पर.
लेकिन तब यदि उस ट्रे इतनी बात करने के लिए, खुद को कहता है,
एक और उदाहरण बुला सिग्मा की, कि
ऑपरेटिंग सिस्टम पूछ की तरह, ओह, एक छोटे से अधिक स्मृति की आवश्यकता
मुझे उस दे.
और फिर यह शीर्ष पर पर ढेर हो जाता है.
लेकिन क्या यहां महत्वपूर्ण यह है कि पहले ट्रे, अभी भी वहाँ है
वह इस दूसरे ट्रे लागू है.
अब इस बीच, सिग्मा सिग्मा कहते हैं, कि अधिक स्मृति के लिए पूछ की तरह है.
यहाँ पर ढेर हो जाता है.
सिग्मा कि एक और है, सिग्मा कॉल यहाँ पर ढेर हो जाता है कि ट्रे.
और आप यह कर रखें हैं, अंत में, एक तरह से यह दृश्य नक्शा
उस चार्ट को, करने के लिए क्या हो रहा है ट्रे के ढेर के साथ हो?
यह राशि पार करने के लिए जा रहा है स्मृति के अपने कंप्यूटर है.
और जैसे ही यह हरे रंग ट्रे के रूप में क्षैतिज रेखा से अधिक है
ढेर के ऊपर और उस शब्द के ढेर के ऊपर, जो हम भविष्य में करने के लिए वापस आ जाएगा,
कि एक बुरी बात है.
ढेर एक अलग है स्मृति का खंड,
और आप इन करते हैं ट्रे ढेर और ढेर पर
आप को पार करने के लिए जा रहे हैं स्मृति के अपने खुद के खंड,
और एक कार्यक्रम वास्तव में दुर्घटना के लिए जा रहा है.
>> अब एक तरफ, इस विचार के रूप में प्रत्यावर्तन की, इसलिए,
स्पष्ट रूप से, समस्याओं को जन्म दे सकता है लेकिन यह जरूरी नहीं कि एक बुरी बात नहीं है.
विचार करें, क्योंकि बाद सभी, how-- और शायद
यह कुछ का इस्तेमाल किया जा रहा लेता है --how को सुरुचिपूर्ण या कैसे सरल
सिग्मा की कि कार्यान्वयन था.
और हम का उपयोग करने के लिए नहीं जा रहे हैं CS50 में सब इतना प्रत्यावर्तन,
लेकिन CS51 में, और वास्तव में किसी भी वर्ग आप डेटा संरचनाओं में हेरफेर जहां
पेड़, या परिवार के पेड़ की तरह, कि, कुछ पदानुक्रम है
यह सुपर उपयोगी, सुपर है.
अब, एक तरफ, तो के रूप में आपको लगता है कि कंप्यूटर वैज्ञानिकों इच्छुक रूप
गूगल की कुछ के साथ परिचित हैं आप गूगल के पास जाओ तो अंदर चुटकुले,
और तुम क्या है देखो , की परिभाषा का कहना है, प्रत्यावर्तन, दर्ज करें.
उह.
एक अलग रूप में, मैं कुछ ऊपर खींच लिया.
इस के 10 मिनट की तरह था विलंब आज सुबह.
यदि आप भी गूगल "तिरछा," नोटिस अपने सिर झुकने से slightly--
और फिर यह एक शायद है सभी का सबसे नृशंस
किसी तरह खर्च के बाद इस लागू करने के उनके दिन
कुछ साल पर आ ago--.
ओह, wait-- कि एक बग है.
>> इसलिए में से एक पर चल रहे दुनिया की सबसे बड़ी वेबसाइटों
इन मूर्ख थोड़ा ईस्टर अंडे हैं.
वे शायद एक भस्म कोड की लाइनों के nontrivial संख्या
अभी हम कर सकते हैं कि इतना उस तरह थोड़ा मजेदार बातें.
लेकिन कम से कम अब आप मिल उन के अंदर मजाक के कुछ.
>> अब हम में से कुछ पर एक नज़र रखना सफेद, हम देर से कह रहा हूँ झूठ
और वापस छील करने के लिए शुरू कुछ परतों तकनीकी रूप
आप वास्तव में समझने के लिए इतना है कि क्या चल रहा है
और आप समझ सकते हैं खतरों में से कुछ,
SHELLSHOCK तरह, कि अब बनने के लिए शुरू कर दिया है
सभी की सबसे आगे पर ध्यान, कम से कम मीडिया में.
तो यहाँ एक बहुत ही सरल कार्य है उस शून्य को, कुछ भी नहीं देता है.
इसका नाम स्वैप है.
यह दो चर में लेता है और यह कुछ भी नहीं देता है.
ए और बी में ले जाता है.
तो एक त्वरित प्रदर्शन.
हम इन लाया.
हम के रूप में अच्छी तरह से एक छोटे से लग सकता है बस एक पल के लिए यहाँ तोड़
और पीने के लिए कुछ है.
किसी को शामिल होने से बुरा नहीं होता यहां सिर्फ एक पल के लिए मुझे.
कैसे लाल रंग की कमीज में आप के बारे में?
ऊपर आओ.
बस एक आज.
हालांकि, धन्यवाद.
सब ठीक है, और हम हैं जो यहां आ रहे हैं?
आपका नाम क्या है?
>> अध्यक्ष 4: लौरा.
>> स्पीकर 1: लौरा.
ऊपर आओ.
तो लौरा, बहुत सरल चुनौती आज.
यो मिलकर अच्छा लगा.
ठीक है.
इसलिए हम यहां पर कुछ दूध है और हम यहाँ पर कुछ संतरे का रस है
और कुछ कप कि हम आज Annenberg से उधार लिया.
>> अध्यक्ष 4: उधार लिया.
स्पीकर 1: और आगे जाने के लिए जा और आप इस के आधा गिलास दे.
ठीक है.
और हम तुम आधा देता हूँ एक गिलास दूध.
ओह, और सिर्फ आप कर सकते हैं कि इतना , इस तरह था क्या याद
मैं लाने के लिए याद किया यह ऊपर और आज पर.
ठीक है.
आप मन नहीं होता है, तो चलो देखते हैं, हम अपने खुद के चश्मे पर उन्हें रख सकते हैं
अगर आप चाहते हैं.
इस लौरा की आंखों से दुनिया हो जाएगा.
ठीक है.
तो अपने लक्ष्य के दो कप दिया यहाँ तरल, दूध और संतरे का रस,
दो सामग्री स्वैप इतना है कि संतरे का रस दूध कप में चला जाता है
और दूध में चला जाता है संतरे का रस कप.
>> अध्यक्ष 4: मैं एक और कप मिलता है?
स्पीकर 1: मैं हालांकि, आप से पूछा खुश हूँ यह ज्यादा बेहतर फुटेज गया होता
आप से पूछा नहीं था.
लेकिन हाँ, हम आपको एक तीसरी पेशकश कर सकते हैं जाहिर है, खाली है कि कप.
ठीक है.
तो वहाँ सामग्री स्वैप.
बहुत अच्छा.
आप उल्लेखनीय ध्यान से यह कर रहे हैं.
और तीन कदम.
ठीक है.
बहुत बढ़िया.
प्रशंसा का एक बड़ा दौर लौरा के लिए अच्छा होगा.
ठीक है.
हम एक छोटे से बिदाई उपहार है आप के लिए, लेकिन मुझे इन लेते हैं.
बहुत बहुत धन्यवाद.
तो एक साधारण उदाहरण है, हालांकि, यदि आप करते हैं कि प्रदर्शन करने के लिए
सामग्री स्वैप करना चाहते हैं दो कंटेनरों की,
या के चर उन्हें फोन करते हैं, आप कुछ अस्थायी भंडारण की आवश्यकता
इतने में सामग्री का एक मंच आप वास्तव में स्वैप कर सकते हैं.
तो वास्तव में, यहाँ इस स्रोत कोड में सी वास्तव में इस बात का प्रतिनिधि है.
संतरे का रस एक और दूध था , बी था, और हम दो स्वैप करना चाहता था
आप रचनात्मक कुछ करने की कोशिश कर सकता है अन्य में एक गिरने से,
लेकिन वह शायद नहीं होता विशेष रूप से अच्छी तरह से अंत.
और इसलिए हम एक तिहाई कप, कॉल का उपयोग यह सम्मेलन द्वारा, टी एम पी tmp
और की सामग्री डाल OJ कि में, तो एक कप स्वैप,
फिर में OJ डाल मूल कप, जिससे
बिल्कुल के रूप में, को प्राप्त करने लौरा, स्वैप किया था.
>> तो चलो ठीक है कि करते हैं.
मुझे आगे जाना है और खोलने के चलो है कि एक उदाहरण ऊपर
वास्तव में कोई "कहा जाता है यह नहीं है क्योंकि ", स्वैप
आप सोच सकते हैं के रूप में आसानी से किया.
इसलिए इस कार्यक्रम में, कि नोटिस मैं stdio.h, हमारे पुराने दोस्त का उपयोग कर रहा हूँ.
मैं प्रोटोटाइप है , वहाँ स्वैप के लिए जो
इसके कार्यान्वयन के मतलब शायद नीचे नीचे,
और चलो देखते हैं मुख्य क्या इस कार्यक्रम मेरे लिए क्या करने जा रहा है.
मैं पहले int x हो जाता घोषित एक, और y दो हो जाता है int.
तो OJ के रूप में उन के बारे में सोच क्रमशः और दूध,.
और फिर मैं सिर्फ एक है printf एक्स यह कह रही है
और वाई अभी तो मैं कर सकता हूँ, यह है नेत्रहीन क्या हो रहा है देखते हैं.
तो मैं दावा कर printf है , मैं दो गमागमन रहा हूँ कि
और फिर मैं एक प्रिंट आउट वे बदली कर रहे हैं का दावा है कि,
और मैं फिर से एक्स और वाई बाहर प्रिंट.
तो यहाँ नीचे स्वैप है में वास्तव में लौरा क्या किया,
और हम पर देखा कि क्या वास्तव में एक पल पहले स्क्रीन.
>> तो चलो आगे चलते हैं और कष्टदायी रूप से निराश हो.
कोई स्वैप बनाओ, और कोई स्वैप चलाने, यहां उत्पादन पर zooming.
दर्ज एक्स वाई बदली गमागमन, 2, 1 है.
एक्स अभी भी 1 है, और वाई अभी भी 2 है.
इसलिए, भले ही स्पष्ट है, यह लग रहा है वास्तव में अधिक तकनीकी रूप से यद्यपि, जैसे,
लौरा क्या किया, काम ही नहीं किया.
तो ऐसा क्यों है?
खैर, यह जब पता चला है कि हम इस तरह से एक प्रोग्राम लिखने
कि दोनों मुख्य,, यहाँ पर प्रकाश डाला गया और फिर एक और समारोह, स्वैप की तरह,
, यहाँ पर प्रकाश डाला यह दुनिया, कॉल
जैसे एक छोटे से कुछ दिखता है एक पल पहले इन ट्रे.
जब मुख्य बुलाया जाता है पहले, कि ऑपरेटिंग सिस्टम पूछ की तरह है
किसी भी स्थानीय के लिए स्मृति का एक बिट के लिए एक्स और मुख्य है कि वाई तरह चर,
और वे अभी भी वहीं खत्म होता है.
मुख्य कॉल स्वैप, और मुख्य लेकिन अगर दो तर्क, ए और बी स्वैप करने के लिए गुजरता है,
संतरे का रस और दूध, यह पसंद नहीं है संतरे का रस और दूध सौंपने
लौरा के लिए.
एक कंप्यूटर क्या करता है, यह है संतरे का रस की प्रतियां गुजरता
इतना है कि लौरा के लिए दूध की और प्रतियां, क्या इस ट्रे के अंदर अंततः है
मूल्य एक और दो, या OJ है और दूध, लेकिन प्रतियां क्या है,
इसलिए कि इस बिंदु पर कहानी में, वहाँ
इन ट्रे में से प्रत्येक में OJ और दूध है.
एक एक और एक दो नहीं है इन ट्रे में से प्रत्येक में,
और स्वैप समारोह वास्तव में काम कर रहा है.
यह अंदर उन्हें गमागमन है दूसरा सर्वोच्च ट्रे की,
लेकिन उस गमागमन कोई प्रभाव पड़ता है.
और अभी कुछ पर आधारित हम है बुनियादी सिद्धांत
पहले के बारे में बात की थी, और वास्तव में बस कुछ ही मिनट पहले, क्या
बदलते क्यों समझा सकता है स्वैप के अंदर एक और बी
भले ही, एक्स और वाई पर कोई प्रभाव नहीं है मैं स्वैप समारोह के लिए एक्स और वाई पारित कर दिया.
यहाँ कि कुंजी शब्द क्या है simplistically व्याख्या हो सकती है?
मुझे लगता है मैं यहाँ यह सुना लगता है?
दर्शक: वापसी.
स्पीकर 1: वापसी?
वापस नहीं.
दूसरे एक साथ चलते हैं.
वह क्या है?
>> दर्शक: [अश्राव्य].
>> स्पीकर 1: ठीक है, हम कर सकते थे return-- तो कहानी में वापसी का काम करने,
लेकिन एक भी सरल व्याख्या है.
दर्शक: स्कोप.
स्पीकर 1: स्कोप.
मैं गुंजाइश ले जाऊँगा.
तो गुंजाइश है, जहां याद हमारे एक्स और वाई की घोषणा की.
वे अंदर घोषित कर रहे हैं मुख्य का यहीं.
ए और बी, इस बीच, कर रहे हैं प्रभावी रूप से घोषित
स्वैप के अंदर, काफी नहीं है में घुंघराले ब्रेसिज़ लेकिन अभी भी
स्वैप के सामान्य क्षेत्र में.
और तो वास्तव में, ए और बी केवल इस ट्रे के भीतर मौजूद
Annenberg से, इस कोड का दूसरा हिस्सा.
इसलिए हम वास्तव में नकल बदल रहे हैं, लेकिन कि सच है कि सभी उपयोगी नहीं है.
>> तो चलो पर एक नज़र रखना यह एक छोटे से कम स्तर.
मैं वापस जाने के लिए जा रहा हूँ स्रोत निर्देशिका,
और मैं पहली बार करने जा रहा हूँ यहाँ में ज़ूम, और बस
मैं इस में हूँ कि पुष्टि करने के लिए बड़ा टर्मिनल विंडो,
कार्यक्रम अभी भी उस तरह से व्यवहार कर रहा है.
अब है कि यह मान लीजिए जानबूझकर नहीं है.
जाहिर है मैं करने के लिए स्वैप चाहता था काम, तो यह एक बग की तरह लगता है.
अब मैं एक जोड़ने शुरू कर सकता है मेरे कोड को printf के बहुत,
यहाँ पर, वाई एक्स पर बाहर मुद्रण यहाँ, यहाँ, यहाँ पर बी एक.
लेकिन स्पष्ट रूप से, कि शायद क्या है आप कुछ हफ़्ते के लिए कर दिया गया है
अब, कार्यालय समय में और घर पर कार्य करते समय
कुछ कीड़े खोजने की कोशिश कर psets पर.
आप पहले से ही नहीं है लेकिन अगर आप देखेंगे कि समस्या तीन परिचय सेट
GDB नामक एक आदेश के लिए, जहां GDB, ग्नू डिबगर,
खुद की एक पूरी गुच्छा है सुविधाओं है कि वास्तव में यह कर सकते हैं
हमें स्थितियों को समझते हैं इस तरह से, लेकिन अधिक compellingly,
समस्याओं का समाधान और कीड़े हैं.
तो मैं यह करने के लिए जा रहा हूँ.
इसके बजाय ./noswap की, मैं बजाय हूँ GDB ./noswap चला जा रहा.
दूसरे शब्दों में, मैं चला जा रहा हूँ मेरे कार्यक्रम नहीं बैश में, हमारे नए दोस्त
आज.
मैं चला जा रहा हूँ मेरे अंदर कार्यक्रम noswap
कहा जाता है यह अन्य कार्यक्रम की एक डीबगर है जो GDB, जो
मदद करने के लिए बनाया गया है कि एक कार्यक्रम है आप पाते हैं और कीड़ों को दूर मनुष्य.
मैं यहाँ चलाने मारा तो, अगर वहाँ है पाठ की एक नृशंस राशि
आप वास्तव में पढ़ने के लिए है कि कभी नहीं.
यह अनिवार्य रूप से एक व्याकुलता है शीघ्र, से जो
मैं नियंत्रण एल हिट करने के लिए जा रहा हूँ वहाँ शीर्ष पर पाने के लिए.
इस GDB शीघ्र है.
मैं अब इस कार्यक्रम को चलाने के लिए चाहते हैं, आज की पर इस छोटे से धोखा शीट के रूप में
स्लाइड भागो पहला है, पता चलता है हम पेश करने का मतलब है कि हासिल है.
और मैं सिर्फ टाइप करने के लिए जा रहा हूँ GDB के अंदर यहां तक ​​चला,
और वास्तव में यह मेरे कार्यक्रम में भाग गया.
अब कुछ अतिरिक्त नहीं है इस तरह स्क्रीन के आउटपुट,
लेकिन उस GDB अभी की जा रही गुदा है और क्या हो रहा है हमें बता.
आप वास्तव में चिंता करने की ज़रूरत नहीं है सही अब इन विवरणों के बारे में.
लेकिन बारे में वास्तव में अच्छा क्या है अगर मैं ऐसा GDB, इस again--
नियंत्रण एल मुझे जाने दो screen-- साफ करता है आगे और प्रकार, जिससे ", मुख्य तोड़ने"
मैं दर्ज मारा, क्या सेटिंग एक ब्रेक प्वाइंट noswap.c में कहा जाता है,
जहां GDB है जो लाइन 16, वास्तव में मेरे कार्यक्रम समझ से बाहर
है, मेरे कार्य वास्तव में है.
हम अब के लिए की अनदेखी करेंगे यह लेकिन उस पते है
विशेष रूप से इस समारोह की स्मृति में.
तो अब मैं चला टाइप करते हैं, यहाँ क्या अच्छा है नोटिस.
मेरा कार्यक्रम लाइन मैं में टूट जाता है पर निष्पादन को थामने के लिए GDB बताया.
तो अब मैं अपने कोड को बदलने की जरूरत नहीं है, कुछ printf के जोड़ इसे फिर कंपाइल करने, फिर से दौड़ना
यह,,, बदलने के कुछ printf का जोड़ इसे बचाने के लिए, यह फिर कंपाइल करने, इसे चलाते हैं.
मैं सिर्फ अपने कार्यक्रम के माध्यम से चल सकता है मानव गति से कदम से कदम से कदम,
नहीं गति के इंटेल के अंदर प्रकार पर.
>> तो अब इस लाइन को नोटिस मैं वापस जाने के लिए अगर यहां दिखाई देता है, और
एडिट में अपने कार्यक्रम के लिए, कि वास्तव में है कि नोटिस
कोड के पहले ही लाइन.
लाइन 16 एडिट में नहीं है.
वहाँ लाइन 16 GDB के भीतर है, और यहां तक ​​कि इस काले और सफेद इंटरफ़ेस हालांकि
लगभग नहीं के उपयोगकर्ता के रूप में है अनुकूल, इस का मतलब
कि लाइन 16 से क्रियान्वित नहीं किया गया है अभी तक, लेकिन यह हो के बारे में है.
इसलिए वास्तव में मैं प्रिंट टाइप एक्स, नहीं printf, सिर्फ प्रिंट एक्स,
मैं, शून्य से वहाँ कुछ फर्जी मूल्य मिल एक्स अभी तक initialized नहीं किया गया है.
तुम तो अगर मैं अगले टाइप करने के लिए जा रहे हैं, या कर रहा हूँ बस अगले के लिए एन, फैंसी होना चाहते हैं.
लेकिन मैं अगले अब, दर्ज टाइप करते हैं यह लाइन 17 पर चलता नोटिस.
तो तार्किक रूप से, मैं मार डाला है अगर लाइन 16 और मैं अब प्रिंट एक्स टाइप करें,
मैं क्या देखना चाहिए?
एक.
>> और अब यह मानते भ्रामक है.
$ 2, की सिर्फ एक अच्छा तरीका है आप अगर बाद में उस मूल्य का उल्लेख करना चाहते हैं,
आप "डॉलर दो पर हस्ताक्षर." कह सकते हैं
यह एक वापस संदर्भ की तरह है.
लेकिन अब के लिए, बस इसे अनदेखा.
क्या दिलचस्प है क्या है बराबर चिह्न के अधिकार पर.
और अब मैं अगले फिर से लिखें अगर और प्रिंट वाई, मैं 2 देखना चाहिए.
मैं भी अब प्रिंट कर सकते हैं एक्स फिर से, और स्पष्ट रूप से,
मैं के रूप में एक छोटी सी उलझन में हो रही है मैं कहाँ हूँ, मैं इस सूची के लिए सूची टाइप कर सकते हैं
और बस के चारों ओर कुछ संदर्भ देखना बिंदु मैं वास्तव में हूँ.
और अब मैं टाइप कर सकते हैं अगले, और वहाँ एक्स 1 है.
अब मैं अगले लिखें.
ओह, वाई 2 है.
और फिर, यह भ्रामक है GDB का उत्पादन क्योंकि
मेरे अपने उत्पादन के साथ मिश्रित किया जा रहा है.
लेकिन आप से, मन में रखने के लिए आगे और पीछे अपने कोड पर glancing
या पक्ष इसे बाहर बिछाने शायद तरफ से, तुम हूँ
वास्तव में मैं अभी कर रहा हूँ कि देखना अपने कार्यक्रम के माध्यम से कदम.
>> लेकिन सचमुच, आगे क्या होता है नोटिस.
यहाँ लाइन 22 है.
जिससे पर चलती है, मुझे इस पर चलते हैं 23 के लिए, और अब मैं अभी भी एक एक्स मुद्रित है.
और मैं अभी भी, अब वाई मुद्रित है.
तो यह एक उपयोगी व्यायाम नहीं है.
तो चलो इस फिर से करते हैं.
मेरे पास वापस जाओ फिर से शीर्ष और प्रकार रन.
और यह कार्यक्रम कह रहा है कि debugged किया जा रहा है
पहले से ही शुरू कर दिया है, शुरू से ही शुरू कर दिया.
हाँ, चलो फिर से यह करते हैं.
और इस बार, की अगली करते हैं अगले, अगले, अगले, अगले,
लेकिन अब चीजें दिलचस्प हो.
अब मैं में कदम चाहते हैं स्वैप, तो मैं अगले प्रकार नहीं है.
मैं यह सूचना अब कदम टाइप करें, और noswap.c लाइन 33 तक मुझे कूद पड़ा है.
मैं एडिट करने के लिए वापस जाना है, लाइन 33 क्या है?
जो वास्तविक पहला है स्वैप के अंदर कोड की लाइन.
कौन सा है, क्योंकि अब मैं कर सकता हूँ, अच्छा है एक तरह से चारों ओर ढकेलना और उत्सुक मिल
के रूप में क्या वहाँ में वास्तव में हो रहा है.
मुझे tmp मुद्रित करते हैं.
वाह.
क्यों tmp कुछ है पागल, फर्जी कचरा मूल्य है?
दर्शक: यह initialized नहीं किया गया है.
स्पीकर 1: यह initialized नहीं किया गया है.
और वास्तव में, यदि आप एक प्रोग्राम चलाते हैं, आप स्मृति की एक पूरी गुच्छा दिया हो
ऑपरेटिंग सिस्टम के द्वारा, लेकिन आप कोई भी मान प्रारंभ नहीं किया है,
इसलिए जो कुछ बिट्स आप कर रहे हैं यह है, भले ही यहाँ देख
इस पागल बड़ा नकारात्मक संख्या, सिर्फ मतलब
उन है कि अवशेष से कर रहे हैं कि राम के कुछ पिछले उपयोग,
मैं नहीं है, भले ही अपने आप को अभी तक यह जरूरत है.
तो अब मैं आगे और प्रकार में जाने के लिए जा रहा हूँ इसके बाद, और मैं अब प्रिंट tmp टाइप करें,
मैं क्या देखना चाहिए?
जो भी एक के मूल्य था, एक बस, पहला तर्क है
एक्स जैसे पहले थी बात में पारित किया जा रहा
इसलिए एक और एक्स एक ही होना चाहिए, इसलिए प्रिंट tmp मुझे एक प्रिंट चाहिए.
>> तो क्या आप समस्या सेट में देखेंगे तीन, GDB पर एक तरह की एक ट्यूटोरियल है
लेकिन यह शुरुआत है कि एहसास एक उपकरण पर एक नज़र की है कि वास्तव में होगा
आप समस्याओं को सुलझाने में मदद इतना अधिक प्रभावी ढंग से.
हम अंत में कर रहे हैं क्या बुधवार को क्या करने जा
कुछ परतें वापस छील करने के लिए शुरू कर रहा है और कुछ प्रशिक्षण पहियों को हटा दें.
यही बात बुलाया स्ट्रिंग कि हम कुछ समय के लिए उपयोग किया है
हम धीरे धीरे कि दूर ले जा रहे हैं और आप के बारे में बात करना शुरू
कुछ अधिक esoterically * चार के रूप में जाना जाता है,
लेकिन हम यह अच्छा क्या करने जा रहे हैं और धीरे पहली बार में, यहां तक ​​कि संकेत हालांकि,
वे कहते हैं, के रूप में कुछ कर सकते हैं अगर साथ दुर्व्यवहार बहुत बुरी बातें,
से थोड़ी claymation को देखकर हमारे दोस्त स्टैनफोर्ड से निक Parlante
विश्वविद्यालय, कंप्यूटर में एक प्रोफेसर इस पूर्वावलोकन एक साथ रखा है जो विज्ञान
इस बुधवार क्या आ रहा है की.
>> [वीडियो प्लेबैक]
हे, Binky.
जागो.
यह सूचक मनोरंजन के लिए समय है.
>> कि क्या हो रहा है?
संकेत के बारे में जानें?
ओह, गुडी!
[अंत वीडियो प्लेबैक]
स्पीकर 1: यह है कि बुधवार को आप इंतजार कर रहा है.
हम आपको फिर देखेंगे.
[वीडियो प्लेबैक]
-और अब, गहरे विचार, Daven Farnham द्वारा.
>> क्यों हम सी सीख रहे हैं?
क्यों नहीं एक +?
>> [हंसी]
>> [अंत वीडियो प्लेबैक]