Megjelent a Go 1.22.

Megjelent a Go 1.22 programozási nyelv új változata, amelyet a Google fejleszt közösségi részvétellel, mint hibrid megoldás, amely ötvözi a lefordított nyelvek magas teljesítményét a szkriptnyelvek olyan előnyeivel, mint a kód könnyű írása, a gyors fejlesztés és a hibák elleni védelem. A projekt kódja BSD licenc alatt terjed.

A Go szintaxisa a C nyelv ismerős elemein alapul, néhány Oberon nyelvből átvett elemmel. A nyelv elég tömör, de a kód könnyen olvasható és érthető. A Go nyelvű kód különálló bináris végrehajtható fájlokká fordul, amelyeket natívan futtatnak, virtuális gép használata nélkül (profilozási, hibakeresési és egyéb problémakezelő alrendszerek futási komponensként integrálva vannak), így teljesítménye a C nyelvű programokéval vetekszik.

A projekt kezdetben a több szálú programozásra és a többmagos rendszereken való hatékony működésre összpontosított, beleértve olyan operátorszinten realitásokat, amelyek segítik a párhuzamos számítások és a párhuzamosan futó módszerek közötti interakciók megszervezését. A nyelv beépített védelmi eszközöket is biztosít a memóriaterületek túllépése ellen, egyúttal lehetőséget ad a szemétgyűjtő használatára is.

A legújabb verzióban bekövetkezett változások:

  • A „for” ciklusokhoz hozzáadódott a teljes számok intervallumainak meghatározására vonatkozó támogatás, például a 0-tól 9-ig terjedő értékek átjárásához most a „for i := range 10 {…}” ciklus használható.
  • A „for” ciklusokhoz hozzáadódott egy kísérleti (GOEXPERIMENT=rangefunc) intervallumképző funkciók támogatása, amely lehetővé teszi, hogy funkciót adjunk meg iterátorként. Például: „for i, x := range slices.Backward(s) {…}”.
  • Megoldották a régóta fennálló problémát a „for” ciklusokkal, amely a goroutine-ok (könnyű szálak) hívásakor a ciklusváltozók egyes iterációk közötti megosztásához vezetett. Például a kód values := []string{"a", "b", "c"} for _, v := range values { go func() { fmt.Println(v) done <- true }() } most már az „a”, „b” és „c” értékeket fogja kiírni, nem csak a „c”-t, mint korábban.
  • Optimalizálták a memóriakezelést a runtime-ban, ami 1-3%-os teljesítménynövekedést és a memóriafogyasztás 1%-os csökkenését eredményezte a legtöbb alkalmazás esetében.
  • Folytatódik a fordítóban a kódprofilozás (PGO - Profile-guided optimization) alapján végzett optimalizálások alkalmazása, amelyek figyelembe veszik a program futása közben meghatározott sajátosságokat. Az új verzióban a fordítóban a virtuálás csökkentésére szolgáló eszközök kerültek bevezetésre, amelyek a különböző metódusok közvetett hívásait kibővített inline-blokkok végrehajtására cserélik.
  • A PGO engedélyezésével a hozzáadott módosítás lehetővé tette a legtöbb program teljesítményének 2-14%-kal történő növelését.
  • A fordítóba egy kísérleti (GOEXPERIMENT=newinliner) továbbfejlesztett megvalósítás került bevezetésre a hívások kibővítésének (inlining) mechanizmusához, amely heurisztikát alkalmaz a fontos és másodlagos műveletek elválasztására.
  • A standard könyvtárba hozzá lett adva a „math/rand/v2” csomag, amely egy átfogóbb API-t kínál, és gyorsabb ál-random számgeneráló algoritmusokat alkalmaz.
  • A net/http.ServeMux csomaghoz lehetőség került hozzáadásra az HTTP-módszerek és minták megadására, például a „GET /static/{id}/” minta alkalmazásra kerül a GET HTTP-módszert használó kérések esetén, és a kért út második szegmensében található értéket az „id” azonosítóban tárolja.
  • A database/sql csomaghoz hozzá lett adva a Null[T] típus támogatása, amely lehetővé teszi a NULL értéket elfogadó oszlopok beolvasását. A slices csomaghoz hozzáadódott a Concat függvény a különböző típusú szeletek összefűzésére.
  • A munkaterületekkel (modulkészletekkel) való munkára használható parancsokhoz lehetőség került biztosítani egy „vendor” könyvtár használatára, amely a munkaterület tartalmához tartozó függőségeket tartalmaz. A könyvtár a „go work vendor” parancs végrehajtásakor jön létre, és az építési parancsokban használják a "-mod=vendor" opció megadásakor (automatikusan be van kapcsolva, ha létezik a vendor könyvtár).

