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: अब तक के सबसे नीमन डेवलपर अनुभव; सबसे नीमन वेब फ्रेमवर्क; सबसे नीमन समुदाय; लेकिन बहुत धीमा; कुछ हद तक पैकेज करे में कठिन।

  • Rust: सबसे नीमन नया भाषा; शून्य-अमूर्तन पर जोर; समवर्तीता पर जोर; लेकिन अपेक्षाकृत छोट इकोसिस्टम; आ कुछ तरह के कंपाइलर त्वरण पर जानबूझ के सीमा बा जइसे सीधा मेमोरी पहुँच के साफ तौर पर असुरक्षित होखे के चाहीं।

  • TypeScript: JavaScript में टाइप जोड़ेला; बढ़िया ट्रांसपाइलर; 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 ना बेचेला; एकरा बदले, JetBrains एगो Rust प्लग-इन इस्तेमाल कर सकेला जे Python भाषा समर्थन के मुकाबले शायद 80% Rust भाषा समर्थन देला।

संबंधित

संबंधित फैसला

हमनी ऊ इकोसिस्टम चुनाव के ओर लक्ष्य करब जे ई भाषा से मेल खाला।

उदाहरण खातिर, हमनी अइसन IDE चुने चाहत बानी जेकरा लग ई भाषा खातिर नीमन क्षमता होखे।

उदाहरण खातिर, हमनी के फ्रंट-एंड वेब फ्रेमवर्क खातिर, हमनी शायद अइसन फ्रेमवर्क के चुनब जे TypeScript के ओर झुकल बा (जइसे Vue) बजाय अइसन फ्रेमवर्क के जे सादा JavaScript के ओर झुकल बा (जइसे React)।

संबंधित जरूरत

हमनी के पूरा टूलचेन के ई भाषा के समर्थन करे के पड़ी।

संबंधित आर्टिफैक्ट

हमनी उम्मीद करत बानी कि हमनी कुछ गुप्त जानकारी के एनवायरनमेंट वेरिएबल में निर्यात कर सकीले।

संबंधित सिद्धांत

दू बेर नापीं, एक बेर बनाईं। हमनी कुछ गति के ऊपर कुछ सुरक्षा के प्राथमिकता देत बानी।

रनटाइम संकलन समय से जादा कीमती बा। हमनी डेवलपर के इस्तेमाल के ऊपर ग्राहक के इस्तेमाल के प्राथमिकता देत बानी।

टिप्पणी

इहाँ कवनो टिप्पणी।