Transcript
00:00:00Vercel ने अभी Xero नाम की एक नई प्रोग्रामिंग लैंग्वेज रिलीज की है, और माना जा रहा है कि
00:00:03इसे बिल्कुल शुरुआत से इस तरह बनाया गया है ताकि इंसान और AI एजेंट्स
00:00:07मिलकर छोटे नेटिव प्रोग्राम्स बना सकें। लेकिन क्या हम सब वैसे भी यही नहीं कर रहे हैं?
00:00:12तो यह लैंग्वेज दूसरों से बेहतर कैसे है, और क्या यह वाकई एक अच्छा आइडिया है, या फिर यह बस एक और साइड प्रोजेक्ट है
00:00:16जिसके बारे में कुछ महीनों में कोई बात भी नहीं करेगा? आइए जानते हैं।
00:00:25Xero, Rust या Zig की तरह एक सिस्टम्स लैंग्वेज है, तो शायद आगे चलकर Bun इसे फिर से लिख सकता है।
00:00:30और जहाँ तक मैं समझ पाया हूँ, पूरा आइडिया यह है कि मौजूदा लैंग्वेजेस इंसानों के लिए बनाई गई थीं।
00:00:34इसलिए हम एरर मैसेज, वॉर्निंग और ट्रेसेज पढ़ते हैं, लेकिन AI स्ट्रक्चर्ड डेटा के साथ ज्यादा बेहतर काम करता है।
00:00:38तो Xero के साथ, पूरे टूलचेन को इसी बात को ध्यान में रखकर बनाया गया है,
00:00:43यानी कंपाइलर जो कुछ भी जनरेट करता है, उसे JSON के रूप में आउटपुट किया जा सकता है।
00:00:46अब सिर्फ इन्हीं बातों के आधार पर, और इस वेबसाइट पर लिखे साफ तौर पर AI वाले वाक्यों को देखकर,
00:00:51मुझे अभी भी थोड़ा शक है कि यह क्यों मौजूद है और यह कितना अच्छा काम करेगी,
00:00:56लेकिन मैं अपनी राय आखिर के लिए बचाकर रखूँगा। पहले आइए इस लैंग्वेज को एक्सप्लोर करते हैं,
00:00:59क्योंकि सच कहूँ तो यह काफी दिलचस्प है। हम क्लासिक “नई लैंग्वेज सीखने वाले”
00:01:03प्रोजेक्ट से शुरुआत करेंगे, जिसमें एक बहुत ही सिंपल स्ट्रिंग प्रिंट करनी है। इसमें से ज्यादातर चीजें समझना आसान है।
00:01:08हमारे पास इस प्रोग्राम के एंट्री पॉइंट के रूप में एक पब्लिक main फ़ंक्शन है। यह फ़ंक्शन void रिटर्न
00:01:12करने वाला है, और इसके अंदर हम एक स्ट्रिंग प्रिंट कर रहे हैं। लेकिन जिस तरह से यह स्ट्रिंग
00:01:16प्रिंट हो रही है, वही हमारे पहले कुछ फीचर्स को दिखाता है। हम world कैपेबिलिटी का इस्तेमाल कर रहे हैं।
00:01:21आपको इस कैपेबिलिटी की जरूरत तब होती है जब आप कोई भी I/O ऑपरेशंस करते हैं, जैसे फाइल ऑपरेशंस, प्रिंटिंग, नेटवर्क कॉल्स,
00:01:26या कोई भी I/O साइड इफेक्ट, और यह सब इस लैंग्वेज के एक्सप्लिसिट (स्पष्ट) सिद्धांत का हिस्सा है।
00:01:31अगर किसी फ़ंक्शन में यह world कैपेबिलिटी है, तो यह तुरंत संकेत देता है कि यह कुछ I/O ऑपरेशंस करता है,
00:01:37और अगर इसमें यह नहीं है, तो इसका मतलब है कि यह I/O साइड इफेक्ट से मुक्त होगा।
00:01:40यह world कैपेबिलिटी कंपाइलर को रनटाइम के बजाय कंपाइल टाइम पर ही टारगेट के आधार पर
00:01:45अनुपलब्ध कैपेबिलिटीज को रिजेक्ट करने की अनुमति देती है, इसलिए अगर आप इस फ़ंक्शन के अंदर फाइल सिस्टम एक्सेस का इस्तेमाल करते हैं
00:01:50और फिर वेब असेंबली बिल्ड को टारगेट करने की कोशिश करते हैं, तो कंपाइलर पहले ही एरर दे देगा,
00:01:54ताकि बाद में आपको किसी अचानक आने वाले रनटाइम एरर का सामना न करना पड़े।
00:01:57world कैपेबिलिटी के बाद, इस प्रोग्राम में हमारे पास कुछ कीवर्ड्स भी हैं।
00:02:00जैसे यहाँ check है, जिससे आप एरर्स को हैंडल करते हैं। अगर कोई फ़ंक्शन फेल हो सकता है,
00:02:05तो आप उसे raises से मार्क करते हैं, और फिर उस एरर को आगे बढ़ाने (propagate) के लिए check का इस्तेमाल किया जाता है।
00:02:09यह काफी हद तक Rust के क्वेश्चन मार्क (?) ऑपरेटर जैसा ही है, बस एक कीवर्ड के रूप में है। तो Xero में
00:02:13हमारे पहले प्रोग्राम के लिए बस इतना ही जानना जरूरी था, और अब हम xero run hello.xero लिखकर इसे रन कर सकते हैं।
00:02:19ध्यान दें, यह Xero लैंग्वेज का फाइल एक्सटेंशन है। अगर मैं अब इस पर एंटर दबाता हूँ,
00:02:23तो आप देख सकते हैं कि यह कहता है 'hello, subscribe to Betastack'। ऐसा आपको जरूर करना चाहिए।
00:02:26अपने हेलो प्रोग्राम से आगे बढ़ते हुए, चूंकि अब हम सब साफ तौर पर Xero के एक्सपर्ट बन चुके हैं,
00:02:30इस लैंग्वेज में आपके बेसिक एप्लिकेशन्स के लिए कुछ और प्रिमिटिव्स भी दिए गए हैं।
00:02:34तो मैंने यहाँ एक नया प्रोग्राम बनाया है जो बस एक रैंडम ऐप है जो यह क्लासिफाई करेगा कि इनपुट टेक्स्ट है,
00:02:39न्यूमेरिक है या मिक्स्ड, और आप देख सकते हैं कि यह स्टैंडर्ड लाइब्रेरीज़ जैसे फीचर्स का इस्तेमाल करता है,
00:02:43इसमें हमारे पास enums हैं, shapes हैं जो काफी हद तक structs जैसे हैं, फिर हमारे पास वो आम
00:02:47लैंग्वेज फीचर्स हैं जिनकी आप उम्मीद करते हैं जैसे if स्टेटमेंट्स, यहाँ नीचे एक while स्टेटमेंट है, आप
00:02:52for लूप्स का भी इस्तेमाल कर सकते हैं, और यहाँ नीचे match भी है जो काफी हद तक आपके switch स्टेटमेंट जैसा है।
00:02:56तो कुछ भी बहुत हैरान करने वाला या नया नहीं है। जब मेमोरी जैसे ज़्यादा एडवांस कॉन्सेप्ट्स की बात आती है, तो फिर से Xero में
00:03:00सब कुछ एक्सप्लिसिट होना चाहिए। हमारे पास राइटेबल व्यूज के लिए म्यूटेबल स्पैन हैं और रीडेबल व्यूज के लिए भी
00:03:05स्पैन हैं, और यहाँ नीचे हमारे पास एक owned टाइप है। यह असल में कहता है कि यह वैल्यू यहाँ
00:03:10ओन्ड है और जब यह स्कोप से बाहर जाए तो drop फ़ंक्शन को रन करें। हम इस shape पर खुद ही drop
00:03:14फ़ंक्शन को डिफाइन करते हैं, तो यहीं पर हम अपना क्लीनअप लॉजिक रखेंगे। ऐसा करने का एक और तरीका
00:03:18defer कीवर्ड का इस्तेमाल करना और फिर यहाँ एक फ़ंक्शन रखना है। बुनियादी तौर पर इसका मतलब
00:03:22यह है कि जब यह फ़ंक्शन पूरा हो जाए और स्कोप से बाहर चला जाए, तो उसके बाद इस फ़ंक्शन को रन करें। तो इसमें
00:03:26आज एक बहुत ही बेसिक एप्लिकेशन के लिए आपकी जरूरत की हर चीज़ मौजूद है और कुछ और फीचर्स भी हैं
00:03:31लेकिन मैं सच में इसे एक प्रोग्रामिंग ट्यूटोरियल नहीं बनाना चाहता, पर आप चाहें तो अपने CV में लिख सकते हैं कि
00:03:35आपके पास Xero का तीन मिनट का एक्सपीरियंस है। इन सब बातों को अलग रखते हुए, अब आइए उस चीज़ पर फोकस करते हैं
00:03:39जो मेरे ख्याल से Xero की असली खासियत है और वो है इसका टूलचेन और यह फैक्ट कि इसे AI
00:03:44एजेंट्स के लिए बनाया गया है। मान लीजिए कि कोई AI एजेंट कुछ Xero कोड लिखता है और उसमें कुछ बग्स आ जाते हैं। उनका दावा है कि
00:03:49ज़्यादातर लैंग्वेजेस में आपको बस टेक्स्ट की एक लंबी दीवार मिल जाती है और वो एरर मैसेज इंसानों के पढ़ने के लिए डिज़ाइन किए जाते हैं।
00:03:54ज़ीरो (Xero) में आपको असल में इंसानों के पढ़ने लायक एरर मैसेज मिल सकता है और वह
00:03:58वह कुछ ऐसा दिखेगा, लेकिन आप देख सकते हैं कि यह कोई स्ट्रक्चर्ड आउटपुट नहीं है। इसलिए उन्होंने सुनिश्चित किया है कि
00:04:02टूलचेन के हर हिस्से में असल में एक JSON का ऑप्शन हो। तो अगर हम उसी फ़ंक्शन को फिर से रन करें लेकिन
00:04:07इस बार JSON ऑप्शन का इस्तेमाल करें और मैं इसे JQ पर भी पाइप कर रहा हूँ ताकि यह हमारे टर्मिनल में थोड़ा बेहतर दिखे
00:04:12तो आप देख सकते हैं कि हमें एक बढ़िया स्ट्रक्चर्ड आउटपुट एरर मैसेज मिलता है। हमारे पास यहाँ डायग्नोस्टिक्स हैं जैसे कि
00:04:16सेवेरिटी (गंभीरता), कोड और मैसेज। एरर कहाँ आ रहा है, इसकी एक्सपेक्टेड वैल्यू क्या है और इसकी
00:04:21एक्चुअल वैल्यू क्या है, यह सब दिया है। फिर खुद LLM के लिए कुछ हेल्प के साथ-साथ एक फिक्स सेफ्टी फ़ील्ड भी है जो
00:04:26कहती है कि इसके लिए इंसानी रिव्यू की ज़रूरत होगी और फिर इस बारे में कुछ जानकारी है कि इसे कैसे ठीक किया जा सकता है। तो
00:04:31यह बस LLM को पर्याप्त कॉन्टेक्स्ट देने की कोशिश कर रहा है ताकि वह इसे खुद ही ठीक कर सके। एक और कमांड जो
00:04:35इसे अच्छे से दिखाती है, वो है Xero fix कमांड। इसे मैं प्लान मोड के साथ-साथ JSON में इस्तेमाल कर रहा हूँ और
00:04:40इसे JQ पर पाइप भी कर रहा हूँ ताकि यह टर्मिनल में अच्छा दिखे। जब मैं इस पर एंटर दबाता हूँ तो यह बुनियादी तौर पर
00:04:44मेरे द्वारा दी गई क्लासिफाइड टूटी हुई फाइल पर एक डायग्नोस्टिक करता है और यह एक तरह से बताता है कि मुझे इस
00:04:49फाइल को असल में ठीक करने के लिए क्या करना होगा। आप देख सकते हैं कि हमें ऐसे फ़ील्ड्स के साथ एक स्ट्रक्चर्ड आउटपुट वापस मिलता है जिनकी
00:04:53ज़्यादातर सिर्फ एक LLM को ही जानने की ज़रूरत होती है जैसे सेफ्टी लेवल्स, मोड, अप्लाइज़, एडिट। हमारे पास नीचे
00:04:58सेल्फ-होस्ट रिपेयर पॉलिसी जैसी चीज़ें हैं। फिर हमारे पास डायग्नोस्टिक्स सेक्शन है जो काफी हद तक वही
00:05:03चीज़ है जो हमने उस Xero check कमांड में देखी थी और यहाँ नीचे हमारे पास उस एरर कोड का फिक्स भी है।
00:05:07तो इसे आमतौर पर कैसे ठीक किया जाता है? बुनियादी तौर पर इस आइडिया का हिस्सा यह लगता है कि क्या होगा अगर लैंग्वेज
00:05:12ज़रूरत पड़ने पर खुद ही अपना डॉक्यूमेंटेशन प्रोवाइड कर दे। तो अगर हम किसी LLM को इस नई लैंग्वेज की तरफ ले जाएँ तो
00:05:17उसे असल में किसी डॉक्यूमेंटेशन को खोजने या किसी स्किल का इस्तेमाल करने की ज़रूरत नहीं होगी, वह बस
00:05:21ज़रूरत पड़ने पर टूलचेन से ही पर्याप्त जानकारी हासिल कर सकेगा। तो इसका टेस्ट करने के लिए मैंने
00:05:25अपनी टूटी हुई फाइल को एक बिल्कुल नई डायरेक्टरी में रख दिया जिसमें Xero लैंग्वेज क्या है, इस बारे में कोई जानकारी नहीं है और अब
00:05:30मैं बस Claude से उस टूटी हुई फाइल को ठीक करने के लिए कहता हूँ और उसे वो कमांड भी देता हूँ जो उसे उन
00:05:34डायग्नोस्टिक्स के लिए चाहिए, क्योंकि टूलचेन को असल में इस्तेमाल करने के लिए उसे कुछ जानकारी की ज़रूरत होती है। इसके साथ
00:05:38हम आगे बढ़ सकते हैं और देख सकते हैं कि क्या Claude वाकई इस फाइल को ठीक कर सकता है। तो देखिए, 31 सेकंड के बाद उसने
00:05:43फाइल के सारे एरर्स को ठीक कर दिया है और मैंने असल में उसमें तीन एरर्स डाले थे और उसने
00:05:47तीनों को ढूँढकर ठीक कर दिया है और हम ऊपर स्क्रॉल करके देख सकते हैं कि उसने यह कैसे किया। उसने बस वही
00:05:51Xero fix कमांड रन की जो मैंने उसे दी थी। इस बार हमें 'okay: true' वापस मिला, तो इस तरह उसे पता चला कि अब कोई
00:05:56एरर नहीं बचा है और अगर हम ऊपर स्क्रॉल करें तो देख सकते हैं कि उसने कोड में कुछ बदलाव किए और उसने ऐसा इसलिए किया क्योंकि
00:06:00पिछले स्टेप में उसने Xero fix रन किया था और उसे इस बारे में सटीक जानकारी मिली थी कि उस इश्यू को कैसे ठीक किया जाए और
00:06:05उसने हमारे पास मौजूद तीनों इश्यूज के साथ ऐसा ही किया। तो उसके पास इस बारे में कोई पहले से जानकारी नहीं थी कि
00:06:10Xero लैंग्वेज क्या है, उसने डॉक्यूमेंटेशन लाने के लिए किसी वेब सर्च या ऐसी किसी चीज़ का इस्तेमाल नहीं किया, उसने
00:06:14बस उस जानकारी का इस्तेमाल किया जो टूलचेन ने स्ट्रक्चर्ड आउटपुट के रूप में दी थी। मैं सच में
00:06:18इससे थोड़ा इम्प्रेस हूँ कि यह एक बिल्कुल नई लैंग्वेज है जिसे एक LLM अभी भी डीबग कर सकता है क्योंकि
00:06:22इस लैंग्वेज को बनाया ही ऐसे गया है, लेकिन मेरे मन में एक बात आ रही है कि क्या यह वाकई कुछ नया है? मेरा मतलब है कि
00:06:28मैं टूलचेन में एरर्स और बाकी सब चीजों के स्ट्रक्चर्ड आउटपुट होने के पूरे सेलिंग पॉइंट को समझता हूँ,
00:06:31लेकिन यह कोई बिल्कुल नया कॉन्सेप्ट नहीं है, हमारे पास दशकों से स्ट्रक्चर्ड एरर मैसेजेस रहे हैं। मेरा मतलब है
00:06:37इसे देखिए, मेरे पास Rust में बना लगभग वैसा ही क्लासिफाइड प्रोग्राम है और उसमें भी ऐसे ही एरर्स हैं
00:06:41और मैं बस आउटपुट के JSON में होने की मांग कर सकता हूँ। मुझे पूरा यकीन नहीं है कि हमें इस आइडिया के इर्द-गिर्द
00:06:46एक पूरी नई लैंग्वेज बनाने की ज़रूरत थी, और शायद आप मौजूदा लैंग्वेजेस को ही बेहतर बना सकते थे अगर आपको लगता
00:06:51कि जानकारी में कोई कमी थी। मुझे इस बात का भी पूरा भरोसा है कि अगर मैं उस टूटे हुए Rust कोड को लेकर Claude से
00:06:55उसे ठीक करने के लिए कहता, तो वह बड़ी आसानी से ऐसा कर पाता, भले ही वह स्ट्रक्चर्ड आउटपुट का
00:07:00इस्तेमाल न कर रहा होता। मुझे लगता है कि LLMs नॉर्मल मैसेजेस के साथ भी ठीक-ठाक काम कर लेते हैं या शायद मेरा सामना अभी तक
00:07:05उस समस्या से नहीं हुआ है। इसके ऊपर, यह फैक्ट भी है कि LLMs को Rust जैसी कई मौजूदा
00:07:10कोडिंग लैंग्वेजेस पर ट्रेन किया गया है, इसलिए वह उसे डीबग करने में काफी अच्छा होगा और उसके पास अपने
00:07:14ट्रेनिंग डेटा में ढेर सारे एग्जांपल्स हैं, लेकिन Xero के साथ उसके पास ऐसा कुछ भी नहीं है। अब इसका मतलब यह नहीं है कि आपको
00:07:19कभी कोई नई लैंग्वेज जोड़ने की कोशिश ही नहीं करनी चाहिए, इसका बस यह मतलब है कि अगर आप कोई कॉम्प्लेक्स ऐप बना रहे हैं, तो आप
00:07:24Xero को नहीं चुनेंगे, लेकिन सच कहूँ तो वे इसे उस तरह से मार्केट कर भी नहीं रहे हैं। कुल मिलाकर,
00:07:28मुझे लगता है कि यह बस एक बढ़िया एक्सपेरिमेंट है, और कुछ नहीं तो यह दिखाता तो है ही कि आप एक नई लैंग्वेज बना सकते हैं
00:07:32और LLMs को उस लैंग्वेज पर ट्रेन किए बिना भी ज़रूरी कॉन्टेक्स्ट दे सकते हैं, लेकिन मुझे बस पूरा यकीन नहीं है
00:07:37कि इसकी ज़रूरत थी या नहीं। इन सब का मतलब यह नहीं है कि यह लैंग्वेज खुद में अच्छी नहीं है। जैसा कि मैंने कहा, यह
00:07:42इस्तेमाल करने में उतनी बुरी नहीं है और यह कंपाइल होकर काफी छोटे साइज में आ जाती है। मुझे बस इस बात में शक है कि मैं कभी
00:07:47Rust, Zig या Go जैसी स्थापित लैंग्वेजेस के मुकाबले इसका इस्तेमाल करूँगा। मुझे यकीन है कि इस पर लोगों की
00:07:51काफी सारी राय होने वाली है, तो मुझे नीचे कमेंट्स में बताएं कि आप क्या सोचते हैं या उस सब्सक्राइब बटन को दबाएं
00:07:55और हमेशा की तरह, मिलते हैं अगले वीडियो में।
Community Posts
No posts yet. Be the first to write about this video!
Write about this video