വലിയ മോണോറെപ്പോകൾക്ക് (monorepos) ഫയലുകൾ സമാന്തരമായി (parallel) കമ്പൈൽ ചെയ്യാനും ഡെവലപ്പർമാരുടെ ഫീഡ്‌ബാക്ക് ലൂപ്പുകൾ വേഗത്തിലാക്കാനും സഹായിക്കുന്ന "isolated declarations" എന്ന കമ്പൈലർ മോഡുമായി TypeScript 7 പുറത്തിറങ്ങിയിരിക്കുന്നു.

എന്തുകൊണ്ടാണ് ഇപ്പോൾ isolated declarations പ്രധാനമാകുന്നത്

ഈ റിലീസ് വരെ, TypeScript കമ്പൈലർ ഡെക്ലറേഷൻ ഫയലുകൾ (.d.ts) ഒരു സിംഗിൾ ത്രെഡിലാണ് (single thread) പ്രോസസ്സ് ചെയ്തിരുന്നത്. നൂറുകണക്കിന് പാക്കേജുകൾ ഉൾക്കൊള്ളുന്ന കോഡ്ബേസുകളിൽ, ഈ ഘട്ടം പലപ്പോഴും മുഴുവൻ ബിൽഡ് പൈപ്പ്‌ലൈനിനെയും മന്ദഗതിയിലാക്കാറുണ്ട്. ടൈപ്പ്-ചെക്കിംഗ് ജോലികൾ വിവിധ കോറുകളിലായി (cores) വിഭജിക്കുന്നതിലൂടെ, എല്ലാ ലൈബ്രറികളും ഒരൊറ്റ റെപ്പോസിറ്ററിയിൽ സൂക്ഷിക്കുന്ന ടീമുകളുടെ ബിൽഡ് സമയം isolated declarations ഗണ്യമായി കുറയ്ക്കുന്നു.

CI ജോലികൾ നടത്തുന്നതോ അല്ലെങ്കിൽ വേഗത്തിലുള്ള ലോക്കൽ റീബിൽഡുകൾ ആവശ്യമുള്ളതോ ആയ ഏതൊരു സ്ഥാപനത്തെയും ഇത് ഉടനടി സ്വാധീനിക്കും.

സമാന്തര ടൈപ്പ് ചെക്കിംഗിലേക്കുള്ള പാത

Microsoft വർഷങ്ങൾക്ക് മുമ്പ് ഇൻക്രിമെന്റൽ കമ്പൈലേഷൻ (incremental compilation) അവതരിപ്പിച്ചുവെങ്കിലും, ഫയലുകൾ പരസ്പരം ആശ്രയിച്ചിരുന്നതിനാൽ ഡെക്ലറേഷൻ ഘട്ടം സീക്വൻഷ്യൽ (sequential) ആയി തന്നെ തുടർന്നു. മോണോറെപ്പോകൾ വളർന്നതോടെ, ഈ സിംഗിൾ-ത്രെഡഡ് പ്രക്രിയ വലിയൊരു തടസ്സമായി മാറി. Isolated declarations ഈ ഡിപെൻഡൻസി ചെയിൻ തകർക്കുകയും, ഓരോ ഫയലിന്റെയും പബ്ലിക് സർഫസിനെ ഒരു സ്വതന്ത്ര യൂണിറ്റായി പരിഗണിച്ച് അവ ഒരേസമയം പരിശോധിക്കുകയും ചെയ്യുന്നു.

ആർക്കൊക്കെ ഗുണമുണ്ടാകും, ആർക്കൊക്കെ ഉണ്ടാവില്ല

  • വലിയ മോണോറെപ്പോകളുള്ള ഡെവലപ്‌മെന്റ് ടീമുകൾ – ബിൽഡ് സമയത്തിൽ വലിയ കുറവ് അനുഭവപ്പെടും, പ്രത്യേകിച്ച് ഒന്നിലധികം CPU കോറുകളുള്ള CI ഏജന്റുകളിൽ.
  • ചെറിയ പ്രോജക്റ്റുകൾ അല്ലെങ്കിൽ സിംഗിൾ-പാക്കേജ് ആപ്പുകൾ – ഡെക്ലറേഷൻ ഘട്ടം ആകെ കമ്പൈൽ സമയത്തിന്റെ വളരെ ചെറിയൊരു ഭാഗം മാത്രമേ എടുക്കുന്നുള്ളൂ എന്നതിനാൽ ഇവരിൽ നേരിയ മാറ്റം മാത്രമേ കാണാൻ സാധിക്കൂ.
  • പരിമിതമായ ഹാർഡ്‌വെയർ ഉപയോഗിക്കുന്ന ടീമുകൾ – സമാനമായ കാരണത്താൽ ഇവർക്കും നേരിയ പുരോഗതി മാത്രമേ ലഭിക്കൂ.

