Lëshimi i gjuhës programuese Go 1.18

Prezantohet lëshimi i gjuhës së programimit Go 1.18, e cila po zhvillohet nga Google me pjesëmarrjen e komunitetit si një zgjidhje hibride që kombinon performancën e lartë të gjuhëve të përpiluara me avantazhe të tilla të gjuhëve të skriptimit si lehtësia e shkrimit të kodit. , shpejtësia e zhvillimit dhe mbrojtja nga gabimet. Kodi i projektit shpërndahet nën licencën BSD.

Sintaksa e Go bazohet në elementë të njohur të gjuhës C me disa huazime nga gjuha Python. Gjuha është mjaft koncize, por kodi është i lehtë për t'u lexuar dhe kuptuar. Kodi Go përpilohet në skedarë të ekzekutueshëm binar të pavarur që funksionojnë në mënyrë origjinale pa përdorur një makinë virtuale (modulet e profilizimit, korrigjimit dhe nënsistemet e tjera të zbulimit të problemeve të kohës së ekzekutimit janë të integruara si komponentë të kohës së ekzekutimit), gjë që lejon performancë të krahasueshme me programet C.

Projekti është zhvilluar fillimisht duke pasur parasysh programimin me shumë fije dhe funksionimin efikas në sistemet me shumë bërthama, duke përfshirë sigurimin e mjeteve në nivel operatori për organizimin e llogaritjeve paralele dhe ndërveprimin midis metodave të ekzekutuara paralelisht. Gjuha ofron gjithashtu mbrojtje të integruar kundër blloqeve të kujtesës së tepërt dhe ofron mundësinë për të përdorur një grumbullues mbeturinash.

Versioni i ri shton mbështetje për funksione dhe lloje gjenerike (gjenerike), me ndihmën e të cilave një zhvillues mund të përcaktojë dhe përdorë funksione të krijuara për të punuar me disa lloje njëherësh. Është gjithashtu e mundur të përdoren ndërfaqe për të krijuar lloje të kombinuara që përfshijnë lloje të shumta të dhënash. Mbështetja për gjenerikët zbatohet pa prishur përputhshmërinë e prapambetur me kodin ekzistues. // Vlerat e grupit të shumës, punon për llojet int64 dhe float64 func SumIntsOrFloats[K krahasueshme, V int64 | float64](m hartë[K]V) V { var s V për _, v := varg m { s += v } kthim s } // Një opsion tjetër me një përkufizim të tipit gjenerik: lloji Number interface { int64 | float64 } func ShumaNumrat[K të krahasueshme, V Numri](m hartë[K]V) V { var s V për _, v := varg m { s += v } kthim s }

Përmirësime të tjera:

  • Shërbimet për testimin e kodit fuzzing janë integruar në paketën standarde të veglave. Gjatë testimit të fuzzimit, gjenerohet një rrjedhë e të gjitha kombinimeve të mundshme të rastësishme të të dhënave hyrëse dhe regjistrohen dështimet e mundshme gjatë përpunimit të tyre. Nëse një sekuencë rrëzohet ose nuk përputhet me përgjigjen e pritur, atëherë kjo sjellje ka shumë të ngjarë të tregojë një gabim ose dobësi.
  • Mbështetje e shtuar për hapësirat e punës shumë-modulare, duke ju lejuar të ekzekutoni komanda në module të shumta në të njëjtën kohë, duke ju lejuar të ndërtoni dhe ekzekutoni njëkohësisht kodin në module të shumta.
  • Janë bërë optimizime të rëndësishme të performancës për sistemet e bazuara në procesorët Apple M1, ARM64 dhe PowerPC64. Aktivizoi aftësinë për të përdorur regjistrat në vend të pirgut për të kaluar argumente te funksionet dhe për të kthyer rezultatin. Zbërthimi i përmirësuar në linjë i sytheve nga përpiluesi. Kontrollimi i tipit në përpilues është ridizajnuar plotësisht. Disa teste tregojnë një rritje prej 20% në performancën e kodit në krahasim me versionin e mëparshëm, por vetë përpilimi zgjat rreth 15% më shumë.
  • Gjatë ekzekutimit, është rritur efikasiteti i kthimit të memories së liruar në sistemin operativ dhe është përmirësuar funksionimi i kolektorit të mbeturinave, sjellja e të cilit është bërë më e parashikueshme.
  • Paketat e reja net/netip dhe debug/buildinfo janë shtuar në bibliotekën standarde. Mbështetja për TLS 1.0 dhe 1.1 është çaktivizuar si parazgjedhje në kodin e klientit. Moduli crypto/x509 ka ndaluar përpunimin e certifikatave të nënshkruara duke përdorur hash SHA-1.
  • Kërkesat për mjedisin në Linux janë ngritur; për të funksionuar, tani duhet të keni një kernel Linux të të paktën versionin 2.6.32. Në versionin tjetër, priten ndryshime të ngjashme për FreeBSD (mbështetja për degën FreeBSD 11.x do të ndërpritet) dhe të paktën FreeBSD 12.2 do të kërkohet që të funksionojë.

Burimi: opennet.ru

Shto një koment