3 पॉइंट द्वारा GN⁺ 2024-11-27 | 2 टिप्पणियां | WhatsApp पर शेयर करें
  • लेखक प्लैटिपस हैं

    • आलोचना को नज़रअंदाज़ करने के लिए लेखक को अयोग्य मान लेना एक आलसी तरीका है।
    • जूनियर डेवलपर समस्याओं को नए नज़रिए से देख सकते हैं, और यही उन्हें नियुक्त करने का एक महत्वपूर्ण कारण है।
    • लेखक जूनियर डेवलपर नहीं हैं, और विविध अनुभवों के माध्यम से उनके पास language design की समझ है।
  • माँ धूम्रपान करती हैं, तो शायद ठीक ही होगा

    • दूसरी कंपनियाँ जो तकनीक इस्तेमाल करती हैं, उसे बिना सोचे-समझे अपनाना अक्षम तरीका है।
    • tech blog का उद्देश्य अक्सर कंपनी की छवि को बेहतर दिखाना भी होता है।
    • Tailscale का ब्लॉग ईमानदार है, लेकिन Go की समस्याओं को हल करने के लिए बहुत मेहनत चाहिए।
  • अच्छी बातें

    • Go का asynchronous runtime और garbage collector बेहतरीन हैं।
    • package management, refactoring, cross-compiling जैसे tools इस्तेमाल करने में आसान हैं।
    • लेकिन Go की कमियाँ नज़रअंदाज़ नहीं की जा सकतीं, और समस्या यह है कि language design मानो संयोग से बना हो।
  • Go एक द्वीप है

    • Go में दूसरी भाषाओं के साथ interoperability की कमी है।
    • Go की toolchain अलग तरह की है, और आप मौजूदा assembly language या debugger का उपयोग नहीं कर सकते।
    • network boundary के ज़रिए Go के साथ integration करना सबसे आसान तरीका है।
  • सब कुछ या कुछ भी नहीं (और इसलिए कुछ भी नहीं करते)

    • Go में struct के uninitialized fields छूट सकते हैं।
    • zero value का अर्थपूर्ण होना एक भोली धारणा है, और कई मामलों में यह समस्या बनती है।
    • Go की संस्कृति समस्याओं को हल करने के बजाय बस सावधान रहने को कहती है।
  • "Rust परफेक्ट है और तुम सब बेवकूफ हो"

    • Rust को धीरे-धीरे अपनाया जा सकता है, और यह दूसरी भाषाओं के साथ अच्छी तरह integrate होता है।
    • Rust की सफलता का एक कारण यह भी है कि यह safer language की ओर संक्रमण संभव बनाता है।
    • Rust में समस्याएँ भी हैं, लेकिन उन्हें धीरे-धीरे सुलझाया जा रहा है।
  • Go को prototype/starter language के रूप में इस्तेमाल करना

    • Go को सीखने में आसान भाषा माना जाता है, लेकिन वास्तव में इसके लिए काफी अनुभव चाहिए।
    • इसमें ऐसी सुविधाओं की कमी है जो साफ़ तौर पर बता सकें कि code गलत है।
    • Go की कमियाँ समय के साथ सामने आती हैं, और यह ऐसी भाषा नहीं है जिससे आसानी से आगे बढ़ा जा सके।
  • हम Golang का इस्तेमाल जारी क्यों रखते हैं: वे झूठ जो हम खुद से बोलते हैं

    • दूसरे लोग इसका इस्तेमाल कर रहे हैं, इसलिए यह हमारे लिए भी अच्छा होगा
    • language design की खामियों को व्यक्तिगत या सामूहिक रूप से स्वीकार्य मान लेना
    • यह सोचना कि अगर सावधानी बरती जाए तो समस्याओं से पार पाया जा सकता है
    • यह सोचना कि लिखना आसान है, इसलिए production software development भी आसान होगा
    • यह सोचना कि भाषा सरल है, इसलिए सब कुछ सरल है
    • यह सोचना कि बाद में कभी भी इसे दोबारा लिखा जा सकता है

