Ferzje fan 'e Go-programmeartaal 1.18

De frijlitting fan 'e Go 1.18 programmeartaal wurdt presintearre, dy't wurdt ûntwikkele troch Google mei de partisipaasje fan' e mienskip as in hybride oplossing dy't de hege prestaasjes fan kompilearre talen kombinearret mei sokke foardielen fan skripttalen as gemak fan skriuwen fan koade , snelheid fan ûntwikkeling en flaterbeskerming. De projektkoade wurdt ferspraat ûnder de BSD-lisinsje.

De syntaksis fan Go is basearre op bekende eleminten fan 'e C-taal mei guon lienen út' e Python-taal. De taal is frij beknopt, mar de koade is maklik te lêzen en te begripen. Go-koade is kompilearre yn stand-alone binêre útfierbere bestannen dy't natuerlik rinne sûnder in firtuele masine te brûken (profilearjen, debuggen modules, en oare subsystemen foar deteksje fan runtimeproblemen binne yntegreare as runtime-komponinten), wêrtroch prestaasjes fergelykber binne mei C-programma's.

It projekt is yn earste ynstânsje ûntwikkele mei it each op multi-threaded programmearring en effisjinte operaasje op multi-core systemen, ynklusyf it jaan fan operator-nivo middels foar it organisearjen fan parallel computing en ynteraksje tusken parallel útfierd metoaden. De taal biedt ek ynboude beskerming tsjin oerallokearre ûnthâldblokken en jout de mooglikheid om in garbage collector te brûken.

De nije ferzje foeget stipe ta foar generike funksjes en typen (generika), mei help wêrfan in ûntwikkelder funksjes kinne definiearje en brûke dy't ûntworpen binne om te wurkjen mei ferskate soarten tagelyk. It is ek mooglik om ynterfaces te brûken om kombineare typen te meitsjen dy't meardere gegevenstypen omfetsje. Stipe foar generika wurdt ymplementearre sûnder efterútkompatibiliteit te brekken mei besteande koade. // Som set wearden, wurket foar int64 en float64 typen func SumIntsOrFloats[K fergelykber, V int64 | float64](m map[K]V) V { var s V foar _, v := berik m { s += v } return s } // In oare opsje mei in generike type definysje: type Number interface { int64 | float64 } func SumNumbers[K fergelykber, V Number](m map[K]V) V { var s V foar _, v := berik m { s += v } return s }

Oare ferbetterings:

  • Utilities foar testen fan fuzzing-koade binne yntegreare yn 'e standert toolkit. Tidens fuzzing-testen wurdt in stream fan alle mooglike willekeurige kombinaasjes fan ynfiergegevens generearre en mooglike mislearrings tidens har ferwurking wurde opnommen. As in folchoarder crasht of net oerienkomt mei it ferwachte antwurd, dan is dit gedrach heech wierskynlik in brek of kwetsberens oan te jaan.
  • Stipe tafoege foar multi-modulêre wurkromten, wêrtroch jo kommando's op meardere modules tagelyk kinne útfiere, wêrtroch jo tagelyk koade kinne bouwe en útfiere yn meardere modules.
  • Wichtige prestaasjesoptimalisaasjes binne makke foar systemen basearre op Apple M1-, ARM64- en PowerPC64-prosessoren. Aktivearre de mooglikheid om registers te brûken ynstee fan de stapel om arguminten troch te jaan oan funksjes en it resultaat werom te jaan. Ferbettere ynline ûntrollen fan loops troch de kompilator. Typekontrôle yn 'e kompilator is folslein opnij ûntwurpen. Guon tests litte in ferheging fan 20% yn koadeprestaasjes sjen yn ferliking mei de foarige release, mar kompilaasje sels nimt sawat 15% langer.
  • Yn runtime is de effisjinsje fan it werombringen fan befrijd ûnthâld nei it bestjoeringssysteem ferhege en de wurking fan 'e garbage collector is ferbettere, wêrfan it gedrach mear foarsisber wurden is.
  • Nije pakketten net/netip en debug/buildinfo binne tafoege oan de standertbibleteek. Stipe foar TLS 1.0 en 1.1 is standert útskeakele yn kliïntkoade. De crypto/x509-module is stoppe mei it ferwurkjen fan sertifikaten ûndertekene mei de SHA-1-hash.
  • De easken foar it miljeu yn Linux binne ferhege; om te wurkjen moatte jo no in Linux-kernel hawwe fan op syn minst ferzje 2.6.32. Yn 'e folgjende release wurde ferlykbere feroarings ferwachte foar FreeBSD (stipe foar de FreeBSD 11.x-tûke sil stopset wurde) en op syn minst FreeBSD 12.2 sil ferplicht wurde om te wurkjen.

Boarne: opennet.ru

Add a comment