Eldono de la programlingvo Go 1.18

Estas prezentita la eldono de la programlingvo Go 1.18, kiu estas disvolvita de Google kun la partopreno de la komunumo kiel hibrida solvo, kiu kombinas la altan rendimenton de kompilitaj lingvoj kun tiaj avantaĝoj de skriptlingvoj kiel facileco de skribkodo. , rapideco de disvolviĝo kaj erarprotekto. La projektkodo estas distribuita sub la permesilo BSD.

La sintakso de Go baziĝas sur konataj elementoj de la C-lingvo kun kelkaj pruntoj de la Python-lingvo. La lingvo estas sufiĉe konciza, sed la kodo estas facile legebla kaj komprenebla. Go-kodo estas kompilita en memstarajn binarajn ruleblajn dosierojn kiuj funkcias denaske sen uzado de virtuala maŝino (profilado, sencimigaj moduloj, kaj aliaj rultempaj problemo-detektaj subsistemoj estas integritaj kiel rultempaj komponentoj), kio enkalkulas efikecon komparebla al C-programoj.

La projekto estas komence evoluigita kun okulo al plurfadena programado kaj efika operacio sur plurkernaj sistemoj, inkluzive de disponigado de funkciigist-nivelaj rimedoj por organizado de paralela komputado kaj interagado inter paralel-efektivigitaj metodoj. La lingvo ankaŭ disponigas enkonstruitan protekton kontraŭ troasignitaj memorblokoj kaj disponigas la kapablon uzi rubkolektilon.

La nova versio aldonas subtenon por ĝeneralaj funkcioj kaj tipoj (generaĵoj), kun la helpo de kiuj programisto povas difini kaj uzi funkciojn destinitajn por labori kun pluraj tipoj samtempe. Ankaŭ eblas uzi interfacojn por krei kombinitajn tipojn, kiuj ampleksas plurajn datumtipojn. Subteno por generiloj estas efektivigita sen rompi malantaŭan kongruon kun ekzistanta kodo. // Sumo aro valoroj, funkcias por int64 kaj float64 tipoj func SumIntsOrFloats[K komparebla, V int64 | float64](m mapo[K]V) V { var s V por _, v := intervalo m { s += v } return s } // Alia opcio kun senmarka tipa difino: type Number interface { int64 | float64 } func SumoNombroj[K komparebla, V Nombro](m mapo[K]V) V { var s V por _, v := intervalo m { s += v } redono s }

Aliaj plibonigoj:

  • Iloj por fuzing-kodotestado estas integritaj en la norman ilaron. Dum fuzing-testado, fluo de ĉiuj eblaj hazardaj kombinaĵoj de enirdatenoj estas generita kaj eblaj fiaskoj dum ilia pretigo estas registritaj. Se sekvenco kraŝas aŭ ne kongruas kun la atendata respondo, tiam ĉi tiu konduto tre verŝajne indikas cimon aŭ vundeblecon.
  • Aldonita subteno por multmodulaj laborspacoj, permesante al vi ekzekuti komandojn sur pluraj moduloj samtempe, permesante al vi samtempe konstrui kaj ruli kodon en pluraj moduloj.
  • Signifaj agado-optimumigoj estis faritaj por sistemoj bazitaj sur Apple M1, ARM64 kaj PowerPC64-procesoroj. Ebligis la kapablon uzi registrojn anstataŭ la stakon por pasi argumentojn al funkcioj kaj redoni la rezulton. Plibonigita enlinia malvolviĝo de bukloj de la kompililo. Tipkontrolo en la kompililo estis tute restrukturita. Kelkaj testoj montras 20% pliiĝon en koda agado kompare kun la antaŭa eldono, sed kompilo mem daŭras ĉirkaŭ 15% pli longe.
  • En rultempo, la efikeco de resendado de liberigita memoro al la operaciumo estis pliigita kaj la funkciado de la rubkolektilo estis plibonigita, kies konduto fariĝis pli antaŭvidebla.
  • Novaj pakaĵoj net/netip kaj debug/buildinfo estis aldonitaj al la norma biblioteko. Subteno por TLS 1.0 kaj 1.1 estas malebligita defaŭlte en klientkodo. La kripto/x509-modulo ĉesis prilabori atestojn subskribitajn per la hash SHA-1.
  • La postuloj por la medio en Linukso estas levitaj; por funkcii, vi nun devas havi Linuksan kernon de almenaŭ versio 2.6.32. En la venonta eldono, similaj ŝanĝoj estas atendataj por FreeBSD (subteno por la branĉo FreeBSD 11.x estos ĉesigita) kaj almenaŭ FreeBSD 12.2 estos postulata por funkcii.

fonto: opennet.ru

Aldoni komenton