വിപുലമായ TypeScript 7 റോളൗട്ട്

സുരക്ഷാ കേന്ദ്രീകൃതമായ നിരവധി അപ്‌ഗ്രേഡുകളോടുകൂടിയാണ് isolated declarations വരുന്നത്:

  • Strict mode refinementsstrictIndexSignatures പോലുള്ള പുതിയ പരിശോധനകൾ, കോഡ് ഒരുപക്ഷേ ഇല്ലാത്ത ഒരു ഒബ്‌ജക്റ്റ് കീ (object key) ഉപയോഗിക്കാൻ ശ്രമിക്കുമ്പോൾ മുന്നറിയിപ്പ് നൽകുന്നു.
  • Named tuple elements – ഡെവലപ്പർമാർക്ക് ട്യൂപ്പിൾ സ്ഥാനങ്ങൾക്ക് (tuple positions) ലേബലുകൾ നൽകാം, ഇത് API സിഗ്നേച്ചറുകളെ സ്വയം വിവരിക്കുന്നതാക്കുന്നു (self-documenting).
  • മെച്ചപ്പെടുത്തിയ satisfies ഓപ്പറേറ്റർ – സങ്കീർണ്ണമായ ജനറിക്സുകൾ (generics) മികച്ച രീതിയിൽ കൈകാര്യം ചെയ്യുന്നത് വായനാക്ഷമത (readability) കുറയ്ക്കാതെ ടൈപ്പ് ഇൻഫറൻസ് (type inference) മെച്ചപ്പെടുത്തുന്നു.
  • Async context propagation – AsyncContext API-ക്കുള്ള പിന്തുണ അസിൻക്രണസ് കോൾ സ്റ്റാക്കുകൾ (asynchronous call stacks) ട്രാസ് ചെയ്യാനും സഹായിക്കുന്നു.
  • Decorator metadata – TC39 പ്രൊപ്പോസൽ റൺടൈം കോഡിനെ ക്ലാസ് ഡെക്കറേഷനുകൾ പരിശോധിക്കാൻ അനുവദിക്കുന്നു.
  • Explicit variance annotations – ജനറിക് പാരാമീറ്ററുകളിൽ + അല്ലെങ്കിൽ - ഉപയോഗിക്കുന്നത് കോവേരിയൻസ് (covariance) അല്ലെങ്കിൽ കോൺട്രവേരിയൻസ് (contravariance) സൂചിപ്പിക്കുന്നു, ഇത് ടൈപ്പ് ചെക്കറുടെ കൃത്യത വർദ്ധിപ്പിക്കുന്നു.

ഈ കൂട്ടിച്ചേർക്കലുകൾ TypeScript-നെ ഒരു "type-first" ഭാഷ എന്ന നിലയിൽ കൂടുതൽ ശക്തിപ്പെടുത്തുന്നു, എന്നാൽ കോഡ്ബേസിന്റെ വലിപ്പത്തിനനുസരിച്ച് വർദ്ധിക്കുന്ന ഒരു പ്രധാന പ്രശ്നത്തെ നേരിടുന്ന ഏക ഫീച്ചർ isolated declarations ആണ്.

അടുത്തതായി ശ്രദ്ധിക്കേണ്ടവ

ചുരുക്കത്തിൽ

മോണോറെപ്പോകൾ കൂടുതലായി ഉപയോഗിക്കുന്ന ടീമുകൾക്ക് isolated declarations വേഗത്തിലുള്ള ബിൽഡുകൾ നൽകുന്നു. CI മിനിറ്റുകൾക്കായി പണം നൽകുന്നതോ അല്ലെങ്കിൽ പതുക്കെയുള്ള ലോക്കൽ റീബിൽഡുകൾ കാരണം ബുദ്ധിമുട്ടുന്നതോ ആയ സ്ഥാപനങ്ങളെ സംബന്ധിച്ചിടത്തോളം, TypeScript 7-ലേക്ക് അപ്‌ഗ്രേഡ് ചെയ്യുന്നത് കുറഞ്ഞ റിസ്കുള്ളതും സമയവും പണവും ലാഭിക്കാൻ സഹായിക്കുന്നതുമായ ഒരു നീക്കമാണ്. റിലീസിലെ മറ്റ് ഫീച്ചറുകൾ ഉപയോഗപ്രദമായ സുരക്ഷാ സംവിധാനങ്ങൾ നൽകുന്നുണ്ടെങ്കിലും, ആധുനിക ജാവാസ്ക്രിപ്റ്റ് ഡെവലപ്‌മെന്റിലെ സ്കെയിലബിലിറ്റി (scalability) വെല്ലുവിളികൾക്ക് നേരിട്ട് മറുപടി നൽകുന്ന പ്രധാന ഫീച്ചർ സമാന്തര ടൈപ്പ്-ചെക്കിംഗ് എൻജിൻ ആണ്.