Uploaded avatar of kytrinyx

Meade Kincke से एक इंटरव्यू

@kytrinyx
7 साल से अधिक पहले

मीड किंके के साथ एक इंटरव्यू, जिसमें उन्होंने और कैटरीना ओवेन ने Rust कंपाइलर, बियर का रंग तय करने के लिए वैज्ञानिक कलरस्पेस इस्तेमाल करने वाले एक GUI, और उनकी किताब 'A Practical Guide To Rust' पर बात की।

नमस्ते मीड। बात करने के लिए धन्यवाद। हम आपसे बात करना चाहते थे क्योंकि Rust ट्रैक पर आप हमारे सबसे ज़्यादा सक्रिय मेंटर हैं। आपने 400 से अधिक विद्यार्थियों की मदद की है। आपको Exercism के बारे में कैसे पता चला?

Reddit के Rust सबरेडिट पर किसी ने पोस्ट किया था कि Exercism के Rust ट्रैक को मेंटर चाहिए, तो मैंने इसके बारे में देखा। मुझे बहुत अच्छा लगा कि मैंने ऐसा किया, क्योंकि यह बहुत संतोष देने वाला काम है और सब लोग बहुत अच्छे और आभारी रहे हैं। मेरे Exercism विद्यार्थियों के साथ मेरे कुछ बहुत अच्छे जुड़ाव बने हैं, और मुझे उनकी मदद करना बहुत पसंद है।

कोई ऐसी खास कहानियाँ हैं जो याद रह गईं?

हाँ, एक खास Rust अभ्यास है जो बहुत लोकप्रिय रहा है: पाइथागोरस त्रिक।

इस अभ्यास में सबसे आम समस्या प्रदर्शन की होती है। ज़्यादातर लोग इसे शुरू में नेस्टेड for लूप से हल करते हैं, जो कम से कम O(n²) है और बहुत अक्षम है। मेरा लक्ष्य यह होता है कि मेरे विद्यार्थी एक रैखिक हल तक पहुँचें: O(n).

मेरा तरीका सवाल पूछने का है। मैं शुरू में पूछता हूँ कि क्या वे Rust का इटरेटर मेथड सीखना चाहते हैं, क्योंकि उसके बहुत सारे फायदे हैं, जिनमें से एक यह है कि आप Rayon लाइब्रेरी इस्तेमाल करके अपने काम को समानांतर बना सकते हैं।

"हाँ, ज़रूर" कहने के बाद मेरे एक विद्यार्थी ने बताया कि वह Rust इसलिए सीख रहा है क्योंकि वह इसे एम्बेडेड कंट्रोल के लिए और फिर उसके भारी डेटा आउटपुट को प्रोसेस करने के लिए इस्तेमाल करने के बारे में सोच रहा है। इसलिए समानांतरता उसके लिए ज़रूरी है। उसे अच्छा लगा कि मैंने एक दिखने में आसान अभ्यास का इस्तेमाल Rust के ज़्यादा जटिल और आइडियोमैटिक हिस्से सिखाने के लिए किया।

अब, Exercism की बदौलत, उसने मुझे एक-पर-एक पढ़ाने के लिए रख लिया है, और हम मिलकर कुछ प्रयोगात्मक प्रोजेक्ट पर काम करने वाले हैं। जब वह अपनी पूरी कंपनी को Rust पर ले आएगा, तो मैं उसकी पूरी टीम को भी पढ़ाऊँगा।

जिन विद्यार्थियों को मैंने मेंटर किया, उनके साथ काम करने में मुझे बहुत मज़ा आया, और मैं चाहता हूँ कि यह और बढ़ता रहे।

मुझे यह इतना पसंद है कि अब मैंने खुद आगे बढ़कर Rust ट्रैक पर मेंटेनर बनने की ज़िम्मेदारी ली है, ताकि पर्दे के पीछे और लोगों की मदद कर सकूँ।

वह मानवीय जुड़ाव कितना ज़रूरी है! आप A Practical Guide to Rust के लेखक हैं। वह किस बारे में है और उसे लिखने की आपकी प्रेरणा क्या थी?

