3 पॉइंट द्वारा lemonmint 2024-12-20 | 4 टिप्पणियां | WhatsApp पर शेयर करें

[IMG] Overview of Go 1.24

Go 1.24 संस्करण प्रदर्शन, सुरक्षा और डेवलपर अनुभव पर केंद्रित कई सुधारों को पेश करता है, जिससे यह एक महत्वपूर्ण रिलीज़ बनता है। इन बदलावों का लक्ष्य Go को आधुनिक applications बनाने के लिए और अधिक शक्तिशाली तथा efficient बनाना है।

प्रदर्शन सुधार

प्रमुख benchmark suite में CPU overhead को 2~3% तक कम करने वाले सामान्य प्रदर्शन सुधार किए गए हैं। इन सुधारों में नया built-in map implementation, छोटे objects के लिए अधिक efficient memory allocation, और runtime के भीतर mutex का नया implementation शामिल है। वास्तविक परिणाम application के अनुसार अलग हो सकते हैं।

क्वांटम-प्रतिरोधी क्रिप्टोग्राफी

crypto/mlkem package पेश किया गया है, जो ML-KEM-768 और ML-KEM-1024 को implement करता है। ML-KEM, जिसे पहले Kyber के नाम से जाना जाता था, FIPS 203 में निर्दिष्ट क्वांटम-प्रतिरोधी key exchange mechanism है। यह जोड़ Go को भविष्य की cryptographic security के लिए तैयार करता है।

Encrypted Client Hello

TLS में ECH(Encrypted Client Hello) का समर्थन जोड़ा गया है। इस feature को Config.EncryptedClientHelloKeys field भरकर सक्षम किया जा सकता है, और यह TLS connections की privacy तथा security को बेहतर बनाता है।

नया Swiss Table Map

बेहतर प्रदर्शन के लिए map implementation को उन्नत किया गया है। यह नया implementation Swiss Tables पर आधारित है, और इसे GOEXPERIMENT=noswissmap build flag के जरिए disable किया जा सकता है।

Sync Map अपडेट

sync.Map में map modification performance बेहतर हुई है। अलग-अलग key sets पर किए गए modifications में बड़े maps पर contention होने की संभावना अब बहुत कम है, और map में कम contention load पाने के लिए पहले जैसी warm-up तैयारी की अब ज़रूरत नहीं है। यदि कोई समस्या आती है, तो GOEXPERIMENT=nosynchashtriemap का उपयोग करके पुराने implementation पर वापस लौटा जा सकता है।

बेहतर JSON marshaling

JSON marshaling के दौरान struct fields को अधिक समझदारी से छोड़ने के लिए नया omitempty tag option जोड़ा गया है। marshaling करते समय, omitempty option वाले struct field का मान 0 होने पर उसे छोड़ा जाएगा। यदि field type में IsZero() bool method है, तो उसी का उपयोग यह जांचने के लिए किया जाएगा कि मान 0 है या नहीं।

Runtime cleanup

बेहतर resource management के लिए SetFinalizer की जगह AddCleanup function पेश किया गया है। SetFinalizer के विपरीत, यह finalization के लिए जुड़े object को revive नहीं करता, और एक ही object के साथ कई cleanups जोड़े जा सकते हैं। नए code में SetFinalizer की बजाय AddCleanup को प्राथमिकता देनी चाहिए।

go.mod में tool directive

go.mod में tool directive के जरिए tool dependencies को track करना बेहतर बनाया गया है। इससे पहले के workaround, यानी tools.go नाम की convention-based file में tools को blank import के रूप में जोड़ने की आवश्यकता समाप्त हो जाती है।

Directory-restricted access

नियंत्रित file system operations के लिए नया os.Root type जोड़ा गया है। os.Root type किसी विशेष directory के भीतर file system operations करने की क्षमता देता है, जिससे निर्दिष्ट path के बाहर access को रोका जा सकता है।

Testing सुधार

concurrent code के testing के लिए नया testing/synctest package जोड़ा गया है। synctest.Run function isolated "bubble" में goroutines के एक समूह को शुरू करता है, और synctest.Wait function तब तक प्रतीक्षा करता है जब तक वर्तमान bubble की सभी goroutines block न हो जाएँ। यह package experimental है और build समय पर GOEXPERIMENT=synctest सेट करके इसे सक्षम करना होगा।

Build cache

go run executables अब तेज़ execution के लिए cache किए जाते हैं। इससे cache बड़ा हो सकता है, लेकिन बार-बार execution पहले से तेज़ हो जाता है।

Cgo प्रदर्शन

बेहतर Cgo performance के लिए नए #cgo noescape और #cgo nocallback annotations जोड़े गए हैं। #cgo noescape cFunctionName compiler को बताता है कि C function को दी गई memory escape नहीं होगी। #cgo nocallback cFunctionName compiler को बताता है कि C function दोबारा किसी Go function को call नहीं करेगा।

Weak pointers

memory को reclaim होने से रोके बिना सुरक्षित रूप से reference करने के लिए weak pointers का समर्थन जोड़ा गया है। weak pointers एक low-level primitive के रूप में दिए गए हैं, जिनसे value interning के लिए weak maps, canonicalization maps, और कई प्रकार के caches जैसे memory-efficient structures बनाए जा सकते हैं।

Benchmark testing सुधार

तेज़ और कम त्रुटिपूर्ण benchmarks के लिए नया testing.B.Loop method जोड़ा गया है। benchmark function को हर -count पर ठीक एक बार चलाया जाता है, इसलिए महंगे setup और cleanup चरण केवल एक बार चलते हैं। function call parameters और results को बनाए रखा जाता है, जिससे compiler loop body को पूरी तरह optimize नहीं कर पाता।

Go 1.24 संस्करण भाषा और उसके ecosystem के कई पहलुओं में महत्वपूर्ण सुधार लाने वाली एक अहम रिलीज़ साबित होती दिख रही है।

4 टिप्पणियां

 
secret3056 2024-12-20

जो लोग Go इस्तेमाल करते हैं, क्या कोई ऐसी feature है जिसकी आप उम्मीद करते हैं?
मुझे .? और ?? जैसे operators चाहिए, और अगर संभव हो तो macros भी होने चाहिए।

सच कहूँ तो struct tag एक गलती है.

 
gkswnsqja 2024-12-20

मुझे भी व्यक्तिगत रूप से लगता है कि macros ज़रूर होने चाहिए, आखिर कब तक generate करना पड़ेगा T_T

 
qkrqjadn 2024-12-20

मुझे जानना है कि struct tag को गलती क्यों माना जाता है

 
secret3056 2024-12-20

टूल्स की मदद पाना मुश्किल होना सबसे बड़ी समस्या है.

  • सब कुछ string होने की वजह से टाइपो होने पर भी गलती पकड़ना मुश्किल होता है.
  • json को छोड़ दें तो auto-completion या IntelliSense नहीं मिलता.
  • कई टूल्स इस्तेमाल करते समय सब कुछ एक ही लाइन में लिखना पड़ता है, इसलिए readability खराब लगने से बचा नहीं जा सकता.

gomodifytags आए हुए भी काफ़ी समय हो गया है, लेकिन VSC के Go extension के साथ इसका integration भी काफ़ी देर से हुआ.