Go программалоо тилинин чыгарылышы 1.18

Go 1.18 программалоо тилинин релизи сунушталды, ал Google тарабынан коомчулуктун катышуусу менен иштелип чыккан гибриддик чечим катары компиляцияланган тилдердин жогорку натыйжалуулугун скрипт тилдеринин код жазуунун жеңилдиги сыяктуу артыкчылыктары менен айкалыштырган. , иштеп чыгуу ылдамдыгы жана ката коргоо. Долбоордун коду BSD лицензиясы боюнча таратылат.

Go синтаксиси Python тилинен алынган кээ бир C тилинин тааныш элементтерине негизделген. Тили абдан кыска, бирок кодду окуу жана түшүнүү оңой. Go коду өзүнчө экилик аткарылуучу файлдарга компиляцияланган, алар виртуалдык машинаны колдонбостон (профильдөө, мүчүлүштүктөрдү оңдоо модулдары жана башка иштөө убактысынын көйгөйлөрүн аныктоочу подсистемалары иштөө убактысынын компоненттери катары бириктирилген), бул C программаларына салыштырууга болот.

Долбоор адегенде көп агымдуу программалоону жана көп ядролуу системаларда эффективдүү иштөөнү, анын ичинде параллелдүү эсептөөлөрдү жана параллелдүү аткарылуучу методдордун ортосундагы өз ара аракеттенүүнү уюштуруу үчүн оператор деңгээлиндеги каражаттарды камсыз кылуу менен иштелип чыккан. Тил ошондой эле ашыкча бөлүнгөн эстутум блокторуна каршы камтылган коргоону камсыз кылат жана таштанды жыйгычты колдонуу мүмкүнчүлүгүн берет.

Жаңы версия жалпы функцияларды жана типтерди (генериктерди) колдоону кошот, анын жардамы менен иштеп чыгуучу бир эле учурда бир нече түр менен иштөөгө арналган функцияларды аныктап, колдоно алат. Бир нече маалымат түрлөрүн камтыган бириктирилген типтерди түзүү үчүн интерфейстерди колдонсо болот. Генериктерди колдоо учурдагы код менен артка шайкештикти бузбастан ишке ашырылат. // Сумма топтому маанилери, int64 жана float64 түрлөрү үчүн иштейт func SumIntsOrFloats[K comparable, V int64 | float64](m map[K]V) V { var s V for _, v := диапазон m { s += v } return s } // Жалпы типтин аныктамасы менен башка вариант: type Number интерфейси { int64 | float64 } func SumNumbers[K салыштырылат, V Сан](m карта[K]V) V { var s V for _, v := диапазон m { s += v } return s }

Башка жакшыртуулар:

  • Кодду тестирлөө үчүн утилиталар стандарттык инструменттер топтомуна бириктирилген. Түшүндүрмө тестирлөө учурунда кириш маалыматтарынын бардык мүмкүн болгон кокус айкалыштарынын агымы түзүлөт жана аларды иштетүүдө мүмкүн болгон мүчүлүштүктөр жазылат. Эгер ырааттуулук бузулуп калса же күтүлгөн жоопко дал келбесе, анда бул жүрүм-турум катаны же аялуулукту көрсөтөт.
  • Көп модулдук иш мейкиндиктери үчүн кошумча колдоо, бир эле учурда бир нече модулдарда буйруктарды аткарууга мүмкүндүк берет, бир эле учурда бир нече модулдарда кодду түзүүгө жана иштетүүгө мүмкүндүк берет.
  • 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

Комментарий кошуу