Pas një periudhë gjashtëmujori zhvillimi, u lançua versioni 1.26 i gjuhës së programimit Go, e cila është zhvilluar nga kompania Google në bashkëpunim me komunitetin. Gjuha kombinon performancën e lartë që karakterizon gjuhët e kompiluara me përfitimet e gjuhëve skrotpive, siç janë thjeshtësia e kodimit, shpejtësia e lartë e zhvillimit dhe mbrojtja nga gabimet. Kodi i projektit shpërndahet nën licencën BSD.
Sintaksa e Go bazohet në elemente të njohura të gjuhës C me huazime të veçanta nga gjuha Oberon. Gjuha është mjaft konçize, por kodi lexohet dhe perceptohet lehtësisht. Kodi në gjuhën Go kompilohet në skedarë executable të veçantë, që funksionojnë natyrshëm, pa përdorimin e një makine virtuale (modulet e profilimit, debuguese dhe nënkategoritë e tjera të zbulimit të problemeve integrohen si komponente runtime), duke mundësuar arritjen e një performance të ngjashme me programet në gjuhën C.
Projekti është fillimisht zhvilluar me një fokus në programimin me shumë përgjegjësi dhe punën efikase në sisteme me shumë bërthama. Për shembull, në nivelin e operatorëve janë zbatuar mjete për organizimin e llogaritjeve paralele dhe ndërveprimin mes metodave që ekzekutohen paralelisht. Gjuha gjithashtu ofron mjete të ndërtuara për mbrojtjen nga daljet jashtë kufijve të buffers dhe mundësinë e përdorimit të mbledhësit të plehrave.
Ndryshimet në publikimin e ri përfshijnë:
- Garuesi i mbeturinave "greenteagc" është aktivizuar si parazgjedhje, i optimizuar për të rritur performancën e krijimit dhe skanimit të objekteve të vogla. Në aplikacionet ku përdoret intensivisht mbledhja e mbeturinave, me "greenteagc", ka një reduktim të kostove të mbledhjes së mbeturinave nga 10-40%.
- Në funksionin e ndërtuar new(), i cili është për krijimin e variablave të rinj, është shtuar mundësia për të përcaktuar një shprehje si operand, që përcakton vlerën fillestare të variablit. Për shembull, në vend të kodit x := int64(300) ptr := &x tani mund të shkruhet: ptr := new(int64(300))
- Në llojet e përgjithshme (generic) lejohet që të referohet tek vetvetja si një argument në listën e parametrave të tipit të saj (mund të kaloni tipin tek parametri i saj). Në rreshtin e parë të shembullit të ilustruar më poshtë, referimi Adder në vetveten e saj tani nuk shkakton një gabim: type Adder[A Adder[A]] interface { Add(A) A } func algo[A Adder[A]](x, y A) A { return x.Add(y) }
- Shpenzimet gjatë thirrjes së funksioneve në gjuhën C nga kodi në gjuhën Go përmes cgo janë reduktuar rreth 30%.
- Në runtime në platformat 64-bit është realizuar randomizimi i hapësirës së adresave gjatë ngarkimit, çka e komplikon parashikimin e adresave në memorie në përpjekjet për të shfrytëzuar dobësitë në kodin C, i angazhuar përmes cgo. Për të çaktivizuar randomizimin, është propozuar opsioni "GOEXPERIMENT=norandomizedheapbase64".
- Numri i situatave në të cilat kompajleri alokon memorie për slice në grumbull është zgjeruar, duke pasur një ndikim pozitiv në performancë.
- Implementimi i komandĂ«s "go fix" Ă«shtĂ« shkruar nga e para duke pĂ«rdorur paketĂ«n analysis, e cila ofron funksionalitet pĂ«r analizĂ«n statistike tĂ« kodit. ĂshtĂ« shtuar mbĂ«shtetje pĂ«r analizatorĂ«t e disponueshĂ«m nĂ« paketĂ«n modernize, tĂ« cilĂ«t ofrojnĂ« pĂ«rmirĂ«sime pĂ«r thjeshtimin e kodit duke marrĂ« parasysh mundĂ«sitĂ« e reja tĂ« gjuhĂ«s dhe bibliotekĂ«s standarde. NjĂ« analizator "inline" pĂ«r inline-ngjitjen e tĂ« gjitha thirrjeve tĂ« funksioneve, tĂ« shĂ«nuara me direktivĂ«n "//go:fix inline", Ă«shtĂ« shtuar.
- Shtuar paketa tĂ« reja crypto/hpke (implementimi i HPKE â Hybrid Public Key Encryption), crypto/mlkem/mlkemtest dhe testing/cryptotest.
- Shtuar paketa eksperimentale simd/archsimd, që ofron qasje të nivelit të ulët në ekzekutimin e operacioneve vektoriale duke përdorur instruksione SIMD në sistemet me arkitekturë AMD64.
- Shtuar paketa eksperimentale runtime/secret për pastrimin e sigurt (zero) të memories përkohësisht të alokuar gjatë ekzekutimit të funksionit të caktuar.
- Në paketën runtime/pprof është shtuar një profil eksperimental goroutineleak për zbuluar rrjedhjet e goroutines.
Burimi: opennet.ru
