Architecture Decision Record

Active theme: Light

← முடிவு பதிவு எடுத்துக்காட்டுகள்

நிரலாக்க மொழிகள்

உள்ளடக்கம்:

சுருக்கம்

சிக்கல்

எங்கள் மென்பொருளுக்கு நிரலாக்க மொழிகளைத் தேர்ந்தெடுக்க வேண்டும். எங்களுக்கு இரண்டு முக்கியத் தேவைகள் உள்ளன: வலைப் பயன்பாடுகளுக்கு ஏற்ற முன்-முனை நிரலாக்க மொழி, சேவையகப் பயன்பாடுகளுக்கு ஏற்ற பின்-முனை நிரலாக்க மொழி.

முடிவு

முன்-முனைக்கு TypeScript ஐத் தேர்ந்தெடுக்கிறோம்.

பின்-முனைக்கு Rust ஐத் தேர்ந்தெடுக்கிறோம்.

நிலை

முடிவு செய்யப்பட்டது. புதிய மாற்றுகள் எழும்போது அவற்றுக்குத் திறந்துள்ளோம்.

விவரங்கள்

அனுமானங்கள்

முன்-முனைப் பயன்பாடுகள் வழக்கமானவை:

  • வழக்கமான பயனர்களும் தொடர்புகளும்

  • வழக்கமான உலாவிகளும் அமைப்புகளும்

  • வழக்கமான மேம்பாடுகளும் வரிசைப்படுத்தல்களும்

முன்-முனைப் பயன்பாடுகள் விரைவாகப் பரிணமிக்க வாய்ப்புள்ளது:

  • விரைவான எளிதான மேம்பாடுகள், வரிசைப்படுத்தல்கள், மீள்செயல்கள் போன்றவற்றை உறுதிசெய்ய விரும்புகிறோம்.

  • வகைப் பாதுகாப்பு போன்ற நிரூபணத்திறனை மதிக்கிறோம், அதை அடைய சற்று அதிக வேலை செய்யவும் தயாராக உள்ளோம்.

  • பழைய இணக்கத்தன்மை எங்களுக்குத் தேவையில்லை.

பின்-முனைப் பயன்பாடுகள் வழக்கத்தை விட உயர்ந்தவை:

  • தரத்துக்கு, குறிப்பாக நிரூபணத்திறன், நம்பகத்தன்மை, பாதுகாப்பு போன்றவற்றுக்கு வழக்கத்தை விட உயர்ந்த இலக்குகள்.

  • கிட்டத்தட்ட-நிகழ்நேரத்துக்கு வழக்கத்தை விட உயர்ந்த இலக்குகள், அதாவது மெய்நிகர் இயந்திரக் குப்பை சேகரிப்பால் இடைநிறுத்தங்கள் எங்களுக்கு வேண்டாம்.

  • செயல்பாட்டு நிரலாக்கத்துக்கு, குறிப்பாக இணைசெயல்படுத்தல், பல-மைய செயலாக்கம், நினைவகப் பாதுகாப்புக்கு வழக்கத்தை விட உயர்ந்த இலக்குகள்.

தொகுப்பு-நேரப் பாதுகாப்பு மற்றும் இயக்கநேர வேகங்களுக்காக குறைந்த தொகுப்பு-நேர வேகங்களை ஏற்கிறோம்.

கட்டுப்பாடுகள்

Amazon Lambda போன்ற செயல்பாடுகளுக்கான முக்கிய கிளவுட் வழங்குநர் சேவைகளுடன் பயன்படுத்தக்கூடிய மொழிகள் மீது எங்களுக்கு வலுவான கட்டுப்பாடு உள்ளது.

நிலைப்பாடுகள்

இந்த மொழிகளைப் பரிசீலித்தோம்:

  • C

  • C++

  • Clojure

  • Elixir

  • Erlang

  • Elm

  • Flow

  • Go

  • Haskell

  • Java

  • JavaScript

  • Kotlin

  • Python

  • Ruby

  • Rust

  • TypeScript

வாதம்