2 टिप्पणियां

 
tsboard 2024-11-28

मैं Go भाषा के साथ बहुत ही थोड़े समय से गहराई से काम कर रहा एक शौकिया व्यक्ति हूँ, इसलिए सोच रहा था कि क्या मुझे यह लिखना भी चाहिए... Go भाषा के फायदे और नुकसान सचमुच बहुत स्पष्ट हैं, इसलिए इसे चुनने वालों के पास भी और इससे बचने वालों के पास भी साफ वजहें दिखती हैं। व्यक्तिगत रूप से मुझे नहीं लगता कि इसकी तुलना Rust से करनी चाहिए; Kotlin(Java) से तुलना करना ज़्यादा सही लगता है.

Go की goroutine वाकई शानदार हैं, लेकिन वे कोई जादू नहीं हैं। खासकर backend में सिर्फ एक MySQL इस्तेमाल करने वाले छोटे प्रोजेक्ट्स में, इस concurrency को संभालना वास्तव में काफी पेचीदा होता है। JS/TS runtime में जिन बातों पर बहुत ध्यान नहीं देना पड़ता, जैसे MySQL resource exhaustion या pool management, वे सोच से ज़्यादा कठिन निकलते हैं। आखिरकार इस स्थिति में DB ही bottleneck बन जाता है, इसलिए Go भाषा की concurrency वाली बढ़त कुछ हद तक फीकी पड़ जाती है। (JS/TS runtime का async I/O या event loop उल्टा ज़्यादा उपयुक्त हो सकता है) अभी hey जैसे टूल से -c 100 डालकर चलाइए, समझ में आ जाएगा।

और भले ही इसमें शानदार GC है, इसका मतलब यह नहीं कि आप बेधड़क सिर्फ pointer पास करके object इस्तेमाल करते रहें और बाद की सफाई की परवाह ही न करें। हर चीज़ में trade-off होता है, लेकिन Go भाषा में भी जहाँ संभव हो, छोटे object को value copy से पास करके इस्तेमाल करना और function खत्म होते ही उनका निपट जाना बेहतर है। हो सकता है मैं पुराने सोच में अटका हुआ हूँ, लेकिन C/C++ की तरह efficiency के नज़रिए से pointer को बहुत हल्के में लेना सही नहीं था।

error को function return में लगभग हर बार लौटाना और हर बार if err != nil {} से जाँचना सचमुच झंझट वाला है, लेकिन यही इसकी खूबी भी है। क्योंकि इसकी लागत try catch से कम होती है। और finally {} जैसी भूमिका निभाने वाला defer keyword भी शानदार है। resource release का समय अलग से सोचने की जरूरत नहीं पड़ती, यह अच्छी बात है। सिर्फ standard library से ही एक बेहतरीन backend server configuration तुरंत तैयार हो जाना भी अच्छा है (1.23 या बाद का संस्करण)। सबसे बढ़िया बात यह है कि target OS के हिसाब से build कर दें, तो किसी दूसरे runtime या pre-installation की जरूरत नहीं पड़ती।

