TypeScript 7 എത്തുന്നത് ടൈപ്പ്-ചെക്കിംഗ് (type-checking) സമയം പണ്ടത്തേതിനേക്കാൾ പത്തിലൊന്നാക്കി കുറയ്ക്കുകയും മെമ്മറി ഉപയോഗം നാലിലൊന്ന് വരെ കുറയ്ക്കുകയും ചെയ്യുന്ന ഒരു Go-അധിഷ്ഠിത കംപൈലറോടെയാണ്. ഒരു ഡെവലപ്പർ VS Code-ൽ “save” അമർത്തുന്ന നിമിഷം തന്നെ ഈ മാറ്റം അനുഭവപ്പെടും.

വലിയ monorepos-കളിൽ TypeScript-ന്റെ incremental checker തടസ്സമുണ്ടാക്കുന്നു എന്ന വർഷങ്ങളായുള്ള പരാതികൾക്ക് പിന്നാലെയാണ് ലാംഗ്വേജ് സർവീസിന്റെ കാതൽ Go ഉപയോഗിച്ച് വീണ്ടും എഴുതാനുള്ള Microsoft-ന്റെ തീരുമാനം. പാഴ്സിംഗ് (parsing), ടൈപ്പ്-ചെക്കിംഗ് (type-checking) തുടങ്ങിയ കഠിനമായ ജോലികൾ നിലവിലുള്ള JavaScript ഇംപ്ലിമെന്റേഷനിൽ നിന്ന് മാറ്റുന്നതിലൂടെ, ടീമിന് ലാംഗ്വേജ് തലത്തിൽ പാരലിസലിസം (parallelism) സാധ്യമാക്കാനും Node.js റൺടൈമിന്റെ ഓവർഹെഡ് കുറയ്ക്കാനും കഴിഞ്ഞു.

എന്തുകൊണ്ടാണ് ഈ മാറ്റം പ്രധാനമാകുന്നത്

Next.js അല്ലെങ്കിൽ Nuxt പോലുള്ള ഫ്രെയിംവർക്കുകൾ ഉപയോഗിച്ച് നിർമ്മിച്ച ആധുനിക വെബ് ആപ്പുകൾ പതിവായി ആയിരക്കണക്കിന് മോഡ്യൂളുകൾ ഉൾക്കൊള്ളുന്നു. അത്തരം സാഹചര്യങ്ങളിൽ, ആദ്യത്തെ ടൈപ്പ് എറർ (type error) കണ്ടെത്താൻ എടുക്കുന്ന സമയം എഡിറ്റ്-കംപൈൽ-ഡീബഗ് (edit-compile-debug) പ്രക്രിയയെ സങ്കീർണ്ണമാക്കിയേക്കാം. പുതിയ കംപൈലർ VS Code-ൽ ആദ്യത്തെ എറർ കണ്ടെത്താൻ എടുക്കുന്ന സമയം 17.5 സെക്കൻഡിൽ നിന്ന് 1.3 സെക്കൻഡിൽ താഴെയായി കുറയ്ക്കുന്നു; അതായത് ആ എഡിറ്ററിൽ മാത്രം 11.9× വേഗത വർദ്ധിക്കുന്നു. വിവിധ പ്രോജക്റ്റുകളിൽ നിന്നുള്ള സ്വതന്ത്ര ബെഞ്ച്മാർക്കുകളും സമാനമായ നേട്ടങ്ങൾ സ്ഥിരീകരിക്കുന്നു:

  • VS Code: 11.9× വേഗതയിൽ
  • Sentry: 8.9× വേഗതയിൽ
  • Bluesky: 8.7× വേഗതയിൽ
  • Playwright: 8.7× വേഗതയിൽ
  • Tldraw: 7.7× വേഗതയിൽ