मैंने यह किताब दूसरों को Rust के कुछ पहलुओं को बेहतर ढंग से समझने में मदद करने के लिए लिखी। इस भाषा पर बहुत ज़्यादा डॉक्युमेंटेशन नहीं है, और मुझे लगा कि ऐसा साहित्य होना चाहिए जिसमें हल्का-फुल्का मज़ाक हो और जो भाषा के कॉन्सेप्ट ठोस तरीके से समझाए। इसमें कुछ बुनियादी और कुछ उन्नत विषयों की गाइड हैं। मैं चाहता हूँ कि लोगों को इस भाषा के व्यावहारिक, असली दुनिया के इस्तेमाल का ठोस अंदाज़ा मिले। इसमें असली उदाहरण हैं, काल्पनिक नहीं।

मुझे हमेशा पता था कि मैं एक किताब लिखूँगा। जब मैं खुद एक सहकर्मी को दूर से बैठकर Rust में प्रोग्रामिंग सिखा रहा था, तब इसका ढाँचा अपने आप बन गया। उसने पहले कभी कोई कोड नहीं छुआ था, और मुझे ऐसी शब्दावली और तरीके समझाने थे जिन्हें हम नर्ड्स सहज मान लेते हैं, नए और समझ में आने वाले ढंग से। Rust में ओनरशिप के कॉन्सेप्ट पर बात करते समय मैंने "लाइब्रेरी से किताब उधार लेना बनाम किताब का मालिक होना" जैसी उपमाएँ इस्तेमाल कीं।

मैंने अपने प्रोजेक्ट BrewStillery के उदाहरण भी शामिल किए। यह देखने का शानदार तरीका है कि स्ट्रक्ट और एनम जैसी चीज़ें असली प्रोग्राम में कैसे काम करती हैं। यह यह भी दिखाता है कि समानांतरता का असली तरीके से कैसे इस्तेमाल किया जाए।

किताब लिखते समय मुझे पता था कि मैं चाहता हूँ कि यह सिर्फ एक संदर्भ गाइड की तरह नहीं, बल्कि एक कहानी की तरह पढ़ी जाए। यह खुद पर आगे बढ़ती है, लेकिन हर हिस्सा अपने आप में भी पूरा है। यह वही फर्क है जो रसायन विज्ञान की किताब से खाना बनाने और जूलिया चाइल्ड के "The French Chef" का एक एपिसोड देखने में है।

अरे, यह तो दिलचस्प है। आपने अपनी किताब किसके लिए लिखी और पाठक को उससे क्या मिलेगा?

यह उस हर व्यक्ति के लिए है जो Rust सीखना चाहता है। मैं जिस तरह विचारों को विस्तार से समझाता हूँ, उससे सबको एक-सा फायदा मिलता है: पाठक को बुनियादी समझ मिल जाती है, जबकि बहुत सारा साहित्य रटने की तरफ झुकता है।

मैं देख रहा हूँ कि आपको बहुत सारी अच्छी समीक्षाएँ मिली हैं। क्या आप दूसरा खंड निकालने की योजना बना रहे हैं?

हाँ! मैं निश्चित रूप से लिखना जारी रखूँगा और और भी खंड प्रकाशित करने की योजना बना रहा हूँ।

मेंटरशिप और लेखन के ज़रिए सिखाने के अलावा आपने Rust कंपाइलर पर भी कुछ काम किया है। क्या आप उसके बारे में बता सकते हैं?

बिल्कुल!

अपने काम का संक्षिप्त परिचय देते हुए: दरअसल कोई प्रोग्राम दो जगहों पर काम कर सकता है, कंपाइल टाइम और रनटाइम। जब कोई फंक्शन रनटाइम पर चलाया जाता है, तो उसके अंदर की हर चीज़ फिर से बनाई और दोबारा गिनी जाती है। इसका अहम मतलब यह है कि मेमोरी दोबारा असाइन करनी पड़ती है, और हम हमेशा इससे बचना चाहते हैं। जब कोई फंक्शन कॉन्स्टेंट होता है, तो प्रोग्राम शुरू होते ही वह मेमोरी में लोड हो जाता है। कंपाइल टाइम पर हम जितना ज़्यादा कर सकें, हमारे प्रोग्राम उतना ही बेहतर प्रदर्शन करेंगे।

