TypeScript 7 এসেছে একটি Go-ভিত্তিক কম্পাইলার নিয়ে, যা টাইপ-চেকিংয়ের সময়কে আগের তুলনায় দশ ভাগের এক ভাগে নামিয়ে এনেছে এবং মেমরি ব্যবহারের পরিমাণ প্রায় এক-চতুর্থাংশ কমিয়ে দিয়েছে; এই পরিবর্তনটি একজন ডেভেলপার VS Code-এ “save” করার মুহূর্তেই অনুভব করতে পারবেন।
ল্যাঙ্গুয়েজ সার্ভিসের মূল অংশটি Go-তে পুনরায় লেখার Microsoft-এর এই সিদ্ধান্তটি এসেছে বড় আকারের monorepo-তে TypeScript-এর incremental checker আটকে যাওয়ার দীর্ঘদিনের অভিযোগের প্রেক্ষিতে। দীর্ঘদিনের JavaScript ইমপ্লিমেন্টেশন থেকে ভারী কাজগুলো—parsing এবং type-checking—সরিয়ে নেওয়ার মাধ্যমে টিমটি ল্যাঙ্গুয়েজ লেভেলে parallelism আনতে সক্ষম হয়েছে এবং Node.js runtime-এর overhead কমিয়ে এনেছে।
কেন এই পুনর্লিখন গুরুত্বপূর্ণ
Next.js বা Nuxt-এর মতো ফ্রেমওয়ার্ক দিয়ে তৈরি আধুনিক ওয়েব অ্যাপগুলোতে নিয়মিত হাজার হাজার মডিউল ব্যবহার করা হয়। এই ধরনের পরিবেশে প্রথম টাইপ এরর (type error) খুঁজে পেতে যে সময় লাগে, তা অনেক সময় edit-compile-debug লুপের বড় অংশ দখল করে নেয়। নতুন কম্পাইলারটি VS Code-এ প্রথম এরর খুঁজে পাওয়ার সময় ১৭.৫ সেকেন্ড থেকে কমিয়ে ১.৩ সেকেন্ডের নিচে নিয়ে এসেছে, যা শুধুমাত্র এই এডিটরের ক্ষেত্রেই ১১.৯× গতি বৃদ্ধি করেছে। বিভিন্ন প্রজেক্টের স্বতন্ত্র বেঞ্চমার্কগুলোও একই ধরনের উন্নতি নিশ্চিত করেছে:
- VS Code: ১১.৯× দ্রুততর
- Sentry: ৮.৯× দ্রুততর
- Bluesky: ৮.৭× দ্রুততর
- Playwright: ৮.৭× দ্রুততর
- Tldraw: ৭.৭× দ্রুততর
মেমরি ব্যবহারের ক্ষেত্রেও উন্নতি হয়েছে। VS Code-এর TypeScript সার্ভার এখন ১৮% কম RAM ব্যবহার করে, Bluesky-তে ২৬% হ্রাস দেখা গেছে এবং Tldraw ১৫% সাশ্রয় করে।
এই সংখ্যাগুলো বাস্তব জগতের প্রোডাক্টিভিটিতে রূপান্তরিত হয়: একজন ডেভেলপার যিনি প্রতি কয়েক সেকেন্ড অন্তর একটি ফাইল সেভ করেন, তিনি এখন দশ গুণ দ্রুত কাজ করতে পারবেন, যা বড় কোডবেসের ক্ষেত্রে প্রতিদিনের কাজের বাধা নাটকীয়ভাবে কমিয়ে দেবে।
সূক্ষ্ম নিয়ন্ত্রণের জন্য নতুন অপশনসমূহ
Go কম্পাইলার একগুচ্ছ command-line flag নিয়ে এসেছে যা টিমগুলোকে তাদের হার্ডওয়্যার এবং কাজের ধরন অনুযায়ী পারফরম্যান্স কাস্টমাইজ করার সুযোগ দেয়:
- Parallel processing (
--checkersএবং--builders) parsing এবং type-checking সমান্তরালভাবে চালায়, যা ব্যবহারকারীদের গতি এবং মেমরি চাপের মধ্যে ভারসাম্য বজায় রাখতে সাহায্য করে। - Single-threaded mode (
--singleThreaded) ডিবাগিং সহজ করে এবং কম রিসোর্সের পরিবেশে ব্যবহারের উপযোগী। - Scalable workers টাইপ-চেকিং ওয়ার্কারগুলোকে বিল্ডার ওয়ার্কার থেকে স্বাধীনভাবে স্কেল করার সুযোগ দেয়, যা কাস্টম বিল্ড পাইপলাইন তৈরি করতে সক্ষম করে।
- Improved watch mode পুরনো Node-ভিত্তিক ফাইল স্ক্যানারের পরিবর্তে একটি Go file watcher ব্যবহার করে, যা বিশাল
node_modulesট্রির ব্যয়বহুল রিকার্সিভ স্ক্যানিং দূর করে।
এই অপশনগুলো বড় প্রতিষ্ঠানগুলোকে তাদের বিদ্যমান কোড পরিবর্তন না করেই CI পাইপলাইন থেকে অতিরিক্ত পারফরম্যান্স বের করে আনার ক্ষমতা দেয়।
ঝুঁকি এবং আপত্তি
একটি কোর কম্পোনেন্ট ভিন্ন ভাষায় পুনরায় লেখা বিতর্কহীন নয়। কিছু ডেভেলপার চিন্তিত যে Go-তে স্থানান্তরিত হওয়ার ফলে নতুন কোনো বাগ (bug) বা অসামঞ্জস্যতা তৈরি হতে পারে যা পরিপক্ক JavaScript ইমপ্লিমেন্টেশনে ইতিমধ্যে সমাধান করা হয়েছে। এই পরিবর্তনটি TypeScript টুলচেইনে একটি Go runtime dependency-ও যোগ করে, যা Node.js-এর ওপর নির্ভরশীল পরিবেশগুলোকে জটিল করে তুলতে পারে। যারা প্রথম এটি ব্যবহার করবেন, তাদের নিশ্চিত করতে হবে যে তাদের কাস্টম প্লাগইন এবং ল্যাঙ্গুয়েজ সার্ভার এক্সটেনশনগুলো অপরিবর্তিত অবস্থায় কাজ করছে কি না।
পরবর্তী পর্যবেক্ষণযোগ্য বিষয়সমূহ
Microsoft পাবলিক রিলিজে Go-ভিত্তিক কম্পাইলারটিকে ডিফল্ট হিসেবে সেট করেছে, তবে প্রয়োজনে ব্যবহারের জন্য পুরনো JavaScript ইঞ্জিনটি এখনও উপলব্ধ রয়েছে। প্রধান IDE এবং CI সার্ভিসগুলোতে এর গ্রহণের হার পর্যবেক্ষণ করলে বোঝা যাবে যে পারফরম্যান্সের এই উন্নতি মাইগ্রেশনের জটিলতার চেয়ে বেশি কার্যকর কি না। এছাড়া, নতুন ফ্ল্যাগগুলোর ওপর কমিউনিটির মতামত কম্পাইলারের বিবর্তনকে প্রভাবিত করবে—যদি ডেভেলপাররা প্যারালাল অপশনগুলো টিউন করা কঠিন মনে করেন, তবে Microsoft উচ্চতর লেভেলের presets আনতে পারে।
সারকথা: TypeScript 7-এর Go পুনর্লিখন দশ গুণ পর্যন্ত দ্রুততর টাইপ-চেকিং এবং উল্লেখযোগ্য মেমরি সাশ্রয় প্রদান করে; এই পরিবর্তনটি বড় আকারের JavaScript ডেভেলপমেন্টকে তাৎক্ষণিকভাবে আরও দ্রুততর করে তুলতে পারে—যদি ইকোসিস্টেমটি নতুন runtime-এর সাথে মসৃণভাবে মানিয়ে নিতে পারে।
