-
लेखक प्लैटिपस हैं
- आलोचना को नज़रअंदाज़ करने के लिए लेखक को अयोग्य मान लेना एक आलसी तरीका है।
- जूनियर डेवलपर समस्याओं को नए नज़रिए से देख सकते हैं, और यही उन्हें नियुक्त करने का एक महत्वपूर्ण कारण है।
- लेखक जूनियर डेवलपर नहीं हैं, और विविध अनुभवों के माध्यम से उनके पास 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 टिप्पणियां
मैं 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 {}जैसी भूमिका निभाने वालाdeferkeyword भी शानदार है। resource release का समय अलग से सोचने की जरूरत नहीं पड़ती, यह अच्छी बात है। सिर्फ standard library से ही एक बेहतरीन backend server configuration तुरंत तैयार हो जाना भी अच्छा है (1.23 या बाद का संस्करण)। सबसे बढ़िया बात यह है कि target OS के हिसाब से build कर दें, तो किसी दूसरे runtime या pre-installation की जरूरत नहीं पड़ती।मैंने Go भाषा को बहुत लंबे समय तक इस्तेमाल नहीं किया है, लेकिन लगता है कि मैं बहुत निजी राय पर कुछ ज़्यादा ही लंबा लिख रहा हूँ, इसलिए यहीं रुकता हूँ। हाहा, मुझे Go भाषा भी पसंद है और दूसरी भाषाएँ भी!
Hacker News राय
Go भाषा की कमियों पर कई टिप्पणियाँ हैं, लेकिन explicit error handling उनमें से एक नहीं है। exception handling एक ऐसा "जादुई" layer जोड़ता है जिसमें बहुत आसानी से गलती हो सकती है। व्यक्तिगत प्रोजेक्ट्स में Rust को प्राथमिकता देता हूँ, लेकिन अलग-अलग स्तर के डेवलपर्स की भागीदारी वाले बड़े प्रोजेक्ट्स में Go का दर्शन आधुनिक दुनिया में error handling के लिए सबसे तर्कसंगत approach है.
Rust और Go बहुत अलग हैं, और लोग जिस बीच के रास्ते की तलाश करते हैं, वह अभी मौजूद नहीं है.
मुझे सरल भाषाएँ पसंद हैं। टेक्नोलॉजी में हमेशा trade-offs होते हैं, इसलिए संतुलित आलोचना महत्वपूर्ण है.
यह समझ नहीं आता कि किसी भाषा की आलोचना करना इतना महत्वपूर्ण क्यों है। आलोचना रचनात्मक शैली में नहीं लिखी गई है.
Go की आलोचना पढ़ते हुए भी मैं Go का उपयोग करता रहूँगा.
जब भी दूसरी भाषाओं का उपयोग करता हूँ, Go पर वापस लौटने का मन करता है.
मैं एक बेहतर Python की तलाश में था। Go स्पष्ट विकल्प था, लेकिन मुझे इसका syntax पसंद नहीं है.
समझ नहीं आता कि Go और Rust की तुलना इतनी बार क्यों की जाती है। इसकी तुलना Java से करना अधिक उचित है.