कुछ समय पहले मैंने सुना कि कंपाइल टाइम फंक्शन एक्ज़ीक्यूशन (const fn) का यह विचार Rust में लागू किया जा रहा है, और मैं बहुत उत्साहित हुआ। मुझे चीज़ों को कुशल और सटीक बनाने में बहुत दिलचस्पी है। const fn में मुझे एक बात बहुत पसंद है: जब यह पूरा हो जाएगा, तो हम गणितीय नियतांक जैसी शानदार चीज़ें बड़े सुंदर ढंग से निकाल सकेंगे। फिलहाल, पाई एक हार्ड-कोडेड वैल्यू है। बहुत से लोग कहेंगे कि यह काफी सटीक है, लेकिन मुझे लगता है कि इसमें उपलब्ध संख्यात्मक जगह का पूरा इस्तेमाल होना चाहिए। const fn के साथ हम लाइबनिट्ज़ के सूत्र का इस्तेमाल कर सकते हैं, जो फ्लोटिंग-पॉइंट जगह को पूरी तरह भर देगा।

मैंने थोड़ा और पढ़ा और एक ब्लॉग पोस्ट पर पहुँचा जिसमें कहा गया था कि MIRI const fn को स्टेबल करना बहुत आसान बना देगा। समय बीता, और जब नए वर्शन आए तो मुझे कोई प्रगति दिखाई नहीं दी। मैंने Rust टीम से संपर्क किया और कंपाइलर पर काम करना शुरू किया।

सबसे अच्छी बात यह है कि कंपाइलर खुद Rust में लिखा गया है। यह शुरू में OCaml में लिखा गया था और फिर Rust में दोबारा लिखा गया, जिसे बूटस्ट्रैपिंग कहते हैं। मोटे तौर पर, कंपाइलर सारे इनपुट को AST में पार्स करता है, जो फिर हाई-लेवल इंटरमीडिएट रिप्रेज़ेंटेशन (HIR) को सौंप दिया जाता है, फिर मीडियम-लेवल (MIR), और फिर लो-लेवल (LIR), जिसे LLVM संभालता है। जैसे-जैसे हम इन सारे चरणों से गुज़रते हैं, हम मशीन कोड के और करीब पहुँचते जाते हैं।

समझने वाली एक बात यह है कि कंपाइलर भी बस एक प्रोग्राम है, लेकिन बहुत ही विस्तृत। Rust को कंपाइल होने में काफी समय लगता है, और खासकर उसके सारे टेस्ट चलाने में। तो आप बस थोड़ा-सा कोड डालकर यह नहीं कह सकते, "मैं हो गया।"

कंपाइलर पर मेरा पहला काम HIR पर था। इसमें स्टैंडर्ड लाइब्रेरी (स्टेबल और नाइटली, दोनों) को बहुत ज़्यादा पढ़ना और हर सुराख में घुसते चले जाना शामिल था। मुझे कंपाइलर के हर नेस्टेड टाइप से होकर तब तक नीचे जाना पड़ा जब तक सारे विकल्प खत्म नहीं हो गए। नाइटली/कंपाइलर लाइब्रेरी में ढेरों नेस्टेड टाइप हैं। यह याद बनाए रखना कि आप कौन-सा धागा पकड़कर चल रहे हैं, बहुत ध्यान माँगता है।

इसे और जटिल यह बात बनाती है कि कंपाइलर पर एक वितरित टीम काम करती है, यानी हमें अक्सर मर्ज कॉन्फ्लिक्ट मिलते हैं।

इसमें बहुत मज़ा आया। अभी भी बहुत काम बाकी है, जो मैं निकट भविष्य में करूँगा।