ஒவ்வொரு மொழிக்குமான சுருக்கம்:

  • C: குறைந்த பாதுகாப்பால் நிராகரிக்கப்பட்டது; Rust கிட்டத்தட்ட அனைத்தையும் சிறப்பாகச் செய்ய முடியும்.

  • C++: குழப்பமாக இருப்பதால் நிராகரிக்கப்பட்டது; Rust கிட்டத்தட்ட அனைத்தையும் சிறப்பாகச் செய்ய முடியும்.

  • Clojure: சிறந்த மாதிரியாக்கம்; சிறந்த Lisp தோராயம்; JVM இல் சிறந்த இயக்கநேரம்.

  • Elixir: வரிசைப்படுத்தல் திறன் மற்றும் ஒரே நேரச் செயல்பாடு உட்பட சிறந்த இயக்கநேரம்; சிறந்த உருவாக்குநர் அனுபவம்; ஒப்பீட்டளவில் சிறிய சூழல்மண்டலம்.

  • Erlang: வரிசைப்படுத்தல் திறன் மற்றும் ஒரே நேரச் செயல்பாடு உட்பட சிறந்த இயக்கநேரம்; சவாலான உருவாக்குநர் அனுபவம்; ஒப்பீட்டளவில் சிறிய சூழல்மண்டலம்.

  • Elm: மிகவும் நம்பிக்கைக்குரியதாகத் தெரிகிறது; IBM நல்ல முடிவுகளுடன் முக்கிய வழக்கு ஆய்வுகளை வெளியிடுகிறது; சிறிய சூழல்மண்டலம்.

  • Flow: JavaScript ஐ விட சுவாரஸ்யமான முன்னேற்றம்; இருப்பினும்; உருவாக்குநர்கள் அதிலிருந்து விலகிச் செல்கின்றனர்.

  • Go: சிறந்த உருவாக்குநர் அனுபவம்; சிறந்த ஒரே நேரச் செயல்பாடு; ஆனால் மொழியை முடக்கும் மோசமான முடிவுகளின் வரலாறு.

  • Haskell: சிறந்த செயல்பாட்டு மொழி; சிறிய உருவாக்குநர் சமூகம்; போதுமான வெளியிடப்பட்ட உற்பத்தி வெற்றிகளை அடையவில்லை.

  • Java: சிறந்த இயக்கநேரம்; சிறந்த சூழல்மண்டலம்; தரம் குறைந்த உருவாக்குநர் அனுபவம்.

  • JavaScript: இதுவரை மிகவும் பிரபலமான மொழி; மிகப் பரவலான சூழல்மண்டலம்.

  • Kotlin: Java வின் பலவற்றைச் சரிசெய்கிறது; JetBrains இன் சிறந்த ஆதரவு; Java விலிருந்து Kotlin க்கு மாற்றியதற்கான நல்ல வெளியிடப்பட்ட நிகழ்வுகள்.

  • Python: அமைப்பு நிர்வாகத்துக்கு மிகவும் பிரபலமான மொழி; சிறந்த பகுப்பாய்வுக் கருவிகள்; நல்ல வலைக் கட்டமைப்புகள்; ஆனால் Google ஆல் Go க்கு ஆதரவாகக் கைவிடப்பட்டது.

  • Ruby: இதுவரை சிறந்த உருவாக்குநர் அனுபவம்; சிறந்த வலைக் கட்டமைப்புகள்; மிக இனிமையான சமூகம்; ஆனால் மிகவும் மெதுவானது; ஓரளவு தொகுக்க (package) கடினம்.

  • Rust: சிறந்த புதிய மொழி; பூஜ்ஜிய-சுருக்கத்துக்கு முக்கியத்துவம்; ஒரே நேரச் செயல்பாட்டுக்கு முக்கியத்துவம்; இருப்பினும் ஒப்பீட்டளவில் சிறிய சூழல்மண்டலம்; மேலும் சில வகை தொகுப்பி வேகப்படுத்தல்களில் வேண்டுமென்றே வரம்புகள் உள்ளன எ.கா. நேரடி நினைவக அணுகல் வெளிப்படையாக unsafe ஆக இருக்க வேண்டும்.

  • TypeScript: JavaScript க்கு வகைகளைச் சேர்க்கிறது; சிறந்த transpiler; JavaScript இலிருந்து TypeScript க்கு மாற்றுவதில் வளரும் உருவாக்குநர் முக்கியத்துவம்; Microsoft இன் வலுவான ஆதரவு.

VM களுக்கு இப்போது நமக்குத் தேவையில்லாத சமரசங்களின் தொகுப்பு உள்ளது என்று முடிவு செய்தோம், இயக்கநேரத் திறன்களை வழங்கும் கூடுதல் சிக்கல் போன்றவை.

எங்கள் முக்கிய முடிவு இரண்டு குறுக்கு வெட்டுக் கவலைகளால் இயக்கப்படுகிறது என்று நம்புகிறோம்:

  • மிக வேகமான இயக்கநேர வேகம் மற்றும் மிக இறுக்கமான அமைப்பு அணுகலுக்கு, JavaScript மற்றும் C ஐத் தேர்ந்தெடுப்போம்.

  • கிட்டத்தட்ட மிக வேகமான இயக்கநேர வேகம் மற்றும் கிட்டத்தட்ட மிக இறுக்கமான அமைப்பு அணுகலுக்கு, TypeScript மற்றும் Rust ஐத் தேர்ந்தெடுக்கிறோம்.

