Ներկայացված է Go 1.18 ծրագրավորման լեզվի թողարկումը, որը մշակվում է Google-ի կողմից համայնքի մասնակցությամբ՝ որպես հիբրիդային լուծում, որը համատեղում է կոմպիլյատոր լեզուների բարձր կատարողականությունը սկրիպտային լեզուների այնպիսի առավելությունների հետ, ինչպիսիք են կոդ գրելու հեշտությունը։ , զարգացման արագություն և սխալների պաշտպանություն։ Ծրագրի կոդը բաշխվում է BSD լիցենզիայի ներքո:
Go-ի շարահյուսությունը հիմնված է C լեզվի ծանոթ տարրերի վրա՝ Python լեզվից որոշ փոխառություններով: Լեզուն բավականին հակիրճ է, բայց կոդը հեշտ է կարդալ և հասկանալ: Go կոդը կազմվում է առանձին երկուական գործարկվող ֆայլերի մեջ, որոնք աշխատում են առանց վիրտուալ մեքենայի օգտագործման (պրոֆիլավորումը, վրիպազերծման մոդուլները և գործարկման ժամանակի խնդիրների հայտնաբերման այլ ենթահամակարգերը ինտեգրված են որպես գործարկման ժամանակի բաղադրիչներ), ինչը թույլ է տալիս C ծրագրերի հետ համեմատելի կատարում:
Ծրագիրն ի սկզբանե մշակվել է բազմաշերտ ծրագրավորման և բազմաբնույթ համակարգերի վրա արդյունավետ շահագործման համար, ներառյալ օպերատորի մակարդակի միջոցներ տրամադրելով զուգահեռ հաշվարկների կազմակերպման և զուգահեռ կատարվող մեթոդների միջև փոխազդեցության համար: Լեզուն ապահովում է նաև ներկառուցված պաշտպանություն գերբաշխված հիշողության բլոկներից և ապահովում է աղբահանող սարք օգտագործելու հնարավորություն:
Նոր տարբերակը ավելացնում է ընդհանուր ֆունկցիաների և տիպերի աջակցություն, որոնք թույլ են տալիս մշակողին սահմանել և օգտագործել ֆունկցիաներ, որոնք նախատեսված են միաժամանակ մի քանի տիպերի հետ աշխատելու համար։ Այն նաև հնարավորություն է տալիս օգտագործել ինտերֆեյսներ՝ մի քանի տվյալների տիպեր ընդգրկող համակցված տիպեր ստեղծելու համար։ Ընդհանուր ֆունկցիաների աջակցությունն իրականացվում է առանց առկա կոդի հետ հետադարձ համատեղելիության խախտման։ // Սահմանված արժեքների ամփոփում, int64 և float64 տիպերի համար աշխատելով func SumIntsOrFloats[K comparable, V int64 | float64](m map[K]V) V { var s V for _, v := range m { s += v } return s } // Մեկ այլ տարբերակ ընդհանուր տիպի սահմանմամբ՝ type Number interface { int64 | float64 } func SumNumbers[K comparable, V Number](m map[K]V) V { var s V for _, v := range m { s += v } return s }
Այլ բարելավումներ.
- Ստանդարտ գործիքակազմը ներառում է fuzzing կոդի թեստավորման համար նախատեսված օգտակար ծրագրեր: Fuzzing թեստավորման ընթացքում ստեղծվում է մուտքային տվյալների բոլոր հնարավոր պատահական համակցությունների հոսք, և դրանց մշակման ընթացքում գրանցվում են հնարավոր խափանումները: Եթե որևէ հաջորդականություն հանգեցնում է վթարի կամ չի համապատասխանում սպասվող արձագանքին, ապա նման վարքագիծը, ամենայն հավանականությամբ, վկայում է սխալի կամ խոցելիության մասին:
- Ավելացվել է բազմամոդուլային աշխատանքային տարածքների աջակցություն, որը թույլ է տալիս միաժամանակ հրամաններ գործարկել մի քանի մոդուլների վրա, ինչը թույլ է տալիս միաժամանակ կառուցել և գործարկել կոդ մի քանի մոդուլներում։
- Apple M1, ARM64 և PowerPC64 պրոցեսորների վրա հիմնված համակարգերի համար կատարվել են աշխատանքի մեծ օպտիմալացումներ: Հնարավորություն է տրվել ֆունկցիաներին արգումենտներ փոխանցելու և արդյունքներ վերադարձնելու համար գրանցամատյաններ օգտագործելու ունակությանը՝ ստեկի փոխարեն: Բարելավվել է կոմպիլյատորի կողմից ցիկլերի ներտողային բացումը: Կոմպիլյատորում տիպի ստուգումը ամբողջությամբ վերաձևավորվել է: Որոշ փորձարկումներում կոդի աշխատանքի տևողությունը նախորդ թողարկման համեմատ աճել է 20%-ով, բայց կոմպիլյացիան ինքնին դարձել է մոտ 15%-ով ավելի երկար:
- Գործողության ընթացքում ազատված հիշողությունը օպերացիոն համակարգ վերադարձնելու արդյունավետությունը բարձրացել է, և աղբահավաքի աշխատանքը բարելավվել է՝ դարձնելով դրա վարքագիծն ավելի կանխատեսելի։
- Ստանդարտ գրադարանին ավելացվել են նոր net/netip և debug/buildinfo փաթեթներ: TLS 1.0 և 1.1 աջակցությունը այժմ լռելյայնորեն անջատված է հաճախորդի կոդում: crypto/x509 մոդուլը այլևս չի մշակում SHA-1 հեշով ստորագրված վկայականները:
- Linux միջավայրի պահանջները բարձրացվել են, և այժմ աշխատանքի համար անհրաժեշտ է Linux միջուկի 2.6.32 կամ ավելի բարձր տարբերակը: Նմանատիպ փոփոխություններ են սպասվում նաև FreeBSD-ի համար հաջորդ թողարկման մեջ (FreeBSD 11.x ճյուղի աջակցությունը կդադարեցվի) և աշխատանքի համար անհրաժեշտ կլինի առնվազն FreeBSD 12.2 տարբերակը:
Source: opennet.ru