इन ओपन सोर्स योगदानों के अलावा मुझे पता है कि आप एक ब्लॉकचेन कंपनी के CTO हैं। मैं ब्लॉकचेन को इस बात से जोड़कर देखता हूँ कि Etherium पर मेरे बहुत सारे पैसे डूब गए। आपके लिए इसका क्या मतलब है?

ब्लॉकचेन, दुर्भाग्य से, अब तक का सबसे ज़्यादा चर्चित फैशन-शब्द बन गया है।

यह सिर्फ द सिटी और वॉल स्ट्रीट के लिए डिजिटल करेंसी का नया रुझान नहीं है। हम असल में "ब्लॉकचेन कंपनी" नहीं हैं; हम Chainetix पर कंपनियों का डेटा सुरक्षित रखने के लिए प्राइवेट लेजर देते हैं। सच तो यह है कि हम क्रिप्टोकरेंसी का काम भी नहीं करते। Chainetix का उद्देश्य यह है कि हमारी विशेषज्ञता उन सबके हाथों में पहुँचे जिन्हें प्रोग्रामिंग की बुनियादी समझ है।

मेरे काम में हमारे सिस्टम और इन्फ्रास्ट्रक्चर को शुरू से तैयार करना शामिल रहा है, ताकि कुछ बहुत मज़बूत बने। मैंने Habitat by Chef नाम का प्रोजेक्ट चुना। मुझे इसके बारे में इसलिए पता चला क्योंकि यह Rust में लिखा गया है, जो Chef जैसी बड़ी कंपनी से आने वाली बात के लिहाज़ से दिलचस्प लगा। सादे Docker के मुकाबले, Habitat ऐसी इमेज बनाता है जो अपने आप अपडेट हो सकती हैं और सर्विस बाइंडिंग जैसी कमाल की चीज़ें कर सकती हैं। मैंने Habitat के core-plans रिपॉज़िटरी में भी काफी योगदान दिया है।

पहले आपने अपने प्रोजेक्ट BrewStillery का ज़िक्र किया। लगता है यह आपके लिए ज़रूरी है। इसके बारे में थोड़ा और बता सकते हैं?

हाँ, यह निश्चित रूप से ज़रूरी है!

BrewStillery एक ओपन सोर्स, ऑल-इन-वन बियर, वाइन और स्पिरिट्स टूल है, जिसे मैंने Rust और GTK3 में लिखा है। मैंने एक CSS थीम भी जोड़ी है जो बेहद अनोखी और सुंदर है। एक वाक्य में कहें तो यह किसी भी स्पिरिट बनाने वाले के लिए एक उन्नत कैलकुलेटर है।

मैंने अलग-अलग टैब बनाए हैं ताकि बियर और शैंपेन के खास कैलकुलेटर अलग रहें, और साथ में एक सामान्य टैब भी है जो बियर बनाने वालों, वाइन बनाने वालों और डिस्टिलरों, सब पर लागू होता है। अगर आप ज़्यादातर बियर और वाइन की बोतलें देखें, तो आपको उस बोतल में अल्कोहल का प्रतिशत दिखेगा, यानी अल्कोहल बाय वॉल्यूम (ABV)। तो BrewStillery जो चीज़ें करता है, उनमें से एक यह ABV तय करना है। जैसा आप अंदाज़ा लगा सकते हैं, इसमें ढेर सारी नर्डी मज़ेदार चीज़ें शामिल हैं। मुझे सबसे ज़्यादा खुशी बियर का रंग निकालने से मिलती है:

BrewStillery बियर टैब, खाली गिलास

BrewStillery बियर टैब, भरा हुआ गिलास

ये पहले और बाद की तस्वीरें दिखाती हैं कि मात्राएँ डालने के बाद क्या होता है। जिस तरह मैंने इसे किया है, वैसा पहले किसी ने नहीं किया। एक और शानदार फीचर यह है कि सब कुछ टाइप करते ही तुरंत निकाला जाता है। अगर आप कलरस्पेस के बारे में बारीक ब्यौरा चाहते हैं, तो किसी कॉन्फ्रेंस में मुझसे मिलिए और हम बियर पीते हुए इस पर बात कर सकते हैं!

09 फरवरी 2019 · क्या यह काम की लगी?