മെമ്മറി ഉപയോഗത്തിലും പുരോഗതിയുണ്ട്. VS Code-ന്റെ TypeScript സെർവർ ഇപ്പോൾ 18% കുറഞ്ഞ RAM മാത്രമേ ഉപയോഗിക്കുന്നുള്ളൂ, Bluesky-യിൽ 26% കുറവ് കാണുന്നു, Tldraw-യിൽ 15% ലാഭിക്കാം.

ഈ കണക്കുകൾ യഥാർത്ഥ ഉൽപ്പാദനക്ഷമതയിലേക്ക് മാറ്റപ്പെടുന്നു: ഓരോ കുറച്ച് സെക്കൻഡിലും ഒരു ഫയൽ സേവ് ചെയ്യുന്ന ഒരു ഡെവലപ്പർക്ക് ഇപ്പോൾ പത്ത് മടങ്ങ് വേഗത്തിൽ ജോലി ചെയ്യാൻ കഴിയും, ഇത് വലിയ കോഡ്ബേസുകളിലെ ദൈനംദിന തടസ്സങ്ങൾ ഗണ്യമായി കുറയ്ക്കുന്നു.

സൂക്ഷ്മമായ നിയന്ത്രണത്തിനായി പുതിയ ഓപ്ഷനുകൾ

ടീമുകൾക്ക് അവരുടെ ഹാർഡ്‌വെയറിനും വർക്ക്ഫ്ലോയ്ക്കും അനുസൃതമായി പെർഫോമൻസ് ക്രമീകരിക്കാൻ സഹായിക്കുന്ന ഒരു കൂട്ടം കമാൻഡ്-ലൈൻ ഫ്ലാഗുകൾ (command-line flags) Go കംപൈലർ അവതരിപ്പിക്കുന്നു:

  • പാരലൽ പ്രോസസ്സിംഗ് (--checkers കൂടാതെ --builders) പാഴ്സിംഗും ടൈപ്പ്-ചെക്കിംഗും ഒരേസമയം പ്രവർത്തിപ്പിക്കുന്നു, ഇത് വേഗതയും മെമ്മറി ഉപയോഗവും തമ്മിൽ സന്തുലിതമാക്കാൻ ഉപയോക്താക്കളെ അനുവദിക്കുന്നു.
  • സിംഗിൾ-ത്രെഡഡ് മോഡ് (--singleThreaded) ഡീബഗ്ഗിംഗ് ലളിതമാക്കുന്നു കൂടാതെ കുറഞ്ഞ റിസോഴ്‌സുകളുള്ള സാഹചര്യങ്ങൾക്ക് അനുയോജ്യവുമാണ്.
  • സ്കെയിലബിൾ വർക്കേഴ്സ് (Scalable workers) ടൈപ്പ്-ചെക്കിംഗ് വർക്കേഴ്സിനെ ബിൽഡർ വർക്കേഴ്സിൽ നിന്ന് സ്വതന്ത്രമായി സ്കെയിൽ ചെയ്യാൻ അനുവദിക്കുന്നു, ഇത് കസ്റ്റം ബിൽഡ് പൈപ്പ്‌ലൈനുകൾ സാധ്യമാക്കുന്നു.
  • മെച്ചപ്പെട്ട വാച്ച് മോഡ് (Improved watch mode) പഴയ Node-അധിഷ്ഠിത ഫയൽ സ്കാനറിന് പകരം ഒരു Go ഫയൽ വാച്ചർ ഉപയോഗിക്കുന്നു, ഇത് വലിയ node_modules ട്രീകുകളിലെ ചെലവേറിയ റിക്കേഴ്സീവ് സ്കാനുകൾ ഒഴിവാക്കുന്നു.

നിലവിലുള്ള കോഡ് മാറ്റം വരുത്താതെ തന്നെ CI പൈപ്പ്‌ലൈനുകളിൽ നിന്ന് കൂടുതൽ പെർഫോമൻസ് നേടാൻ ഈ ഓപ്ഷനുകൾ വലിയ സ്ഥാപനങ്ങളെ സഹായിക്കുന്നു.

