უკან დაბრუნება
Go 1.27-ის ინტერაქტიული ტური: generic მეთოდები და პოსტკვანტური ხელმოწერები
SiTech Team2 წთ. საკითხავი

Go 1.27-ის ინტერაქტიული ტური: generic მეთოდები და პოსტკვანტური ხელმოწერები

VictoriaMetrics-მა Go 1.27-ის პრაქტიკული ტური გამოაქვეყნა: მთავარი სიახლე generic მეთოდებია, ასევე მოდის ზომით სპეციალიზებული ალოკაცია, ML-DSA კრიპტოგრაფია, uuid პაკეტი და ნაგულისხმევი JSON v2.

Go 1.27-ის გამოსვლა ახლოვდება და VictoriaMetrics-მა გამოაქვეყნა ინტერაქტიული ტური იმის შესახებ, თუ რა იცვლება — თითოეული ფუნქციისთვის გაშვებადი მაგალითებით. 31 ივლისით დათარიღებული სტატიის ავტორია ხესუს ესპინო; ის აგრძელებს ანტონ ჟიჟანოვის მიერ დაწყებულ სერიას, რომელმაც ტურები Go 1.22-დან 1.26-მდე ყველა გამოშვებისთვის დაწერა და ახლა ამას წყვეტს.

generic მეთოდები — გამოშვების მთავარი სიახლე

მთავარი ცვლილება ტიპების სისტემას შეეხება: მეთოდის დეკლარაციას ახლა შეუძლია საკუთარი ტიპის პარამეტრების გამოცხადება, მიმღებისგან დამოუკიდებლად, რის შედეგადაც ტიპზე მოქმედი generic ოპერაცია ამ ტიპის მეთოდად შეიძლება არსებობდეს და არა როგორც პაკეტის დონის ფუნქცია. ტურის მაგალითში Box კონტეინერი იღებს Map მეთოდს, რომელიც int-ის Box-ს string-ის Box-ად გარდაქმნის. ერთი შეზღუდვა რჩება: ინტერფეისებს კვლავ არ შეუძლიათ generic მეთოდების დეკლარირება და generic მეთოდით ინტერფეისის დაკმაყოფილება შეუძლებელია. ამასთან ერთად ორი მცირე ერგონომიული გაუმჯობესება მოდის: struct-ის ლიტერალის გასაღები ახლა ნებისმიერი ვალიდური ველის სელექტორი შეიძლება იყოს — embedded struct-იდან დაწინაურებული ველის პირდაპირ დაყენება — ხოლო ფუნქციის ტიპის ინფერენცია კონვერსიებსა და კომპოზიტურ ლიტერალებზეც გავრცელდა.

შესრულება: ალოკაცია, SIMD და კომპილატორი

კომპილატორი ახლა ზომით სპეციალიზებული მეხსიერების გამოყოფის რუტინებს იძახებს, რაც 80 ბაიტზე ნაკლები ალოკაციების ღირებულებას 30%-მდე ამცირებს. ალოკაციებით დატვირთულ პროგრამებში საერთო მოგება დაახლოებით 1% მოსალოდნელია, სამაგიეროდ ბინარი დაახლოებით 60 კბ-ით იზრდება; ამის გამორთვა GOEXPERIMENT-ის დროშით შეიძლება. ექსპერიმენტული პორტაბელური SIMD პაკეტი (GOEXPERIMENT=simd) ვექტორის ზომისგან დამოუკიდებელ ტიპებს სთავაზობს და სტანდარტული ბიბლიოთეკა უკვე მომხმარებელია: Swiss Table-ის map-ის იმპლემენტაციამ hash ფუნქციები simd intrinsics-ზე გადააწყო.

უსაფრთხოება და სტანდარტული ბიბლიოთეკა

პოსტკვანტური ხელმოწერები crypto/mldsa-ის სახით მოდის: ML-DSA, FIPS 204-ის სპეციფიკაციის მიხედვით, სამი პარამეტრული ნაკრებით, და აღწევს crypto/x509-სა და TLS 1.3-ის ხელმოწერის სქემებშიც. სტანდარტული ბიბლიოთეკა იძენს uuid პაკეტს (RFC 9562), სადაც NewV7 დროით დალაგებულ მნიშვნელობებს აწარმოებს — მოსახერხებელი მონაცემთა ბაზის გასაღებებისთვის. დიდი ხანი ნანატრი encoding/json/v2 ექსპერიმენტული სტატუსიდან გამოდის: ის build flag-ის გარეშეა ხელმისაწვდომი, კლასიკური encoding/json კი შიგნიდან v2-ის იმპლემენტაციას ეყრდნობა, ძველი ქცევის დაბრუნება კი GOEXPERIMENT-ით შეიძლება;strings და bytes იღებენ CutLast-ს, Unicode-ის მხარდაჭერა კი მე-15 ვერსიიდან მე-17-ზე გადადის.

ხელსაწყოები და ნაკლებად თვალსაჩინო სამუშაო

ხელსაწყოების ცვლილებებიდან: go test ახლა ნაგულისხმევად ამოწმებს stdversion vet-ს, go doc-ს შეუძლია კონკრეტული მოდულის ვერსიის დოკუმენტაციის მოძიება, ხოლო go fix-ს ახალი modernizers ემატება. ტური ხაზს უსვამს იმასაც, რაც ადვილად გამორჩება: HTTP/2 საბოლოოდ რეალური პაკეტია და აღარ არის გენერირებული 12 226-სტრიქონიანი ფაილი, HTTP/3-ის ჩარჩოები არაექსპორტირებული სახით დაემატა და და არასანქცირებული //go:linkname-ის გამოყენება უფრო რთული გახდა.

SSiTech

SiTech — AI-გაძლიერებული ვებ დეველოპმენტი

ვქმნით სწრაფ, თანამედროვე ვებსაიტებს და AI-ს ვაერთიანებთ ქართული ბიზნესებისთვის. გაქვთ პროექტი ან კითხვა? სიამოვნებით დაგეხმარებით.