A Go programozási nyelv kiadása 1.18

Bemutatják a Go 1.18 programozási nyelv kiadását, amelyet a Google fejleszt a közösség részvételével hibrid megoldásként, amely egyesíti a lefordított nyelvek nagy teljesítményét a szkriptnyelvek olyan előnyeivel, mint a kódírás egyszerűsége , a fejlesztés sebessége és a hibavédelem. A projekt kódja a BSD licenc alatt kerül terjesztésre.

A Go szintaxisa a C nyelv ismert elemein alapul, néhány kölcsönzés a Python nyelvből. A nyelvezet meglehetősen tömör, de a kód könnyen olvasható és érthető. A Go kódot önálló bináris végrehajtható fájlokba fordítják, amelyek natív módon futnak virtuális gép használata nélkül (a profilozó, hibakereső modulok és egyéb futásidejű problémák észlelésére szolgáló alrendszerek futásidejű összetevőként vannak integrálva), ami a C-programokhoz hasonló teljesítményt tesz lehetővé.

A projektet kezdetben a többszálú programozás és a többmagos rendszerek hatékony működésének szem előtt tartásával fejlesztették ki, beleértve a kezelői szinten megvalósított eszközök biztosítását a párhuzamos számítás és a párhuzamosan végrehajtott módszerek közötti interakció megszervezéséhez. A nyelv emellett beépített védelmet nyújt a lefoglalt memóriablokkok túllépése ellen, és lehetőséget biztosít a szemétgyűjtő használatára.

Az új verzió az általános függvények és típusok (generics) támogatásával egészíti ki, melynek segítségével a fejlesztő több típussal egyidejűleg működő funkciókat definiálhat és használhat. Lehetőség van interfészek használatával kombinált típusok létrehozására is, amelyek több adattípust felölelnek. Az általános termékek támogatása a meglévő kóddal való visszamenőleges kompatibilitás megszakítása nélkül valósul meg. // Összegzett értékek, int64 és float64 típusoknál működik func SumIntsOrFloats[K összehasonlítható, V int64 | float64](m map[K]V) V { var s V for _, v := range m { s += v } return s } // Egy másik lehetőség általános típusdefinícióval: type Number interface { int64 | float64 } func SumNumbers[K összehasonlítható, V szám](m térkép[K]V) V { var s V for _, v := tartomány m { s += v } return s }

Egyéb fejlesztések:

  • A fuzzing kód tesztelésére szolgáló segédprogramok a szabványos eszközkészletbe vannak beépítve. A fuzzing tesztelés során a bemeneti adatok összes lehetséges véletlenszerű kombinációjának folyama generálódik, és rögzítésre kerül a feldolgozásuk során fellépő esetleges hibák. Ha egy sorozat összeomlik, vagy nem egyezik a várt válasszal, akkor ez a viselkedés nagy valószínűséggel hibát vagy sebezhetőséget jelez.
  • Hozzáadott támogatás a több moduláris munkaterületekhez, lehetővé téve a parancsok egyszerre több modulon történő végrehajtását, lehetővé téve a kód egyidejű felépítését és futtatását több modulban.
  • Jelentős teljesítményoptimalizálások történtek az Apple M1, ARM64 és PowerPC64 processzorokon alapuló rendszereken. Engedélyezte a regiszterek használatát a verem helyett az argumentumok átadásához a függvényeknek és az eredmény visszaadásához. A ciklusok továbbfejlesztett soron belüli kibontása a fordító által. A fordítóprogramban a típusellenőrzést teljesen újratervezték. Egyes tesztek 20%-os kódteljesítménynövekedést mutatnak az előző kiadáshoz képest, de maga a fordítás körülbelül 15%-kal tovább tart.
  • Futás közben növelték a felszabadult memória visszajuttatásának hatékonyságát az operációs rendszerbe, és javították a szemétgyűjtő működését, melynek viselkedése kiszámíthatóbbá vált.
  • Új net/netip és debug/buildinfo csomagok kerültek a szabványos könyvtárba. A TLS 1.0 és 1.1 támogatása alapértelmezés szerint le van tiltva az ügyfélkódban. A crypto/x509 modul leállította az SHA-1 hash használatával aláírt tanúsítványok feldolgozását.
  • A Linux környezettel szemben támasztott követelmények megemelkedtek, a működéshez legalább 2.6.32-es verziójú Linux kernellel kell rendelkeznie. A következő kiadásban hasonló változások várhatók a FreeBSD-n (a FreeBSD 11.x ág támogatása megszűnik), és legalább a FreeBSD 12.2 működéséhez szükséges.

Forrás: opennet.ru

Hozzászólás