വെല്ലുവിളികളും എതിർപ്പുകളും

ഒരു കോർ കംപോണന്റ് മറ്റൊരു ഭാഷയിൽ വീണ്ടും എഴുതുന്നത് വിവാദങ്ങളിൽ നിന്ന് മുക്തമല്ല. നിലവിലുള്ള JavaScript ഇംപ്ലിമെന്റേഷൻ പരിഹരിച്ചേക്കാവുന്ന പുതിയ ബഗുകളോ ഇൻകോംപാറ്റിബിലിറ്റികളോ (incompatibilities) Go-ലേക്ക് മാറുന്നത് വഴി ഉണ്ടായേക്കാം എന്ന് ചില ഡെവലപ്പർമാർ ആശങ്കപ്പെടുന്നു. ഈ മാറ്റം TypeScript ടൂൾചെയിനിൽ ഒരു Go റൺടൈം ഡിപെൻഡൻസി കൂടി ചേർക്കുന്നു, ഇത് Node.js-മായി chặtപ്പായി ബന്ധപ്പെട്ട സാഹചര്യങ്ങളെ സങ്കീർണ്ണമാക്കിയേക്കാം. തങ്ങളുടെ കസ്റ്റം പ്ലഗിനുകളും ലാംഗ്വേജ് സെർവർ എക്സ്റ്റൻഷനുകളും മാറ്റമില്ലാതെ പ്രവർത്തിക്കുന്നുണ്ടെന്ന് ആദ്യമായി ഉപയോഗിക്കുന്നവർ ഉറപ്പുവരുത്തേണ്ടതുണ്ട്.

ഇനി എന്താണ് ശ്രദ്ധിക്കേണ്ടത്

പബ്ലിക് റിലീസിൽ Microsoft Go-അധിഷ്ഠിത കംപൈലർ ഡിഫോൾട്ടായി മാറ്റിയിട്ടുണ്ട്, എങ്കിലും പഴയ JavaScript എഞ്ചിൻ ഉപയോഗിക്കാൻ ഇപ്പോഴും സാധ്യമാണ്. പ്രധാന IDE-കളിലും CI സർവീസുകളിലും ഇതിന്റെ ഉപയോഗം എത്രത്തോളമുണ്ടെന്ന് നിരീക്ഷിക്കുന്നത്, ഈ മാറ്റം നൽകുന്ന ഗുണങ്ങൾ അതിന്റെ പ്രയാസങ്ങളേക്കാൾ കൂടുതലാണോ എന്ന് മനസ്സിലാക്കാൻ സഹായിക്കും. കൂടാതെ, പുതിയ ഫ്ലാഗുകളെക്കുറിച്ചുള്ള കമ്മ്യൂണിറ്റി ഫീഡ്‌ബാക്ക് കംപൈലറിന്റെ വളർച്ചയെ സ്വാധീനിക്കും—പാരലൽ ഓപ്ഷനുകൾ ക്രമീകരിക്കാൻ പ്രയാസമാണെന്ന് ഡെവലപ്പർമാർ കണ്ടെത്തിയാൽ, Microsoft കൂടുതൽ ലളിതമായ പ്രീസെറ്റുകൾ (presets) അവതരിപ്പിച്ചേക്കാം.

ചുരുക്കത്തിൽ: TypeScript 7-ന്റെ Go റീറൈറ്റ് പത്ത് മടങ്ങ് വേഗതയുള്ള ടൈപ്പ്-ചെക്കിംഗും ശ്രദ്ധേയമായ മെമ്മറി ലാഭവും നൽകുന്നു. പുതിയ റൺടൈമിലേക്ക് ഇക്കോസിസ്റ്റം സുഗമമായി മാറിക്കഴിഞ്ഞാൽ, വലിയ തോതിലുള്ള JavaScript ഡെവലപ്‌മെന്റ് കൂടുതൽ വേഗതയുള്ളതാക്കാൻ ഈ മാറ്റത്തിന് കഴിയും.