- आने वाले Go 1.22 रिलीज़ में
for loop range से जुड़ी एक आम गलती को ठीक करने की योजना है, जिसने कई कंपनियों में production समस्याएँ पैदा की हैं.
- यह समस्या तब होती है जब loop variable का reference iteration खत्म होने के बाद भी बना रहता है और वह अनजाने में नया value ले लेता है.
- यह समस्या concurrent और non-concurrent, दोनों तरह के Go code में आम है, और variable का reference iteration से आगे निकलता है या नहीं, इसकी analysis जटिल होने के कारण इसे पहचानना और ठीक करना कठिन रहा है.
- इस तरह की गलतियों की पहचान करने वाले मौजूदा tools अक्सर false negative या false positive देते हैं, जिससे बेवजह code changes या छूट गई समस्याएँ पैदा होती हैं.
- Go 1.22 में प्रस्तावित सुधार
for loops को per-loop scope की बजाय per-iteration scope देने के लिए semantics बदलता है, जिससे इस तरह की गलतियाँ और inaccurate tools की ज़रूरत खत्म हो जाएगी.
- backward compatibility बनाए रखने के लिए, नई semantics केवल उन modules के packages पर लागू होगी जो
go.mod file में Go 1.22 या उससे ऊपर declare करते हैं.
- developers यह नियंत्रित कर सकेंगे कि किस package में semantics कब बदले, और मौजूदा code अभी की तरह काम करता रहेगा.
- Go 1.21 में इस scope change का एक preview शामिल है, जिसे environment में
GOEXPERIMENT=loopvar सेट करके enable किया जा सकता है.
- इस बदलाव का Google में व्यापक रूप से परीक्षण किया गया है, और production code में कोई reported problem नहीं मिली.
- हालांकि, loop variable समस्या के कारण कुछ tests, जो मूल रूप से जिस चीज़ को test करना चाहते थे उसे test नहीं कर रहे थे, उन्हें ठीक करना पड़ा.
- Go 1.21 का
loopclosure analyzer इस तरह की समस्याओं की पहचान और reporting में बेहतर बनाया गया है, ताकि developers Go 1.22 के बदलाव के लिए तैयार हो सकें.
- इस बदलाव के बारे में अधिक जानकारी design document और FAQ में मिल सकती है.
1 टिप्पणियां
Hacker News राय