TypeScript 7 आधिकारिक रूप से रिलीज़ हुआ, और भाई साहब, यह वाकई बेहद तेज़ है
BBetter Stack
컴퓨터/소프트웨어AI/미래기술
Transcript
00:00:00TypeScript 7 आधिकारिक रूप से रिलीज़ हो गया है और एक साल से अधिक के कड़े विकास के बाद
00:00:05कंपाइलर को Go में पोर्ट करने की इस यात्रा ने साबित कर दिया कि आप AI के ज़रिए पूरा काम कर सकते हैं,
00:00:10तो मुझे यकीन है कि डेवलपर्स इससे खुश होंगे। अगर आप अब npm install typescript चलाते हैं,
00:00:16तो आपको वर्ज़न 7 मिलेगा, जो Go कंपाइलर वाला वर्ज़न है।
00:00:20कुछ दिनों पहले Microsoft के अनाउंसमेंट वीडियो के बाद, मैं यह देखना चाहता था कि उन्होंने यह शानदार परफॉरमेंस
00:00:25कैसी हासिल की। इसके नतीजे वाकई बहुत प्रभावशाली रहे हैं। नया कंपाइलर VS Code कोडबेस को
00:00:31जो कि लगभग 8,000 फाइलों में 13 लाख लाइन्स का कोड है, सिर्फ 10 सेकंड में बिल्ड कर देता है, जबकि पुराने
00:00:39कंपाइलर में 125 सेकंड लगते थे। और अब TypeScript GitHub पर गर्व से नंबर वन भाषा बन चुकी है,
00:00:44मानो या न मानो, यह नया कंपाइलर बहुत से लोगों की जिंदगी बदलने वाला है। इसके बारे में सोचकर ही मैं थोड़ा भावुक हो रहा हूँ।
00:00:49लेकिन वर्ज़न 6 और 7 के लगभग एक जैसे फीचर्स को देखने के बजाय, मैं गहराई में जाकर देखना चाहता था
00:00:54कि यह परफॉरमेंस कैसे हासिल की गई। तो चलिए नए कंपाइलर को देखते हैं और समझते हैं
00:00:59कि यह इतना तेज़ क्यों है। तो इसे दोबारा क्यों लिखा गया? C# के निर्माता और Microsoft के टेक्निकल फेलो
00:01:09एंडर्स हेजल्सबर्ग ने सीधे शब्दों में कहा, JavaScript UI और ब्राउज़र्स के लिए ऑप्टिमाइज्ड है।
00:01:16यह कंप्यूट-इंटेेंसिव वर्कफ़्लो और कंपाइलर्स के लिए ऑप्टिमाइज्ड नहीं है, और इसका कारण स्पष्ट है
00:01:22क्योंकि यह सिंगल-थ्रेडेड है, और एब्स्ट्रैक्ट सिंटैक्स ट्री या टाइप चेकिंग जैसी प्रक्रिया
00:01:27एक सिंगल कोर के साथ एक सीमा तक ही स्केल हो सकती है। आप तकनीक के रूप में काम को वर्क्स में बाँट सकते हैं, लेकिन
00:01:32फिर आपको डेटा को सीरियलाइज और डिसीरियलाइज करना पड़ेगा जो कि धीमा और मेमोरी-इंटेेंसिव है।
00:01:38फिर आपको इस सब को मैनेज करने की जटिलता से भी निपटना होगा। इसलिए उन्होंने Go को चुना,
00:01:43जो इस काम के लिए बिल्कुल उपयुक्त भाषा का उपयोग करके ज़बरदस्त परफॉरमेंस सुधार देती है।
00:01:48Go एक कंपाइल भाषा है, जिसका मतलब है कि हम इंटरप्रेट करने के बजाय सीधे CPU पर कंपाइल्ड कोड चला सकते हैं।
00:01:54साथ ही Go का कंकंसी मॉडल बहुत अच्छा है, जिसका मतलब है कि हम एक ही समय में
00:02:00शेयर्ड मेमोरी के साथ कई एग्ज़ीक्यूशन थ्रेड्स आसानी से चला सकते हैं। यानी हम सिर्फ एक कोर के बजाय
00:02:06आपकी मशीन के सभी कोर्न्स का लाभ उठा सकते हैं। यह बढ़त लगभग बराबर बँटी हुई है - आधी स्पीड
00:02:12नेटिव कोड में होने के कारण है और बाकी शेयर्ड मेमोरी कंकंसी से मिलती है। Go मूल रूप से इसके लिए बेहतरीन भाषा है।
00:02:17बात सिर्फ यह नहीं है कि Go तेज़ है, बल्कि इसके पास काम में लगाने के लिए अधिक रिसोर्सेज़ हैं
00:02:23और नतीजे खुद बोलते हैं। अगर हम आँकड़ों को देखें, तो 13 लाख लाइन्स वाले VS Code में पुराने कंपाइलर पर 125.7 सेकंड लगते थे,
00:02:32अब 10.6 सेकंड लगते हैं जो 11.9 गुना सुधार है। BlueSky के लिए यह 24.3 से घटकर 2.8 सेकंड हो गया, यानी 8.7 गुना सुधार।
00:02:42और Playwright के लिए यह 12.8 सेकंड से घटकर 1.5 सेकंड हो गया, जो 8.7 गुना सुधार है। मजे की बात यह है
00:02:49कि Better Stack को सब्सक्राइब करने में सिर्फ एक सेकंड लगता है। अब यह अंतर और बढ़ने वाला है क्योंकि कोर्न्स
00:02:54पुराने समय की दर से तेज़ नहीं हो रहे हैं, लेकिन हमें अधिक संख्या में कोर्न्स मिल रहे हैं। उदाहरण के लिए,
00:03:00मैं M3 Max का उपयोग कर रहा हूँ जिसमें 14 कोर्न्स हैं जो कि कमाल है। मुझे याद है कि मैंने कॉलेज में एक गेमिंग PC बनाया था
00:03:06जिसमें चार कोर्न्स वाला Intel i7 था और मुझे लगता था कि वह बहुत ताकतवर है। JavaScript कंपाइलर
00:03:11उनमें से सिर्फ एक कोर का उपयोग करता, लेकिन Go के साथ मैं उन सभी का इस्तेमाल कर सकता हूँ। और जाहिर है, आपके पास जितने ज्यादा कोर्न्स होंगे,
00:03:17आपको उतनी ही बेहतर परफॉरमेंस मिलेगी। अगर मैं इस मशीन पर वर्ज़न 6 में एक बड़ा प्रोजेक्ट कंपाइल करता हूँ, तो आप देखेंगे कि इसमें 45
00:03:24सेकंड लगते हैं और वर्ज़न 7 के साथ हम इसे 3 सेकंड तक कम कर सकते हैं। कंपाइलेशन प्रक्रिया के
00:03:29कई फेज़ होते हैं और टाइप चेकिंग फेज़ उनमें से सिर्फ एक है। इसके लिए Go
00:03:34चार टाइप चेकर्स शुरू करेगा और उनसे कोडबेस का एक-चौथाई हिस्सा चेक करवाएगा। लेकिन आप वास्तव में
00:03:39इसे और भी बेहतर बना सकते हैं। कंपाइलेशन के दौरान, आप और तेज़ परफॉरमेंस के लिए चेकर्स को 12 पर सेट कर सकते हैं।
00:03:45तो मैंने अपनी मशीन पर VS Code रिपॉजिटरी डाउनलोड की है ताकि हम TypeScript 7 और 6 के बीच का अंतर देख सकें।
00:03:51डिफ़ॉल्ट रूप से मेरी मशीन पर tsc अब TypeScript 7 की ओर पॉइंट करेगा, इसलिए हम इस पर
00:03:57डायग्नोस्टिक्स चलाएंगे। आप देख सकते हैं कि इसमें 5.4 सेकंड लगे और ज्यादातर समय असल में
00:04:02चेक करने में बीता, यानी 4.7 सेकंड। हम इसे और तेज़ कर सकते हैं, तो अगर हम एक और फ्लैग जोड़ें
00:04:08checkers 12, तो आप देख सकते हैं कि कुल समय अब 5.4 से घटकर 3.5 हो गया है और यह सब समय
00:04:15चेक टाइम में से कम हुआ है। यहाँ हमारे पास 4.7 सेकंड थे जो घटकर 2.9 हो गए हैं। अब चलिए वही
00:04:20कमांड फिर से चलाते हैं, लेकिन इस बार हम TypeScript 6 का उपयोग करेंगे। इसमें थोड़ा
00:04:23समय लगेगा, इसलिए हम इसे तेज़ी से आगे बढ़ाएंगे। इंतज़ार करने के बाद आप देख सकते हैं कि TypeScript 6 ने
00:04:2845.3 सेकंड में काम पूरा किया, जबकि सभी कोर्न्स पर चलाने पर हमें 3.5 सेकंड का समय मिलता है।
00:04:36तो यह मेरी M3 Max चिप पर प्रभावी रूप से 15 गुना सुधार है। मेरे लिए यहाँ 3.5 सेकंड का समय आता है।
00:04:43ऐसा करने से निश्चित रूप से अन्य प्रोसेस की परफॉरमेंस कम होगी, लेकिन अगर आप कुछ और नहीं कर रहे हैं,
00:04:47तो आप अपनी मशीन के सभी रिसोर्सेज़ का उपयोग कर सकते हैं। तो चलिए नए कंपाइलर के कुछ असली कोड को देखते हैं
00:04:52ताकि समझ सकें कि Go यह परफॉरमेंस कैसे हासिल कर पाता है। यहाँ हमारे पास bindSourceFiles
00:04:57फंक्शन है, जिसका काम फाइल में हर डिक्लेरेशन को बिल्ड करना और यह तय करना है कि वह किस स्कोप से संबंधित है।
00:05:03हम संभवतः हज़ारों फाइलों को प्रोसेस कर रहे हैं। हम हर फाइल पर लूप चलाते हैं, उसे बाइंड करने के लिए एक फंक्शन क्यू में लगाते हैं,
00:05:09और फिर उन सभी के समाप्त होने का इंतज़ार करते हैं। खूबसूरत बात यह है कि हमें यह सोचने की ज़रूरत नहीं है कि
00:05:14यह काम कोर्न्स के बीच कैसे डिस्ट्रीब्यूट होता है। Go का रनटाइम यह सब खुद संभाल लेता है। हम थ्रेड्स नहीं बना रहे हैं
00:05:20और न ही कोर्न्स के बीच जटिल कम्युनिकेशन को मैनेज कर रहे हैं। हम बस कहते हैं “यह कुछ काम है” और वह समझ लेता है कि बाकी काम
00:05:26कैसे करना है। JavaScript में हम लगभग एक जैसा कोड लिख सकते हैं, लेकिन CPU-बाउंड काम के लिए यह बेकार है।
00:05:32यह सब अभी भी एक ही थ्रेड पर क्रमिक रूप से होगा, भले ही प्रोमिसेस पैरेललिज्म का भ्रम देते हों।
00:05:38वर्क्स तकनीकी रूप से इसका एक तरीका हैं, लेकिन आप उनके बीच ऑब्जेक्ट्स शेयर नहीं कर सकते, SharedArrayBuffer के साथ केवल रॉ बाइट्स शेयर कर सकते हैं।
00:05:43इसलिए वर्कर को पार्स्ड सिंटैक्स ट्री देने का मतलब है पूरे ट्री को सीरियलाइज करना, उसे कॉपी करना
00:05:48और दूसरी तरफ उसे फिर से बनाना। बड़ी फाइल के लिए, यह असल काम से भी ज़्यादा महंगा पड़ सकता है।
00:05:53मूल रूप से ऐसी ही चीजें हैं जो Go को CPU-बाउंड काम के लिए स्वाभाविक रूप से बेहतर बनाती हैं। इसके पास
00:05:58एक ऐसा रनटाइम है जो इस पूरी कंकंसी को आपके लिए संभाल सकता है और इसमें शेयर्ड मेमोरी है ताकि आप ऑब्जेक्ट्स को बिना कॉपी किए
00:06:03पास कर सकें। अब कंपाइल टाइम के अलावा, आप जिस चीज़ पर सबसे ज़्यादा ध्यान देंगे
00:06:07वह है आपके लैंग्वेज सर्वर की स्पीड। बड़े TypeScript कोडबेस पर काम करने वाले किसी भी व्यक्ति को
00:06:13टाइप्स के चेक होने का इंतज़ार करने का दर्द पता है, और भगवान कसम, इन Intel Macs ने इसे सच में महसूस किया है। मुझे याद है कि कुछ साल पहले
00:06:20प्रोजेक्ट्स पर काम करते समय आप रिपॉजिटरी खोलते थे और लाल घुमावदार लाइनें देखने के लिए
00:06:24आपको दो मिनट तक इंतज़ार करना पड़ता था। और फिर जब भी आप कोई बदलाव करते थे,
00:06:29तो वह बहुत दर्दनाक होता था। डेवलपर का अनुभव बेहद खराब होता है और फिर कोई भी उस कोडबेस पर
00:06:34काम नहीं करना चाहता। हालाँकि, नए लैंग्वेज सर्वर का मतलब है आपके IDE में तुरंत फीडबैक। तो आप
00:06:40फाइल खोल सकते हैं, बदलाव कर सकते हैं और कुछ ही मिलीसेकंड में एरर्स देख सकते हैं, भले ही आप
00:06:46बहुत बड़े कोडबेस पर ही काम क्यों न कर रहे हों। परफॉरमेंस के अलावा, नया लैंग्वेज सर्वर अब अधिक स्थिर है।
00:06:51इसलिए जब टाइप चेकिंग काम करना बंद कर देती है, तो अपने IDE को रीस्टार्ट करने की ज़रूरत बहुत कम हो गई है। TypeScript 7
00:06:57ने असफल लैंग्वेज सर्वर कमांड्स को 80% से अधिक कम कर दिया है और सर्वर क्रैश को 60% से अधिक घटा दिया है।
00:07:04तो अब दीवारों पर कम लैपटॉप फेंके जाएंगे, जो असल में पर्यावरण के लिए काफी अच्छा है।
00:07:08किसको पता था कि Microsoft सच में ग्रह की परवाह करता है? अब यह भी बताने योग्य है कि यह एक पोर्ट है,
00:07:13कोई रीराइट नहीं। TypeScript टीम ने यह सुनिश्चित करने में बहुत सावधानी बरती है कि नया कंपाइलर मूल रूप से
00:07:19पुराने वाले के साथ पूरी तरह से संगत हो। स्पीड के अलावा आपको शायद कोई अंतर महसूस भी नहीं होगा।
00:07:24लेकिन जबकि अब आप अपने प्रोजेक्ट्स पर TypeScript 7 चला सकते हैं, फिर भी आपको अपने पसंदीदा
00:07:29पैकेजेस के अपडेट होने का इंतज़ार करना होगा। उनका प्रोग्रामैटिक API अभी भी गायब है, जिसका अर्थ है कि जो भी पैकेज
00:07:35उस पर निर्भर है, उसे 7.1 रिलीज़ का इंतज़ार करना होगा। इसलिए typescript-eslint, ts-jest, या ts-node जैसे पैकेजेस
00:07:42पीछे छूट जाएंगे। TypeScript 7 का पूरा रिलीज़ आपके डाउनलोड के लिए उपलब्ध है, लेकिन आपको
00:07:47VS Code के लिए TypeScript 7 एक्सटेंशन को अलग से इंस्टॉल करना होगा। डिफ़ॉल्ट पैकेज को बाद में
00:07:53अपडेट किया जाएगा, लेकिन अभी के लिए बस उस एक्सटेंशन को इंस्टॉल करें। एक्सटेंशन स्टोर पर इसका नाम TypeScript 7 है और
00:07:58फिर सब कुछ उम्मीद के मुताबिक चलेगा। अगर आप TypeScript 7 के फीचर सेट के बारे में और देखना चाहते हैं,
00:08:03तो हमने उसी पर एक वीडियो बनाया है जिसे आप यहाँ देख सकते हैं। और अगर आपको इस तरह के ब्रेकडाउन पसंद हैं तो
00:08:08और वीडियो देखने के लिए Better Stack को सब्सक्राइब करें। उम्मीद है कि आपने यहाँ कुछ नया सीखा होगा और अब आप
00:08:12TypeScript 7 के साथ मिलने वाले तेज़ डेवलपमेंट का फायदा उठा सकते हैं। मुझे तो पक्का पता है कि मुझे इसका इस्तेमाल करने में
00:08:16मज़ा आने वाला है। देखने के लिए धन्यवाद, और जाहिर है, मैं आपसे अगले वीडियो में मिलूँगा।