- Go 1.18 में generics फीचर की शुरुआत के साथ एक नया कॉन्सेप्ट core type जोड़ा गया था, लेकिन 1.25 में इसे हटाने का फैसला किया गया है
- core type कंपाइलर इम्प्लीमेंटेशन की सुविधा के लिए बनाया गया एक अमूर्त कॉन्सेप्ट था, जो generic type operands को संभालते समय मौजूदा underlying type की जगह लेता था
- भाषा विनिर्देशन में भी पहले के "underlying type" की जगह "core type" का उपयोग किया गया था
Type parameters और type constraints
- type parameters भविष्य में तय होने वाले type के लिए placeholder की तरह काम करते हैं और compile time पर निर्धारित होते हैं
- type constraints यह तय करते हैं कि उस parameter type पर कौन-से operations संभव हैं
- Go में methods और type requirements को मिलाकर type constraints परिभाषित किए जाते हैं, और इससे एक type set बनता है
- type set का मतलब उन सभी types के समूह से है जो किसी खास interface को satisfy करते हैं
type Constraint interface {
~[]byte | ~string
Hash() uint64
}
- type set आधारित यह तरीका generic type operations को परिभाषित करने के लिए बहुत flexible और शक्तिशाली है
func at[bytestring Constraint](s bytestring, i int) byte {
return s[i]
}
core type की शुरुआत और उसकी सीमाएँ
- core type को कुछ operations में generic types के उपयोग को सरल बनाने वाले नियम के रूप में परिभाषित किया गया था
- core type को परिभाषित करने का तरीका:
- यदि वह एक सामान्य type है, तो उसका core type उसके underlying type के समान होता है
- यदि वह type parameter है, तो type set के भीतर सभी types का underlying type समान होने पर ही core type मौजूद होता है
- लेकिन इस तरीके से ये समस्याएँ पैदा हुईं:
- भाषा विनिर्देशन जटिल हो गया, जिससे सरल नियम भी समझना कठिन हो गया
- non-generic code में भी अनावश्यक रूप से core type कॉन्सेप्ट का उल्लेख होने लगा
- core type का उपयोग करने वाले कुछ operations जरूरत से ज़्यादा restrictive हो गए, जिससे वास्तव में सुरक्षित operations भी अनुमति नहीं पाते थे
- core type का उपयोग न करने वाले नियमों के साथ असंगति के कारण पूरे language design में consistency कम हो गई
Go 1.25 में core type हटाया जाएगा
- Go 1.25 रिलीज़ (अगस्त 2025 के लिए निर्धारित) में भाषा विनिर्देशन से core type कॉन्सेप्ट को हटाने का फैसला किया गया है
- अब हर operation के लिए आवश्यक constraints को स्पष्ट वाक्यों में लिखा जाएगा
- इस बदलाव के मुख्य प्रभाव:
- कॉन्सेप्ट्स की संख्या कम होगी, जिससे Go भाषा सीखना आसान होगा
- non-generic code generic कॉन्सेप्ट्स पर निर्भर हुए बिना अधिक स्पष्ट रहेगा
- अलग-अलग operations के लिए अधिक flexible rules डिज़ाइन किए जा सकेंगे
- भविष्य में फीचर विस्तार की नींव तैयार होगी (जैसे common field access, slice functionality में सुधार, type inference में सुधार आदि)
मुख्य बदलाव और अपेक्षित प्रभाव
- विनिर्देशन में जहाँ-जहाँ core type का उल्लेख था, उन सभी वाक्यों को हटाया गया है या स्पष्ट वाक्यों से बदला गया है
- compiler error messages से भी core type शब्द हटाया गया है और उसकी जगह अधिक ठोस व्याख्याएँ दी गई हैं
- मौजूदा Go programs के व्यवहार पर इसका कोई प्रभाव नहीं पड़ेगा
- भाषा विनिर्देशन अधिक सरल होगा, और उपयोगकर्ताओं के लिए Go भाषा अधिक सहज और स्पष्ट बनेगी
6 टिप्पणियां
Hacker News राय
यह अच्छा लगता है कि Go टीम specification में बदलावों को बहुत सावधानी से संभालती है
Go डेवलपमेंट टीम के पिछले 10 साल features और simplicity के बीच संतुलन खोजने की प्रक्रिया रहे हैं
Go 1.25 वास्तव में कोई नया language feature नहीं जोड़ता
मैं Go को Windows build से पहले के समय से फॉलो कर रहा हूँ
यह सही नहीं है कि जब
closeका argument type parameter हो तो सभी types समान element type वाले channel होने चाहिएcloseपर कोई असर नहीं पड़ता, और अलग element types वाले type set के साथ भी compilation ठीक चलता हैमैं Go धीरे-धीरे सीख रहा हूँ, और मेरा background C++ का है
[dead]
अब जब generative AI कोड लिख सकता है, तो सोचता हूँ कि क्या garbage collector अभी भी ज़रूरी है
अब जबकि जनरेटिव AI कोड लिख सकता है, यह सोचने वाली बात है कि क्या garbage collector अभी भी ज़रूरी है।
> काफ़ी मायने रखता है...
ओह.. अगर AI उस स्तर का कोड (मेमोरी मैनेजमेंट को पूरी तरह सही तरीके से संभालने वाला कोड) लिखने लगे, तो इंसानी डेवलपर्स के लिए आज जैसी भूमिका में बने रहना मुश्किल होगा।
1+1=2 को गणित से हल किया जा सकता है, तो फिर उसे AI से हल करने की क्या ज़रूरत है..
क्या इंसानों के पढ़ने लायक boilerplate और ट्रैक करने वाले code context को कम करने के लिहाज़ से GC भी मायने नहीं रखता होगा?
अगर आप यह अनुमान लगा रहे हैं कि code पढ़ने की ज़रूरत ही खत्म हो जाएगी, तो वह अलग बात है।
मूल comment भी धुंधला किया हुआ है, यह देखकर लगता है कि उससे बहुत लोग सहमत नहीं थे।
अगर मेमोरी allocation और deallocation का समय compile time पर निकाला जा सकता है, तो क्या reference counting हटाया नहीं जा सकता? ऐसा लगता है कि मूल Hacker News टिप्पणी के लेखक मेमोरी reuse की समस्या को समझ नहीं रहे हैं।