मैंने Go भाषा को बहुत लंबे समय तक इस्तेमाल नहीं किया है, लेकिन लगता है कि मैं बहुत निजी राय पर कुछ ज़्यादा ही लंबा लिख रहा हूँ, इसलिए यहीं रुकता हूँ। हाहा, मुझे Go भाषा भी पसंद है और दूसरी भाषाएँ भी!

 
GN⁺ 2024-11-27
Hacker News राय
  • Go भाषा की कमियों पर कई टिप्पणियाँ हैं, लेकिन explicit error handling उनमें से एक नहीं है। exception handling एक ऐसा "जादुई" layer जोड़ता है जिसमें बहुत आसानी से गलती हो सकती है। व्यक्तिगत प्रोजेक्ट्स में Rust को प्राथमिकता देता हूँ, लेकिन अलग-अलग स्तर के डेवलपर्स की भागीदारी वाले बड़े प्रोजेक्ट्स में Go का दर्शन आधुनिक दुनिया में error handling के लिए सबसे तर्कसंगत approach है.

    • Go अपनी सादगी की वजह से दूसरे "नए" भाषाओं की तुलना में अधिक अपनाया जा रहा है। यह सबसे बेहतरीन भाषा नहीं है, लेकिन अपने कई built-in opinions की वजह से general-purpose language के रूप में अक्सर सबसे अच्छा विकल्प होता है.
  • Rust और Go बहुत अलग हैं, और लोग जिस बीच के रास्ते की तलाश करते हैं, वह अभी मौजूद नहीं है.

    • Rust के type system जैसा type system रखने वाली अपेक्षाकृत सरल भाषा की ज़रूरत है.
    • Gleam और Kotlin थोड़े बहुत मिलते-जुलते हैं, लेकिन पूरी तरह नहीं। Rust बहुत जटिल है, इसलिए non-CS background या non-experts के लिए कठिन है.
    • कोई भी भाषा परफेक्ट नहीं है, लेकिन Go और Rust दोनों ने हैरान करने वाली चीज़ें दी हैं। उम्मीद है कि इन दोनों भाषाओं से प्रेरित एक सरल और व्यापक रूप से उपयोग की जाने वाली programming language बने.
  • मुझे सरल भाषाएँ पसंद हैं। टेक्नोलॉजी में हमेशा trade-offs होते हैं, इसलिए संतुलित आलोचना महत्वपूर्ण है.

    • Go को चुनने के कारणों पर एक ब्लॉग लिंक साझा किया गया.
  • यह समझ नहीं आता कि किसी भाषा की आलोचना करना इतना महत्वपूर्ण क्यों है। आलोचना रचनात्मक शैली में नहीं लिखी गई है.

    • हर भाषा की आलोचना की जा सकती है। Go, "ज़्यादा परिष्कृत" भाषाओं से अपने अंतर के बावजूद, प्रोजेक्ट्स में शानदार ढंग से काम करती है.
    • Go टीम को feedback देते रहना, भाषा के धीमे विकास को देखना, और कम्युनिटी में सेवा देते रहना जारी है.
  • Go की आलोचना पढ़ते हुए भी मैं Go का उपयोग करता रहूँगा.

    • सैद्धांतिक रूप से कई समस्याएँ हैं, लेकिन व्यवहार में यह अब भी एक अच्छी programming language है.
    • मुझे explicit error handling पसंद है। दूसरी भाषाओं की कमियों की भी बहुत परवाह नहीं करता.
    • जो लोग Go की कमियों के प्रति संवेदनशील हैं, वे शिकायत करते रहेंगे। अपने लिए उपयुक्त भाषा चुनें.
  • जब भी दूसरी भाषाओं का उपयोग करता हूँ, Go पर वापस लौटने का मन करता है.

    • Go में install करो, code download करो, लिखो, और काम खत्म। version, runtime, configuration, build tools, package manager वगैरह की चिंता करने की ज़रूरत नहीं पड़ती.
    • Rust भी ऐसा ही अनुभव दे सकता है। Python, Typescript, Java का उपयोग करते समय setup से जुड़ी समस्याओं की वजह से programming डरावनी लगती है.
  • मैं एक बेहतर Python की तलाश में था। Go स्पष्ट विकल्प था, लेकिन मुझे इसका syntax पसंद नहीं है.

    • Rust में बहुत सारे special characters हैं, और Lisp को parentheses और reverse Polish notation की वजह से पसंद नहीं करता.
    • Python code को Nuitka से compile करके binary के रूप में देता हूँ। C# के AOT compilation में रुचि है.
    • Nim और Crystal पसंद हैं, लेकिन उनकी छोटी कम्युनिटी एक बाधा है। छोटी कम्युनिटी के बावजूद Nim एक शानदार भाषा है.
  • समझ नहीं आता कि Go और Rust की तुलना इतनी बार क्यों की जाती है। इसकी तुलना Java से करना अधिक उचित है.