1 पॉइंट द्वारा GN⁺ 2024-02-08 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • Go 1.22 वर्ज़न, Go 1.21 के 6 महीने बाद जारी किया गया।
  • ज़्यादातर बदलाव toolchain, runtime और library implementation में हैं।
  • Go 1 compatibility promise बरकरार है, और उम्मीद है कि लगभग सभी Go प्रोग्राम पहले की तरह compile और run होंगे।

भाषा में बदलाव

  • for loop से जुड़े दो बदलाव हैं।
    • पहले for loop द्वारा घोषित variables एक बार बनाए जाते थे और हर iteration में update होते थे, लेकिन Go 1.22 में loop की हर iteration नया variable बनाती है, जिससे गलती से share होने वाले bug रोके जाते हैं।
    • for loop अब integers पर भी range कर सकता है।

टूल्स

Go command

  • workspace में vendor directory का उपयोग करके dependencies को manage किया जा सकता है।
  • go get अब module के बजाय पुराने GOPATH mode में support नहीं करता।
  • go mod init अब दूसरे vendoring tools की config files से module requirements import करने की कोशिश नहीं करता।
  • go test -cover अब उन packages के लिए भी coverage summary प्रिंट करता है जिनमें अपनी test files नहीं हैं।

Trace

  • trace tool का web UI, नए tracer को support करने के लिए आंशिक रूप से फिर से design किया गया है।

Vet

  • loop variables के लिए vet tool का behavior बदला गया है।
  • append में कोई value जोड़े बिना की गई calls के लिए नई warning जोड़ी गई है।
  • defer statement में time.Since इस्तेमाल करने पर होने वाली समस्या के लिए नई warning जोड़ी गई है।
  • log/slog calls में key-value pairs मेल न खाने पर नई warning जोड़ी गई है।

Runtime

  • type-based garbage collection metadata को heap objects के और पास रखकर CPU performance में 1-3% सुधार किया गया है।

Compiler

  • profile-guided optimization (PGO) builds अब पहले से ज़्यादा calls को devirtualize कर सकते हैं।

Linker

  • linker के -s और -w flags को इस तरह बदला गया है कि वे सभी platforms पर अधिक consistently काम करें।

Bootstrap

  • Go 1.22 को bootstrap के लिए Go 1.20 की अंतिम point release या उससे ऊपर की ज़रूरत है।

Core libraries

नया math/rand/v2 package

  • math/rand/v2, standard library का पहला “v2” package है, जिसमें math/rand की तुलना में कई अहम बदलाव हैं।

नया go/version package

  • Go version strings को validate और compare करने वाले functions को implement करने के लिए नया go/version package जोड़ा गया है।

बेहतर routing patterns

  • standard library की HTTP routing को और अधिक expressive बनाया गया है।

libraries में छोटे बदलाव

  • अलग-अलग libraries में छोटे बदलाव और performance improvements शामिल हैं।

Ports

Darwin

  • macOS पर 64-bit x86 architecture (darwin/amd64 port) के लिए Go toolchain अब default रूप से position-independent executables (PIE) बनाता है।

Arm

  • GOARM environment variable का उपयोग करके software या hardware floating point चुना जा सकता है।

Loong64

  • loong64 port अब function arguments और results को registers के ज़रिए pass करता है।

OpenBSD

  • OpenBSD पर big-endian 64-bit PowerPC (openbsd/ppc64) के लिए experimental port जोड़ा गया है।

GN⁺ की राय

  • इस Go 1.22 रिलीज़ में खास तौर पर for loop के बदलाव और नए math/rand/v2 package का आना उल्लेखनीय है। ये बदलाव Go developers को बेहतर performance और stability देते हैं, और नई सुविधाएँ Go भाषा के विकास को दिखाती हैं।
  • math/rand/v2 package तेज़ algorithms और नए API के ज़रिए बेहतर random number generation देता है, जो cryptography और अन्य random-dependent applications के लिए अहम सुधार है।
  • उम्मीद है कि Go 1.22 compatibility बनाए रखते हुए performance और developer experience को बेहतर करने वाली कई optimizations और नई सुविधाओं के साथ Go community पर सकारात्मक असर डालेगा।

1 टिप्पणियां

 
GN⁺ 2024-02-08
Hacker News की राय
  • एक TypeScript डेवलपर ने हाल ही में Go भाषा में स्विच करने का अपना अनुभव साझा किया। शुरुआत में उसने Go में array functions की कमी और कम लचीले type system को लेकर चिंता जताई। लेकिन Go का उपयोग करते हुए उसे standard library की उत्कृष्टता, type safety, और built-in coding standards के फायदे महसूस हुए। Routing का standard library में एकीकृत होना भी उसने सकारात्मक रूप से आंका।
  • Go 1.22 version के लिए interactive release notes देने वाला एक लिंक साझा किया गया।
  • 9 साल से अधिक समय से Go का उपयोग कर रहे एक डेवलपर ने Dart (Flutter development के लिए) और Go की तुलना की। Dart हर संभव feature जोड़ने की कोशिश करता है, जबकि Go इसके उलट simplicity को प्राथमिकता देता है। Dart में class initialization के कई तरीके होने से भ्रम होता है, और उसे Go की सादगी की कमी महसूस होती है। Dart में map/stream आदि का उपयोग करने वाले जटिल single expressions debugging के दौरान या नए डेवलपर्स के लिए भ्रम पैदा कर सकते हैं।
  • io.Copy अब TCPConn से UnixConn में copy करते समय Linux के splice(2) system call का उपयोग कर सकता है। io package में इस तरह के pattern से मिलने वाले फायदों की सराहना की गई।
  • Go 1.22 version में routing patterns बेहतर हुए हैं, लेकिन इसके कारण छोटे-मोटे compatibility issues हो सकते हैं। इसे httpmuxgo121 field के जरिए नियंत्रित किया जा सकता है।
  • कुछ डेवलपर्स को Go भाषा में जोड़ी गई 'function-scoped' सुविधा पसंद नहीं आई। उनका मानना है कि यह भाषा में जोड़ी गई complexity के मुकाबले पर्याप्त सुविधा नहीं देती और Go की explicit तथा simple style के साथ अच्छी तरह मेल नहीं खाती।
  • Go 1.22 version में loop की हर iteration के लिए नया variable बनने पर हुई चर्चा का लिंक साझा किया गया।
  • sql.Null[T] के जुड़ने का स्वागत किया गया। पहले sqlboiler के null का उपयोग किया जाता था, जिसका API sql.Null जैसा है, और इसमें अतिरिक्त रूप से IsSet() bool method भी है, जो बताता है कि value को स्पष्ट रूप से set किया गया है या नहीं।
  • Standard library में routing जोड़े जाने का स्वागत किया गया, और chi library को हटाया जा सकता है या नहीं, इस पर विचार किया जा रहा है।
  • Go को production में उपयोग करने वाले डेवलपर्स के बीच यह सवाल भी है कि क्या वे जल्दी नए version पर जाते हैं या पुराने release पर बने रहते हैं। any keyword के उपयोग पर भी राय साझा की गई।