Változások a segédprogramok viselkedésében.

  • A go get már nem támogatott a modulon kívül, a deprecated GOPATH módban (azaz GO111MODULE=off állapotban). Más építési parancsok, mint például a go build és go test, továbbra is működnek a deprecated GOPATH programokkal egy határozatlan ideig.
  • A go mod init már nem próbálja importálni a modulok követelményeit más beszerzők konfigurációs fájljairól (mint például a Gopkg.lock).
  • A go test -cover most már olyan csomagok esetében is összefoglalót nyújt a lefedettségről, amelyeknek nincsenek saját tesztfájljaik. A Go 1.22 előtt a go test -cover ilyen csomagok esetén a következőt jelentette: mymod/mypack [nincsenek tesztfájlok]

    A Go 1.22-től kezdődően a csomagokban szereplő függvények lefedetlennek számítanak: mymod/mypack coverage: 0.0% a nyilatkozatokból. Kérjük, vegye figyelembe, hogy ha a csomag egyáltalán nem tartalmaz végrehajtható kódot, nem tudunk jelentős lefedettségi százalékot megadni; ilyen esetekben a go test továbbra is azt fogja jelezni, hogy nincsenek tesztfájlok.

  • A trace eszköz webes felülete ​​kismértékben frissült az új trace modul támogatásának érdekében, néhány hibát javítottak, és javították a különböző oldalak olvashatóságát. A webes felület most támogatja a trace-ek tanulmányozását eseményorientált nézetben. A trace néző mostantól teljes időtartamot is megjelenít minden rendszerhívás esetén. Ezek a fejlesztések csak a Go 1.22 vagy újabb verziók által készített programok által létrehozott trace-ek megtekintésére vonatkoznak. A jövőbeli kiadásban ezek közül a fejlesztések közül néhány az régebbi Go verziók által létrehozott trace-ekre is vonatkozni fog.
  • A futtatási környezet mostantól a szemétgyűjtés metaadatait a heap minden egyes objektumához közelebb tárolja. Ez a változás a legtöbb Go program memóriaigényét körülbelül 1%-kal csökkenti a felesleges metadaták deduplikálásának révén. Néhány program esetében a javulás kisebb lehet, mivel ez a változás korrekciókat végez a memóriakiosztó mérethatárok osztályain, ezért egyes objektumok a méretosztály egy magasabb szintjére kerülhetnek. Ennek a változásnak következményeként egyes objektumok címei, amelyek korábban mindig 16 bájtos (vagy annál magasabb) határra voltak igazítva, mostantól csak 8 bájtos határra lesznek igazítva. Néhány program, amely assembler utasításokat használ, amelyek megkövetelik, hogy a memória címei 8 bájt méretnél nagyobb határon legyenek igazítva, és amelyek a memóriakiosztó korábbi viselkedésére támaszkodnak, hibát okozhatnak, de azt várjuk, hogy az ilyen programok ritkák lesznek. Az ilyen programok létrehozhatók a GOEXPERIMENT=noallocheaders beállítással, amely lehetővé teszi a régi metadatamodelhez való visszatérést és a korábbi igazítási viselkedés helyreállítását, de a csomagok tulajdonosainak frissíteniük kell assembler kódjukat az igazítási feltételek feltételezésének elkerülése érdekében, mivel ez a megoldás a jövőbeni megjelenések során eltávolításra kerül.
  • A Go 1.20 kiadási megjegyzéseiben említett módon a Go 1.22 mostantól a Go 1.20 vagy újabb végső verzióját igényli az első fordításhoz. Azt várjuk, hogy a Go 1.24 a Go 1.22 vagy újabb végső verzióját fogja megkövetelni az első fordításhoz.
    Eredeti (go.dev)

Forrás: linux.org.ru

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster