Go proqramlaşdırma dili buraxılışı 1.16

Google tərəfindən tərtib edilmiş dillərin yüksək performansını skript dillərinin asanlığı kimi üstünlükləri ilə birləşdirən hibrid həll kimi ictimaiyyətin iştirakı ilə hazırlanmış Go 1.16 proqramlaşdırma dilinin buraxılışı təqdim olunur. yazı kodu, sürətli inkişaf və səhvlərdən qorunma. Layihə kodu BSD lisenziyası altında paylanır.

Go sintaksisi Python dilindən bəzi borclar ilə C dilinin tanış elementlərinə əsaslanır. Dil olduqca yığcamdır, lakin kodu oxumaq və başa düşmək asandır. Go kodu virtual maşından istifadə etmədən yerli olaraq işləyən ayrı ikili icra edilə bilən fayllara yığılır (profilləşdirmə, sazlama və digər iş zamanı problemlərin aşkarlanması alt sistemləri iş vaxtı komponentləri kimi birləşdirilmişdir), bu da C proqramları ilə müqayisə edilə bilən performansa nail olmağa imkan verir.

Layihə ilkin olaraq çox yivli proqramlaşdırma və çoxnüvəli sistemlərdə səmərəli əməliyyat, o cümlədən paralel hesablamaların təşkili və paralel icra edilən metodlar arasında qarşılıqlı əlaqə üçün operator səviyyəsində həyata keçirilən vasitələrin təmin edilməsi ilə hazırlanmışdır. Dil ayrıca ayrılmış yaddaş bloklarının həddindən artıq yüklənməsinə qarşı daxili qoruma təmin edir və zibil kollektorundan istifadə etmək imkanı verir.

Go 1.16 buraxılışında təqdim edilən əsas yeniliklər:

  • Proqrama ixtiyari faylları və qovluqları daxil etmək üçün alətlər təqdim edən yerləşdirmə paketi əlavə edilmişdir. Kompilyasiya zamanı daxil ediləcək faylları təyin etmək üçün yeni "//go:embed" direktivi verilir. Məsələn, kodda "//go:embed test.txt" şərhini qeyd etmək və "var f embed.FS" dəyişənini izləmə kimi elan etmək test.txt faylının daxil edilməsi və mümkünlüyü ilə nəticələnəcək. ona "f" deskriptoru vasitəsilə daxil olmaq. Eynilə, iş üçün zəruri olan müəyyən bir növün qaynaqları və ya fərdi dəyərləri olan faylları yerləşdirə bilərsiniz, məsələn, version.txt faylından "s" sətir dəyişənini əldə etmək üçün aşağıdakıları təyin edə bilərsiniz: import _ "embed" // go:embed version.txt var s string print(s)
  • Defolt indi GOPATH əsaslı asılılıq idarəetməsini əvəz edən inteqrasiya olunmuş versiya dəstəyi ilə yeni modul sisteminin istifadəsini tələb edir. GO111MODULE mühit dəyişəni indi defolt olaraq "on" vəziyyətinə qoyulub və modul rejimi işçi və ya əsas kataloqda go.mod faylının mövcudluğundan asılı olmayaraq istifadə olunur. Yeni rejimdə "get build" və "get test" kimi qurmaq əmrləri go.mod və go.sum məzmununu dəyişdirmir, "go install" isə versiya ilə müəyyən edilmiş arqumentləri emal edir ("go install example.com/"[e-poçt qorunur]"). Köhnə davranışı qaytarmaq üçün GO111MODULE-ni "avtomatik"ə dəyişin. Qeyd olunur ki, tərtibatçıların 96%-i artıq yeni modul sisteminə keçib.
  • Bağlayıcı optimallaşdırılıb. Böyük layihələr üçün keçid indi 20-25% daha sürətlidir və 5-15% daha az yaddaş tələb edir.
  • Kompilyator "for" döngələri, metod dəyərləri və "tip keçidi" konstruksiyalarının qısaldılmış tərifi ilə daxili funksiyanın genişləndirilməsi üçün dəstək əlavə edir.
  • Yeni Apple M1 ARM çipi ilə təchiz edilmiş Apple sistemləri üçün əlavə dəstək. 64-bit ARM-də NetBSD və MIPS64 sistemlərində OpenBSD dəstəyi ilə netbsd/arm64 və openbsd/mips64 portları əlavə edildi. Linux/riscv64 portuna cgo və "-buildmode=pie" rejimi üçün dəstək əlavə edildi.
  • X87 kompilyasiya rejimi üçün dəstək dayandırıldı (GO386=387). SSE2 təlimatları olmayan prosessorlar üçün dəstək indi "GO386=softfloat" proqram rejimi vasitəsilə mümkündür.

Əlavə olaraq, null təhlükəsizlik rejiminin stabilləşdirildiyi Dart 2.12 dilinin beta buraxılışının sınaqdan keçirilməsinə başlandığını qeyd edə bilərik ki, bu da dəyəri müəyyən edilməmiş və Null olaraq təyin edilmiş dəyişənlərdən istifadə cəhdləri nəticəsində yaranan qəzaların qarşısını alacaq. Rejim, açıq şəkildə null olaraq təyin edilmədikcə dəyişənlərin qeyri-müəyyən dəyərlərə malik ola bilməyəcəyini nəzərdə tutur. Rejim ciddi şəkildə dəyişənlərin növlərini nəzərə alır ki, bu da kompilyatora əlavə optimallaşdırmalar tətbiq etməyə imkan verir. Növ uyğunluğu kompilyasiya zamanı yoxlanılır, məsələn, "int" kimi qeyri-müəyyən vəziyyəti nəzərdə tutmayan tipli dəyişənə "Null" dəyərini təyin etməyə cəhd etsəniz, xəta göstərilir.

Mənbə: opennet.ru

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