- ত্রুটির বার্তা এবং অর্থ একই রাখার জন্য, টাইপস্ক্রিপ্ট টিম সম্পূর্ণ নতুন করে লেখার পরিবর্তে Go-তে পোর্ট করার সিদ্ধান্ত নিয়েছে।
- গো-এর গার্বেজ কালেকশন এবং ফার্স্ট-ক্লাস ক্লোজারগুলো কম্পাইলারের জটিল ডেটা স্ট্রাকচারগুলো পরিচালনা করার জন্য অপরিহার্য ছিল।
- রাস্টের বরো চেকার সার্কুলার রেফারেন্সের জন্য ম্যানুয়াল সমাধান করতে বাধ্য করত, যা অপ্রয়োজনীয় জটিলতা বাড়াত।
- Go কোনো অতিরিক্ত প্রচেষ্টা ছাড়াই উন্নত নেটিভ কোড জেনারেশন এবং শেয়ার্ড-মেমরি কনকারেন্সি প্রদান করেছে।

যখন টাইপস্ক্রিপ্ট টিম তাদের কম্পাইলারকে একটি নতুন ভাষায় পোর্ট করার সিদ্ধান্ত নেয়, তখন তাদের একটি সুস্পষ্ট লক্ষ্য ছিল: সবকিছু আগের মতোই হুবহু সচল রাখা। এর অর্থ ছিল সেইসব নির্দিষ্ট এরর মেসেজ এবং সেম্যান্টিকস অক্ষুণ্ণ রাখা, যার ওপর ডেভেলপাররা বছরের পর বছর ধরে নির্ভর করে আসছে। প্রধান আর্কিটেক্ট অ্যান্ডার্স হেইলসবার্গের মতে, সম্পূর্ণ নতুন করে লেখার বিষয়টি আলোচনার বাইরে ছিল, কারণ এতে ব্যাকওয়ার্ড কম্প্যাটিবিলিটি নষ্ট হওয়ার ঝুঁকি ছিল। এর পরিবর্তে, তারা একটি পোর্ট করার সিদ্ধান্ত নেয়—এবং এই সিদ্ধান্তটি একটি আশ্চর্যজনক পছন্দের পথ তৈরি করে দেয়: রাস্টকে বেছে নেওয়া।
পোর্টটির জন্য এমন একটি ভাষার প্রয়োজন ছিল যা বড় ধরনের পরিবর্তন না এনেই কম্পাইলারের জটিল অভ্যন্তরীণ কাঠামো সামলাতে পারে। দলটি দ্রুতই বুঝতে পারল যে গার্বেজ কালেকশন এবং ফার্স্ট-ক্লাস ক্লোজার অপরিহার্য। Go-তে এই দুটিই বিল্ট-ইন রয়েছে, সাথে প্রতিটি প্রধান প্ল্যাটফর্মে উন্নত নেটিভ কোড জেনারেশন এবং শেয়ার্ড-মেমরি কনকারেন্সিও পাওয়া যায়। অন্যদিকে, Rust ব্যবহার করলে উল্লেখযোগ্য পরিমাণে ম্যানুয়াল ওয়ার্কঅ্যারাউন্ডের প্রয়োজন হতো, বিশেষ করে কম্পাইলারের সার্কুলার ডেটা স্ট্রাকচারগুলোর জন্য।
বন্দরের জন্য মরিচা কেন অতিক্রম করবেন
হেইলসবার্গ ব্যাখ্যা করেছেন যে কম্পাইলারটি প্যারেন্ট পয়েন্টার, রিকার্সিভ টাইপ এবং পরস্পরকে নির্দেশকারী সিম্বলে পরিপূর্ণ। এগুলো সার্কুলার রেফারেন্স তৈরি করে, যা গার্বেজ কালেকশনযুক্ত একটি ভাষার জন্য স্বাভাবিক। Go-এর রানটাইম এটি নির্বিঘ্নে সামলে নেয়, ফলে দলটি ভাষাটির সাথে লড়াই না করে পোর্টটির উপর মনোযোগ দিতে পারে। রাস্টের বরো চেকার মেমরি সুরক্ষার জন্য শক্তিশালী হলেও, এটি আনসেফ কোড বা রেফারেন্স-কাউন্টিং কৌশলের আশ্রয় না নিয়ে ওই ধরনের কাঠামোকে অনুমোদন দেয় না। এতে জটিলতা ও ঝুঁকি বাড়বে, যার কোনো সুস্পষ্ট সুফল নেই।
দুটি ভাষার তুলনা করার সময়, দলটি কোড জেনারেশন বা কনকারেন্সির ক্ষেত্রে রাস্টের কোনো উল্লেখযোগ্য সুবিধা খুঁজে পায়নি। গো-এর নেটিভ কোড জেনারেশন ইতিমধ্যেই পরিপক্ক, এবং এর গোরুটিনগুলো কনকারেন্ট এক্সিকিউশনের জন্য একটি সহজ ও কার্যকর মডেল প্রদান করে। কিছু এজ কেসে রাস্টের পারফরম্যান্স সামান্য ভালো হতে পারে, কিন্তু এর ওনারশিপ রুলসের সাথে কম্পাইলারকে কাজ করানোর জন্য যে অতিরিক্ত প্রচেষ্টা প্রয়োজন ছিল, তা যুক্তিযুক্ত ছিল না। পোর্টটিকে বাস্তবসম্মত হতে হতো, ভাষার ফিচারগুলোর প্রদর্শনী নয়।
সামঞ্জস্য ও শব্দার্থবিদ্যা: সর্বোচ্চ অগ্রাধিকার
এই পোর্ট করার পেছনের মূল উদ্দেশ্য ছিল হুবহু একই রকম আচরণ বজায় রাখা। ডেভেলপাররা তাদের কোড ডিবাগ করার জন্য টাইপস্ক্রিপ্টের এরর মেসেজের ওপর নির্ভর করে , এবং যেকোনো পরিবর্তন তাদের কাজের ধারাকে ব্যাহত করতে পারে। Go-তে পোর্ট করার মাধ্যমে, দলটি বিদ্যমান লজিক এবং ডেটা স্ট্রাকচারগুলো পুনরায় ব্যবহার করতে পেরেছে, যা আউটপুটকে বাইট-বাই-বাইট সামঞ্জস্যপূর্ণ রাখে। এই পদ্ধতিটি এমন সূক্ষ্ম বাগ আসার ঝুঁকিও কমায়, যা কোড নতুন করে লিখলে দেখা দিতে পারত।
Go-এর গার্বেজ কালেকশন একটি মূল সহায়ক ছিল। কম্পাইলারের অভ্যন্তরীণ নোড এবং রেফারেন্সের গ্রাফটি অত্যন্ত আন্তঃসংযুক্ত, এবং ম্যানুয়াল মেমরি ম্যানেজমেন্ট একটি দুঃস্বপ্নের মতো হতো। Go-এর সাহায্যে, টিম স্বয়ংক্রিয়ভাবে মেমরি বরাদ্দ এবং মুক্ত করতে পারে, যা তাদের কম্পাইলারের লজিকের উপর মনোযোগ দিতে সাহায্য করে। ফার্স্ট-ক্লাস ক্লোজারগুলোও কম্পাইলারের বিভিন্ন পাস এবং রূপান্তর বাস্তবায়ন করা সহজ করে দিয়েছে, কারণ এগুলো স্বাভাবিকভাবেই কনটেক্সট ক্যাপচার করতে পারে।
রাস্টের বরো চেকার: একটি ডিলব্রেকার
রাস্টের বরো চেকারটি কম্পাইল টাইমে ডেটা রেস এবং মেমরি এরর প্রতিরোধ করার জন্য ডিজাইন করা হয়েছে, কিন্তু এর কিছু কঠোর নিয়ম রয়েছে। টাইপস্ক্রিপ্ট কম্পাইলারের ডেটা স্ট্রাকচারগুলো সাইকেল এবং শেয়ার্ড রেফারেন্সে পরিপূর্ণ, যা বরো চেকার প্রত্যাখ্যান করে, যদি না আপনি আনসেফ ব্লক বা Rc/RefCell ব্যবহার করেন। হেইলসবার্গ উল্লেখ করেছেন যে, এর ফলে প্রতিটি সার্কুলার ডেটা স্ট্রাকচারের জন্য ম্যানুয়াল ওয়ার্কঅ্যারাউন্ড করতে হবে, যা বয়লারপ্লেট কোড যোগ করবে এবং কোড রক্ষণাবেক্ষণকে আরও কঠিন করে তুলবে। এই অতিরিক্ত কাজের যৌক্তিকতা প্রমাণের জন্য কোনো কোডজেন বা কনকারেন্সি সুবিধা ছিল না।
অবশেষে, সিদ্ধান্তটি স্পষ্ট ছিল। Go সরলতা, কর্মক্ষমতা এবং সামঞ্জস্যের সঠিক ভারসাম্য প্রদান করেছে। পোর্ট করার কাজ এখন চলছে, এবং দলটি আত্মবিশ্বাসী যে এটি একটি দ্রুততর ও অধিক কার্যকর কম্পাইলারের সাথে একই TypeScript অভিজ্ঞতা প্রদান করবে। ডেভেলপারদের জন্য এর অর্থ হলো, এতে কোনো অপ্রত্যাশিত কিছু নেই—তারা বরাবর যে নির্ভরযোগ্য টুলটি ব্যবহার করে এসেছেন, সেটিই এখন আরও আধুনিক একটি ভিত্তির ওপর চলবে।
সবকিছু বিবেচনা করে, টাইপস্ক্রিপ্ট পোর্টের জন্য রাস্টের পরিবর্তে গো বেছে নেওয়ার সিদ্ধান্তটি মূলত বাস্তবসম্মত প্রকৌশলগত কারণেই নেওয়া হয়েছে। গার্বেজ কালেকশন, ফার্স্ট-ক্লাস ক্লোজার এবং সার্কুলার রেফারেন্সের নির্বিঘ্ন পরিচালনার প্রয়োজনীয়তা গো-কে একটি স্বাভাবিক পছন্দ করে তুলেছিল। রাস্টের নিরাপত্তা নিশ্চয়তাগুলো চিত্তাকর্ষক, কিন্তু এর জন্য এমন একটি মূল্য দিতে হয় যা টাইপস্ক্রিপ্ট টিম বহন করতে রাজি ছিল না। এর ফলস্বরূপ এমন একটি পোর্ট তৈরি হয়েছে যা টাইপস্ক্রিপ্টের সেই সমস্ত বৈশিষ্ট্য অক্ষুণ্ণ রেখেছে যা ডেভেলপাররা পছন্দ করেন, এবং একই সাথে ভবিষ্যতের উন্নতির জন্য ভিত্তি স্থাপন করেছে।