Go ծրագրավորման լեզու 1.18 թողարկում

Ներկայացված է Go 1.18 ծրագրավորման լեզվի թողարկումը, որը մշակվում է Google-ի կողմից համայնքի մասնակցությամբ՝ որպես հիբրիդային լուծում, որը համատեղում է կոմպիլյատոր լեզուների բարձր կատարողականությունը սկրիպտային լեզուների այնպիսի առավելությունների հետ, ինչպիսիք են կոդ գրելու հեշտությունը։ , զարգացման արագություն և սխալների պաշտպանություն։ Ծրագրի կոդը բաշխվում է BSD լիցենզիայի ներքո:

Go-ի շարահյուսությունը հիմնված է C լեզվի ծանոթ տարրերի վրա՝ Python լեզվից որոշ փոխառություններով: Լեզուն բավականին հակիրճ է, բայց կոդը հեշտ է կարդալ և հասկանալ: Go կոդը կազմվում է առանձին երկուական գործարկվող ֆայլերի մեջ, որոնք աշխատում են առանց վիրտուալ մեքենայի օգտագործման (պրոֆիլավորումը, վրիպազերծման մոդուլները և գործարկման ժամանակի խնդիրների հայտնաբերման այլ ենթահամակարգերը ինտեգրված են որպես գործարկման ժամանակի բաղադրիչներ), ինչը թույլ է տալիս C ծրագրերի հետ համեմատելի կատարում:

Ծրագիրն ի սկզբանե մշակվել է բազմաշերտ ծրագրավորման և բազմաբնույթ համակարգերի վրա արդյունավետ շահագործման համար, ներառյալ օպերատորի մակարդակի միջոցներ տրամադրելով զուգահեռ հաշվարկների կազմակերպման և զուգահեռ կատարվող մեթոդների միջև փոխազդեցության համար: Լեզուն ապահովում է նաև ներկառուցված պաշտպանություն գերբաշխված հիշողության բլոկներից և ապահովում է աղբահանող սարք օգտագործելու հնարավորություն:

Նոր տարբերակն ավելացնում է աջակցություն ընդհանուր գործառույթների և տեսակների համար (գեներիկներ), որոնց օգնությամբ ծրագրավորողը կարող է սահմանել և օգտագործել գործառույթներ, որոնք նախատեսված են միանգամից մի քանի տեսակների հետ աշխատելու համար։ Հնարավոր է նաև օգտագործել ինտերֆեյսներ՝ ստեղծելու համակցված տեսակներ, որոնք ընդգրկում են տվյալների մի քանի տեսակներ: Ջեներիկների աջակցությունն իրականացվում է առանց խախտելու գոյություն ունեցող կոդի հետ հետընթաց համատեղելիությունը: // Sum set values, works for int64 and float64 type func SumIntsOrFloats[K comparable, V int64 | float64](m map[K]V) V { var s V-ի համար _, v := range m { s += v } return s } // Մեկ այլ տարբերակ ընդհանուր տիպի սահմանմամբ. տիպ Number interface { int64 | float64 } func SumNumbers[K համեմատելի, V Թիվ](m քարտեզ[K]V) V {var s V _ի համար, v := միջակայք m {s += v } վերադարձ s }

Այլ բարելավումներ.

  • Կոմունալ ծրագրերը 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

Добавить комментарий