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 రెండూ సాపేక్షంగా కొత్తవి. అంటే అనేక సాధనాలకు ఇంకా ఈ భాషలకు డాక్యుమెంటేషన్ లేదు. ఉదాహరణకు, డెవ్ఆప్స్ పైప్లైన్ను ఈ భాషల కోసం సెటప్ చేయాలి, ఇప్పటివరకు మేము మూల్యాంకనం చేస్తున్న డెవ్ఆప్స్ సాధనాల్లో ఏదీ ఈ భాషలకు డిఫాల్ట్ ఉదాహరణలను కలిగి లేదు.

TypeScript, Rust కంపైల్ సమయాలు చాలా నెమ్మదిగా ఉంటాయి. దీనిలో కొంత భాషల కొత్తదనం వల్ల కావచ్చు. కంపైల్-ఆన్-డిమాండ్, కంపైల్-సమకాలీనత మొదలైన వాటి ద్వారా నెమ్మది కంపైల్ సమయాలను ఎలా తగ్గించాలో మేము పరిశీలించాలనుకోవచ్చు.

ఈ భాషలకు IDE మద్దతు ఇంకా సర్వవ్యాప్తం కాదు, ఇంకా ప్రథమ శ్రేణి కాదు. ఉదాహరణకు, JetBrains Pythonకు ప్రథమ శ్రేణి మద్దతు ఉన్న PyCharm IDEని అమ్ముతుంది, కానీ Rustకు ప్రథమ శ్రేణి మద్దతు ఉన్న IDEని అమ్మదు; బదులుగా, JetBrains Python భాష మద్దతుతో పోలిస్తే బహుశా 80% Rust భాష మద్దతును అందించే Rust ప్లగిన్ను వాడగలదు.

సంబంధితాలు

సంబంధిత నిర్ణయాలు

ఈ భాషలకు అనుగుణంగా ఉండే పర్యావరణ వ్యవస్థ ఎంపికల వైపు మేము లక్ష్యంగా పెట్టుకుంటాం.

ఉదాహరణకు, ఈ భాషలకు మంచి సామర్థ్యాలు ఉన్న IDEని ఎంచుకోవాలనుకుంటున్నాం.

ఉదాహరణకు, మా ఫ్రంట్-ఎండ్ వెబ్ ఫ్రేమ్వర్క్ కోసం, సాధారణ JavaScript వైపు మొగ్గు చూపే ఫ్రేమ్వర్క్ (ఉదా. React) కంటే TypeScript వైపు మొగ్గు చూపే ఫ్రేమ్వర్క్ను (ఉదా. Vue) నిర్ణయించే అవకాశం ఎక్కువ.

సంబంధిత అవసరాలు

మా మొత్తం టూల్చైన్ ఈ భాషలకు మద్దతివ్వాలి.

సంబంధిత రచనలు

మేము కొన్ని రహస్యాలను ఎన్విరాన్మెంట్ వేరియబుల్స్కు ఎగుమతి చేయవచ్చని ఆశిస్తున్నాం.

సంబంధిత సూత్రాలు

రెండుసార్లు కొలువు, ఒకసారి నిర్మించు. మేము కొంత వేగం కంటే కొంత భద్రతకు ప్రాధాన్యత ఇస్తున్నాం.

రన్టైమ్ కంపైల్ టైమ్ కంటే విలువైనది. మేము డెవలపర్ వినియోగం కంటే కస్టమర్ వినియోగానికి ప్రాధాన్యత ఇస్తున్నాం.

గమనికలు

ఇక్కడ ఏవైనా గమనికలు.