நாங்கள் VM மொழியை விரும்பினால் தேர்ந்தெடுக்கும் VM மொழிகளுக்கும் வலைக் கட்டமைப்புகளுக்கும் மரியாதைக்குரிய குறிப்புகள்:

  • Clojure மற்றும் Luminus

  • Java மற்றும் Spring

  • Elixir மற்றும் Phoenix

தாக்கங்கள்

முன்-முனை உருவாக்குநர்கள் TypeScript ஐக் கற்க வேண்டும். உருவாக்குநரின் முதன்மை அனுபவம் JavaScript ஐப் பயன்படுத்துவதாக இருந்தால் இது எளிதான கற்றல் வளைவாக இருக்கலாம்.

பின்-முனை உருவாக்குநர்கள் Rust ஐக் கற்க வேண்டும். உருவாக்குநரின் முதன்மை அனுபவம் C/C++ ஐப் பயன்படுத்துவதாக இருந்தால் இது மிதமான கற்றல் வளைவாகவும், Java, Python, Ruby அல்லது அது போன்ற நினைவக-நிர்வகிக்கப்படும் மொழிகளைப் பயன்படுத்துவதாக இருந்தால் கடினமான கற்றல் வளைவாகவும் இருக்கலாம்.

TypeScript மற்றும் Rust இரண்டும் ஒப்பீட்டளவில் புதியவை. இதன் பொருள் பல கருவிகளுக்கு இன்னும் இந்த மொழிகளுக்கான ஆவணங்கள் இல்லை. எடுத்துக்காட்டாக, இந்த மொழிகளுக்கு devops பைப்லைன் அமைக்கப்பட வேண்டும், இதுவரை, நாங்கள் மதிப்பீடு செய்யும் devops கருவிகள் எதற்கும் இந்த மொழிகளுக்கான இயல்புநிலை எடுத்துக்காட்டுகள் இல்லை.

TypeScript மற்றும் Rust க்கான தொகுப்பு நேரங்கள் மிகவும் மெதுவானவை. இவற்றில் சில மொழிகளின் புதுமையால் இருக்கலாம். தேவைக்கேற்பத் தொகுத்தல், தொகுப்பு-ஒரே நேரச் செயல்பாடு போன்றவற்றின் மூலம் மெதுவான தொகுப்பு நேரங்களை எவ்வாறு தணிப்பது என்பதைப் பார்க்க விரும்பலாம்.

இந்த மொழிகளுக்கான IDE ஆதரவு இன்னும் எங்கும் நிறைந்ததாக இல்லை, இன்னும் முதல்தரமாக இல்லை. எடுத்துக்காட்டாக, JetBrains Python க்கு முதல்தர ஆதரவுக்காக PyCharm IDE ஐ விற்கிறது, ஆனால் Rust க்கு முதல்தர ஆதரவுடன் IDE ஐ விற்பதில்லை; அதற்குப் பதிலாக, Python மொழி ஆதரவுடன் ஒப்பிடும்போது ஒருவேளை 80% Rust மொழி ஆதரவை வழங்கும் Rust செருகுநிரலை JetBrains பயன்படுத்தலாம்.

தொடர்புடையவை

தொடர்புடைய முடிவுகள்

இந்த மொழிகளுடன் ஒத்துப்போகும் சூழல்மண்டலத் தேர்வுகளை நோக்கி இலக்கு வைப்போம்.

எடுத்துக்காட்டாக, இந்த மொழிகளுக்கு நல்ல திறன்கள் உள்ள IDE ஐத் தேர்ந்தெடுக்க விரும்புகிறோம்.

எடுத்துக்காட்டாக, எங்கள் முன்-முனை வலைக் கட்டமைப்புக்கு, எளிய JavaScript ஐ நோக்கிச் செல்லும் கட்டமைப்பை (எ.கா. React) விட TypeScript ஐ நோக்கிச் செல்லும் கட்டமைப்பை (எ.கா. Vue) முடிவு செய்ய அதிக வாய்ப்புள்ளது.

தொடர்புடைய தேவைகள்

எங்கள் முழு கருவிச்சங்கிலியும் இந்த மொழிகளை ஆதரிக்க வேண்டும்.

தொடர்புடைய படைப்புகள்

சில ரகசியங்களைச் சூழல் மாறிகளுக்கு ஏற்றுமதி செய்யலாம் என எதிர்பார்க்கிறோம்.

தொடர்புடைய கொள்கைகள்

இருமுறை அளந்து, ஒருமுறை கட்டுங்கள். சில வேகத்தை விட சில பாதுகாப்புக்கு முன்னுரிமை அளிக்கிறோம்.

இயக்கநேரம் தொகுப்பு நேரத்தை விட மதிப்புமிக்கது. உருவாக்குநர் பயன்பாட்டை விட வாடிக்கையாளர் பயன்பாட்டுக்கு முன்னுரிமை அளிக்கிறோம்.

குறிப்புகள்

எந்தக் குறிப்புகளும் இங்கே.