Go dili on yıldır kuruldu, Go2 kullanıma hazır

Yazar | Chai Shushan

Baş Editör | Guo Rui

Üretildi | CSDN (ID: CSDNnews)

21. yüzyılın ilk on yılında, bilgisayarlar Çin anakarasında yavaş yavaş popüler hale geldi ve üniversitelerde bilgisayarla ilgili ana dallar giderek popüler hale geldi. O zamanlar, okul ağırlıklı olarak C / C ++ ve Java dil öğrenimine odaklandı ve bu dillerin çoğu 1990'larda veya daha önce doğdu. Bu nedenle, bilgisayar alanındaki teorik bilgi veya programlama dili, Tanrı'nın bir bilgisayar olarak yaratmasının bir ürünü gibi görünüyor. İlgili branşların öğrencileri yalnızca bu sonuçlara bakabilir.

Go dili, yeni bir endüstriyel programlama dilleri dalgasının patlamak üzere olduğu 21. yüzyılda doğdu. 2010 civarında, derlenmiş diller Rust, Kotlin ve Switft doğdu ve Dart ve TypeScript gibi endüstriyel diller ön uçta doğdu. En son V dili Go ve Rust'un omuzlarında bile yenilik yapmaya çalıştı. Ve bu değişimler çevremizde gerçekleşiyor, Çinli bilgisayar meraklılarının öğrenme sürecinde tarihin gelişimine tanık olmalarına ve hatta buna katılma fırsatına sahip olmalarına izin veriyor.

2019, CSDN'nin 20. yıl dönümü ve Go dilinin piyasaya sürülmesinin 10. yıldönümü. CSDN platformunun sağladığı fırsat sayesinde, yazar sizinle Çin Go dili topluluğunun son on yıldaki bazı hikayelerini paylaşabilir.

Go'nun doğuşu

Go dili ilk olarak 2007 yılında Robert Griesemer, Ken Thompson ve Google'dan Rob Pike tarafından tasarlanmış ve icat edilmiştir. Tasarımının orijinal baskın gücü, süper karmaşık C ++ 11 özelliklerinin lanse edilen raporuna duyulan küçümsemeden geldi ve nihai hedef, ağda ve çok çekirdekli çağda C dilini tasarlamaktır. 2008 ortasına kadar, dilin özellik tasarımının çoğu tamamlandı ve derleyicinin uygulanması ve operasyon başladı.Bu yıl yaklaşık olarak Russ Cox ana geliştirici olarak katıldı. 2009'a gelindiğinde, Go dili kademeli olarak sabitlendi. Aynı yılın Eylül ayında, Go dili resmi olarak yayınlandı ve kod açık kaynaklı hale getirildi.

Yukarıdakiler, "Go Language Advanced Programming" kitabındaki ilk bölümün ilk bölümüdür. Go dili henüz açık kaynaklı olduğunda, derleme hızından herkes çok etkilenmişti: Derleme saniyeler içinde tamamlandı ve neredeyse bir komut dosyası gibi hemen derlenip yürütülebilirdi. Aynı zamanda, Go dilinin örtük arayüzü, derlenmiş bir dile ördek türü yeteneği verir.İlk defa, orijinal C ++ sanal tablo vtab'ın da dinamik olarak oluşturulabileceğini fark ettim! Herkesin tartışmaya en çok istekli olduğu özelliklere gelince, aslında bu Go dilinin yeni icadının temel taşı değildir. 1980'ler ve 1990'ların başlarında, birçok dil CSP teorisini programlama dillerine tanıtmaya başladı (Rob Pike, aralarında sağlam bir uygulamadır) Tarafından). Sadece erken CSP uygulamasının dili ana akım geliştirme alanına girmedi ve bu da herkesin bu eşzamanlılık moduna aşina olmamasına neden oldu.

Dil özelliklerinin yeniliğine ek olarak, Go dili ayrıca bir dizi derleme ve oluşturma araçlarıyla birlikte gelir.Aynı zamanda, kompakt standart kitaplık, Web programlamanın tam bir temel yapısını taşır.Go dilinde yüksek eşzamanlı erişimi destekleyen bir Web hizmetini kolayca yazabiliriz. .

İnternet çağında C dili olarak Go dili nihayet ana programlama alanına girmiştir.

On yıl boyunca dil konuşun

Go 2007'de tasarlandı ve resmi olarak 2009'da duyuruldu ve o zamandan bu yana sadece on yıl geçti. Geçtiğimiz on yılda, Go dili kararlılığıyla tanınıyor ve Go1.0 kodu 2019'da hala değiştirilmeden derlenebilir ve çalıştırılabilir. Ancak dilin istikrarını korurken, Go dili yavaş yavaş temelini sağlamlaştırıyor ve on yıldır mükemmelliğin sınırına yaklaşıyor. Son on yılda Go dilinde yaşanan değişikliklere bir göz atalım.

Arayüz değişiklikleri

Birincisi, arayüz değişikliklerine bakmaktır. İlk kez 2009'da açık kaynaklı olduğu zamandı, bu Go dilinin antik çağı olduğu söylenebilir. Go dilinin ana sayfası aşağıdaki gibidir:

O dönemin gophers, kodu indirmek için (Git değil) hg aracını kullandı ve Go kodu Google Code'da (GitHub'da değil) barındırılıyordu. Kodun geliştirilmesiyle hg, Gopher'in vizyonundan yavaş yavaş kayboldu, Google Code web sitesi uzun süredir kapatıldı ve Go1'den önceki eski Go kodu yavaş yavaş bozulmaya başladı.

Ana sayfanın merkezi, Go dilinin ilk sloganıdır: Go dili, anlamlı, eşzamanlı bir programlama dilidir ve özlüdür. Aynı zamanda bir "Merhaba dünya" örneği verilir (buradaki "dünya" nın Japonca olduğunu unutmayın).

Sonra sağ üst köşe, yeni başlayanlar için bir cennettir: ilk önce kurulum ortamı, sonra belki de üç günlük erken eğitim ve üçüncüsü standart kitaplığın kullanımıdır. Sağ üst köşedeki resim, yine Youtube'da bulunması gereken Russ Cox'un bir videosudur.

Sol üst köşe, Go gerçek savaşının klasik belgesidir. Ek olarak, SSS, dil özellikleri ve bellek modeli çok önemli çekirdek sıcaklıklardır. Sol alt köşede cmd gibi belgelere bağlantılar bulunmakta ve alt sayfaların içerikleri değişmemelidir.

Daha sonra 2012'de Go1'in ilk resmi sürümü piyasaya sürülecek.Go1'den önce dil, standart kitaplık ve godoc çok geliştirildi. Go1 stili sayfa efektleri aşağıdaki gibidir:

Yeni sayfa ilk çıktığında gözlerim aydınlandı, bu uzun zamandır var olan sayfa düzeni. Ama sadece yazar ve ben değil, Go dili yetkilileri bile yavaş yavaş Çince sayfalardan biraz sıkılıyor. Bu nedenle, 2018'den itibaren Go dili yeni logo ve web sitesi yeniden tasarımına başladı.

Aşağıda, Go dilinin yeni logosu yer almaktadır:

2019, Go dilinin gelişimi için son derece önemli bir yıl. Go 1.13, bu yıl Ağustos ayında piyasaya sürülecek ve bu sürüm resmi olarak Go dili gramerinin gelişimini yeniden başlatacak ve Go2'ye doğru ilerleyecektir. Yeni web sitesi, Go1.13'ün resmi çıkışından önce Temmuz ayında yayına girdi:

Baştaki düğme tarzı menü, döşemeli bir stile dönüştü ve daha da uzun hale geldi. Aynı zamanda sayfanın rengi, rengin yeni Logo ile tutarlı olması için ayarlandı. Sayfanın düzeni de ayarlandı ve indirmenin sol ve sağ sütunları değiştirildi. Aynı zamanda, hamsterin başı yana doğru eğildiğinde, servikal spondilozun tekrarladığı tahmin edilmektedir.

Genel olarak, Go dili resmi web sitesinin ana sayfası üç aşamadan geçmiştir: Go1'den önce, Go1 (1.0 1.10) ve Go1'den sonra (veya Go2'den önce), 3 stil sayfaya karşılık gelir. Yeni düzen, önümüzdeki on yıl içinde Go2'nin ana sayfası olabilir.

Dilbilgisi değişiklikleri

Go dili 2009'da doğmuş olmasına rağmen, Go1'in ilk resmi sürümü 2012'ye kadar piyasaya sürülmedi. Aslında Go dili, Go1'in doğumundan önce yeterince kararlıydı.Çin'deki Qiniu Cloud, Go1'den önce güçlü bir şekilde Go dil gelişimine dönmeye başladı ve Go dil gelişimini yaygın olarak benimseyen ilk yerli İnternet şirketi oldu. Go1'in amacı, gramer ve standart kitaplığın karanlık köşelerini çözmek ve önümüzdeki 10 yıl için sağlam bir temel oluşturmaktır.

Mevcut sonuçlara bakıldığında, Go1 şüphesiz harika sonuçlar elde etti. Go1 çağındaki kod, değişiklik yapılmadan en son Go dili araçlarıyla derlenebilir ve oluşturulabilir (CGO veya assembly dili parçaları dahil değildir, çünkü bu uzantı araçları Go1'in taahhüt kapsamı). Ancak, Go1'den sonra hala bazı gramer güncellemeleri var. Go1.10'dan önceki Go1 döneminde gramer ve standart kitaplıkta üç büyük değişiklik var:

İlk büyük sözdizimi değişikliği, dilim sözdizimine kapasite kontrolü ekleyen, 2012'de yayınlanan Go1.2'de oldu. , Bu, farklı dilimlerin yanlışlıkla aynı temel diziye sahip diğer dilimlerin belleğine erişmesini engelleyebilir.

İkinci büyük değişiklik, 2016'da yayınlanan Go1.7 standart kitaplığında içerik paketinin tanıtılmasıdır. Bağlam paketi, Go dilinin eşzamanlı Go programlamasının resmi sonucudur. Veri, zaman aşımı ve tek bir isteği işleyen birden çok Goroutin ve istek alanı arasındaki çıkış gibi işlemleri basitleştirmek için kullanılır. Bağlam paketinin piyasaya sürülmesinden sonra, topluluk tarafından hızla özümsenmiş ve kullanılmıştır. Örneğin, gRPC ve birçok web çerçevesi, Goroutine'in yaşam döngüsünü kontrol etmek için bağlamı kullanır.

Üçüncü büyük gramer değişikliği, 2017'de yayınlanan ve tür takma adlarının özelliğini getiren Go1.9'dur: T1 = T2 yazın. Tip diğer adı T1, T2'den = sembolüne kadar tanımlanır; burada T1 ve T2 tamamen aynı türdür. Tür takma adlarının kullanılmasının ana nedeni, bağlam uzantısı kitaplığının Go1.7'deki standart kitaplığa taşınmasının neden olduğu sorunları çözmektir. Context.Context türü sırasıyla standart kitaplıkta ve genişletilmiş kitaplıkta tanımlandığından, farklı paketlerdeki türler uyumsuzdur. GRPC gibi birçok açık kaynak kitaplığı, genişletilmiş kitaplıkta en başından beri context.Context türünü kullanır, bu da Go1.7 standart kitaplığındaki context.Context türü ile uyumsuzluğa neden olur. Bu sorun nihayet tür takma adlarıyla çözülür: genişletilmiş kitaplıktaki bağlam. Bağlam türü, bağlamın takma adıdır. Standart kitaplıktaki bağlam, böylece standart kitaplıkla uyumluluk sağlanır.

Ek olarak, gramer ayrıntılarında bazı değişiklikler var: Örneğin, Go1.4 for döngüsü sözdizimini geliştirdi ve Go1.8 aynı bellek düzenine sahip yapılar üzerindeki zorunlu dönüşüm kısıtlamalarını çıkardı. Okuyucular, yeni ihtiyaçlarına göre ilgili yayın günlüğünün belgelerini görüntüleyebilir.

Çalışma zamanı değişiklikleri

Çalışma zamanı bölümündeki en büyük değişiklik, dinamik yığın bölümüdür. Go1.2'den önce, Go dili dinamik yığın genişletmesi elde etmek için bölümlere ayrılmış bir yığın kullanıyordu. Bununla birlikte, bölümlenmiş dinamik yığının bir performans sorunu vardır, çünkü yığın belleği sürekli değildir ve bu, CPU önbelleği isabet oranının düşmesine neden olur ve bu da sıcak işlev çağrılarının performansını etkiler. Dolayısıyla, Go1.3'ten başlayarak, sürekli bir dinamik yığın olmalıdır. Sürekli dinamik yığın, CPU önbelleği isabet oranı problemini kısmen hafifletse de (CPU önbelleğinin başarısız olmasına neden olabilecek yığın değiştirme sorunu hala mevcuttur), aynı zamanda daha büyük bir uygulama sorununu da beraberinde getirir: yığındaki değişkenin adresi değişebilir. Yığın hareket ettikçe değişir. Bu, doğrudan CGO programlamasında, Go dili bellek nesnelerinin kullanım için doğrudan C dili alanına aktarılamayacağı gerçeğine yol açtı.Bu nedenle, Go dili CGO sorunları için resmi olarak karmaşık bellek kullanım özelliklerini formüle etti.

Genel olarak, dinamik yığının nasıl uygulanacağı, nasıl seçileceği sorusudur, çünkü gümüş kurşun, balık ve ayı pençesi yoktur, mevcut seçim, saf Go programlarının performansını ilk sağlayan seçenektir.

GC performans iyileştirmesi

Go dili, GC olarak anılan otomatik çöp toplama (Çöp Toplama) içeren bir dildir (bunun büyük harf GC olduğunu, küçük harf gc'nin Go dil derleyicisini temsil ettiğini unutmayın). Go dilinin doğuşundan bu yana, GC'nin kurtarma performansı sıcak bir ilgi konusu olmuştur.

Go dilinin GC özelliğini desteklemesinin nedeni, Go dilindeki her değişkenin tam meta bilgiye sahip olmasıdır, bu sayede tüm işaretçilerin yaşam döngüsünü takip etmek kolaydır. Go1.4'ten önce, GC hafızayı geri kazanmak için dünyayı durdurmak için STW'yi kullandı ve duraklama süresi genellikle birkaç saniye, hatta onlarca saniyeydi. Bu nedenle, ilk toplulukta GC işlemlerinden nasıl kaçınılacağı veya azaltılacağı hakkında birçok teknik makale vardır.

İlk GC performans değişikliği Go 1.5 döneminde meydana geldi. Şu anda, Go dilinin çalışma zamanı ve araç zinciri, GC kodunun yeniden yapılandırılmasını ve optimizasyonunu kolaylaştıran C dilinden Go diline uygulandı. Go1.5, belleği ilk kez geri kazanmak için paralel ve artımlı yöntemler kullanır ve bu da GC süresini yüzlerce milisaniyeye indirir. Aşağıdaki şekil, resmi web sitesinde "Go GC: Latency Problem Solved" başlıklı makalede verilen verilerdir:

Go1.5 eşzamanlılığı ve artan iyileştirmeler açıktır, ancak en önemli şey gelecekteki iyileştirmelerin temelini atmaktır. Go1.5'ten sonraki Go1.6 sürümünde, GC performansı nihayet tamamen iyileştirilmeye başlandı: Go1.6.0'ın duraklama süresi onlarca milisaniyeye, Go1.6.3'e, on milisaniyenin altına düşürüldü. Go1.6 ile elde edilen sonuçlar Go1.8'in resmi günlüklerinde onaylanmıştır: Go dilinin GC değeri genellikle 100 milisaniyeden azdır, hatta 10 milisaniyeden azdır!

Elbette, Go'nun GC optimizasyonunun hızı durmayacak, ancak Go1.5 ve Go1.6'nın heyecan verici sonuçlarını yeniden üretmenin daha zor olduğu tahmin ediliyor. Go1.8'den sonraki birçok sürümde, resmi yayın günlüğünde nadiren nicel GC performansı iyileştirme verileri görülmüştür.

Dil önyükleme sürecine gidin

Go dili ilk uygulandığında, Thompson'ın C dili derlemesine ve dönüşümüne dayandığı ve ilk çıktının (halka açılmadan önce) C dili kodu olduğu söyleniyor. Açık kaynaktan sonra ve Go1.4'ten önce, Go dilinin derleyicisi ve çalışma zamanı C dilinde uygulanmıştır. O kadar erken ki, C dilinde bir Go dili işlevini uygulayabilirsiniz! C dili araç zincirine olan güçlü bağımlılık nedeniyle, Go1.4'ten önceki Go dili hiçbir şekilde önyüklenemez.

Go1.4'ten başlayarak, Go dilinin çalışma zamanı Go dilinde uygulanmaktadır. Spesifik uygulama yöntemi, Go ekibinin rsc'sinin ilk olarak basitleştirilmiş bir C kodunu Go koduna dönüştürme aracını uygulamış olmasıdır.Bu araç esas olarak C dilinde uygulanan Go dili çalışma zamanını Go dil koduna dönüştürmek için kullanılır. Kod otomatik olarak dönüştürüldüğü için daha güvenilir Go kodu elde edebilirsiniz. Çalışma zamanı Go diline dönüştürüldükten sonra, ilk fayda, GC'nin her bir bellek işaretçisinin durumunu doğru bir şekilde bilmesi (çünkü Go dili değişkenlerinin ayrıntılı tür bilgisine sahip olmasıdır), bu da Go1.5 yeniden yazma GC'yi sağlar Çalışma zamanının temelleri.

Daha sonra Go1.5'te, derleyici Go dilinde de uygulandı. Ancak kod performansına dönüşümde belirli bir düşüş var. Pek çok programın derleme süresi onlarca saniye kadar yavaştır.Bu süre zarfında Go1.5'in derleme hızının yavaş olduğuna dair birçok şikayet internette ortaya çıktı. Go1.5 derleyiciyi yazmak için Go dilini kullanırken, hem araç zinciri hem de hedef kod üzerinde birçok yeniden düzenleme çalışması yapmıştır. Go1.5'ten bu yana, çapraz derleme, GOOS = linux GOARCH = amd64 go build komutu herhangi bir Go dili ortamından Linux / amd64 hedef kodu oluşturabildiği sürece çok basit hale geldi.

Go dili, Go1.4'ten Go1.5'e iki evrim sürümünden geçti ve sonunda önyükleme desteğini gerçekleştirdi. Elbette, önyükleme felsefi bir soruyu da gündeme getiriyor: Go dil derleyicisinin bir arka kapısı var mı? Bir arka kapı varsa, derleyici tarafından derlenen Go programının bir arka kapısı var mı? Bir arka kapı derleyicisi tarafından derlenen Go derleyici programının bir arka kapısı var mı?

Başarısız deneme

Go dilinin geliştirilmesi tüm başarılı durumlar değildir ve bazı başarısız girişimler de vardır. Başarısızlık, başarının anasıdır, bu girişimler sonunda başarısızlıkla sonuçlansa da, girişimler sırasında biriken deneyim, yeni bir yöne itici güç sağlamıştır.

Go dili sabitleri, sayısal değerler ve dizeler gibi yalnızca birkaç türü desteklediğinden, ilk topluluk, dilimler için salt okunur türlerin eklenmesini istiyordu. Bu nedenle, rsc bu özelliği ilk olarak geliştirme dalında deneysel olarak uyguladı, ancak daha sonra sonraki uygulamada Go programlama özelliğiyle çelişen birçok sorun buldu, böylece kısa bir denemeden sonra salt okunur dilim özelliği terk edildi. Elbette, başlatıldıktan sonra değiştirilemeyen değişken özellik hala herkesin beklediği bir özelliktir (diğer dillerin son özelliğine benzer) ve umarım gelecekte Go2'de geliştirilebilir.

Diğer bir girişim, erken satıcı tabanlı sürüm yönetimidir. Satıcı ve dahili özellikler ilk kez Go1.5'te tanıtıldı.Satıcı, harici üçüncü taraf paketlerini paketlemek için kullanılır ve dahili kullanıcılar dahili paketleri korur. Daha sonra, satıcı, açık kaynak topluluğundaki çeşitli sürüm yönetimi araçları tarafından kötüye kullanıldı ve Go dil kodunun genellikle inşa edilemeyen bazı garip sorunlara sahip olmasına neden oldu. Satıcının kötüye kullanılması, nodejs topluluğundaki node_modules dizini iç içe geçme sorununa benzer olan satıcı iç içe geçme sorununa yol açar. Aynı paketin farklı sürümleri sonunda iç içe geçmiş satıcıda görünecektir. Bu son pipet sonunda satıcı mekanizmasını tamamen bozdu, böylece resmi Go dili ekibi sürüm yönetimi sorununu tamamen çözmek için sıfırdan modül özellikleri geliştirdi. Go1.13'ün modüler özellikleri daha olumlu hale geldiğinde, GOPATH ve satıcı gibi mekanizmalar tamamen ortadan kalkacaktır.

Go dili açık kaynaklı bir projedir, içe aktarılan tüm paketlerin kaynak kodu olmalıdır. Bazı sözde ticari kullanıcılar, ticari kodun büyük ölçüde korunabilmesi için, ikili paketlerin içe aktarılmasını desteklemek için Go dilini çağırdılar. Topluluğun ihtiyaçlarına yanıt olarak Go1.7, ikili paketleri içe aktarma işlevini ekler. Ancak daha dramatik olan şey, Go dili ithalatı destekledikten sonra pek çok kişinin ikili paketi kullanmaması ve ikili paketi isteyen kişilerin bile kullanmamasıdır (bu nedenle birçok topluluğun sesi gerçek ihtiyaçları yansıtmayabilir). Hiç kimsenin kullanmadığı bir ikili paket özelliği için, Go dil ekibinin kodu korumak için önemli miktarda insan gücü yatırması gerekir. Bu istenmeyen özelliği azaltmak için Go1.13, ikili paketin özelliğini tamamen kapatacak ve gerçek ihtiyaçları çözmek için hafifçe yeniden yükleyecektir. Elbette Go dili, statik kitaplıklar, paylaşılan kitaplıklar ve eklentiler oluşturma özelliklerini zaten desteklemektedir ve bu mekanizmalar, kodu korumak için de kullanılabilir.

Bazı başarısız girişimler olabilir: Örneğin, Go dilinin babalarından biri olan Robert Griesemer, hata işlemeyi basitleştirmek için kısa süre önce yerleşik bir deneme işlevi sundu ve reddedildi. Başarısız girişim iyi bir fenomendir, bu Go dilinin bazı yeni gelişen alanlarda hala denediği anlamına gelir - Go dili hala aktif bir dönemdedir.

Go2'nin geliştirme yönü

Go dili başlangıçta kısa ve özlü bir dildi. Yıllar süren geliştirmeden sonra Go1 istikrar sınırına yaklaştı. Resmi web sitesinin Talk sayfasındaki raporların sayısına bakıldığında, 2015'ten önce çeşitli raporların zirvesi olduğunu görebilirsiniz. 2016'dan 2017'ye kadar hisse sayısı keskin bir şekilde düşmeye başladı. 2018'den bu yana, yeni raporlar dahil edilmedi. Bunun nedeni Go1. Dil özelliklerinden defalarca bahsedilmiştir. Aynı şey Go dili meraklılarının ilk dalgası için de geçerlidir.Go dilinin keşfedilecek ve öğrenilecek yeni özellikleri yoktur veya yeterince havalı değildir. Resmi Go dil ekibinin de aynı şekilde hissettiğini düşünüyoruz, bu nedenle 2018'den başlayarak önce modülerlik sorununu çözeceğiz ve ardından Go2'nin yeni özelliklerini resmi olarak tartışacağız ve Go1.13'ten dilin gelişimini yeniden başlatacağız.

Modülerlik, yapı yönetimi ile ilgilidir. Go dili henüz doğduğunda, aslında bir Makefile hedefi aracılığıyla oluşturulmuştu. Daha sonra yetkili, inşa sürecini büyük ölçüde basitleştiren sıfır yapılandırma dosyalarının oluşturulmasını gerçekleştiren inşa etmek için go build komutunu sağlar. Daha sonra, hg veya git depo kodunun internetten otomatik olarak indirilmesini destekleyen ve aynı zamanda standart olmayan kütüphane kodunu önlemek için GOPATH ortam değişkenini tanıtan go get komutu ortaya çıktı. O zamandan beri, GOPATH'ı dinamik olarak ayarlayarak belirli kod sürümlerini içe aktarabilen sürüm yönetim araçlarının ilk dalgası da ortaya çıkmaya başladı. Daha sonra, çeşitli açık kaynak taklit ve klonlama sürüm yönetim araçları mantar gibi yayılır ve temelde GOPATH ve daha sonraki satıcıların bağımlı paketlerin sürümünü yönetmek için temelde godep'lerin tasarım fikirlerini taklit eder ve bu da sonunda satıcıların aşırı kötüye kullanılmasına yol açar ( Satıcı suistimalinin neden olduğu sorunlardan zaten bahsetmiştim). Son olarak, 2018'de rsc, sürüm bağımlılığını sıfırdan en aza indirmek için algoritmaya dayalı sürüm yönetimi özelliğini kişisel olarak icat etti. Modüler özellik Go1.11'den tanıtıldı ve resmi olarak Go1.13 sürümüne dönüştürülecek. Gelecekte, GOAPATH tarih sahnesinden tamamen çekilecek.

Rsc'nin çalışması, açık kaynak topluluğundaki çeşitli sürüm yönetim araçlarının ölümünü doğrudan ilan ettiğinden, bu aynı zamanda resmi Go dil ekibi ile açık kaynak topluluğu arasında birçok çatışmaya ve çelişkiye yol açtı. Burada, Go dilinin gelişiminin tamamen açık kaynak kodlu olarak bilinmediği belirtilmelidir.Go dilinin açık kaynağı yalnızca Sorun gönderimi veya BUG değişikliği ile sınırlıdır.Gerçek dil tasarımı her zaman kilise senatör modelini takip eder. Bence bu, kaynak açmanın en iyi yolu. Birçok açık kaynak topluluğu örneği de diktatörün rolüne duyulan ihtiyacı gözler önüne seriyor ve Senato da tam olarak bu rol.

Go1.13'te, modülerleştirme özelliğine ek olarak, birçok gramer iyileştirmesi vardır: onaltılık kayan noktalı sayılar, büyük sayılar altçizgilerle ayrılabilir, ikili ve sekizlik değer sabitleri vb. Ancak Go1.13, hata standart kitaplığında da önemli bir gelişmeye sahiptir. Hata kitaplığı, Go2'deki yeni hata işleme iyileştirmelerine hazırlanmak için hataların yeniden paketlenmesini ve tanımlanmasını desteklemek için kullanılacak üç işlev, Is / As / Unwrap ekler. Takip eden iyileştirme yönü, hata işlemenin kontrol akışıdır.Te / kontrol anahtar sözcükleri ile hata işleme sürecini iyileştirmek ve yerleşik işlevleri denemek için öneriler yapılmıştır ve çözümle ilgili nihai bir karar yoktur.

Go2'nin en çok beklenen özelliği jeneriktir. Başından beri, Go dili resmi olarak jeneriklere direndi ve 2018'de jenerik hayranlarına umut veren jenerikleri kamuya açık olarak tartışmaya başladılar. İlk Go yetkilisi de dahil olmak üzere birçok kişi, jenerikleri simüle etmek için arayüz kullanmanın aslında sadece bir bahane olduğunu söyleyecektir. Jeneriklerle ilgili en büyük sorun performans değildir, ancak yalnızca jenerikler, genel kapsayıcılar veya algoritmalar için tür güvenli bir arayüz sağlayabilir. Örneğin, bir Add (a, b T) T genel işlevi, arabirim aracılığıyla dönüş değeri türünü kontrol edemez. Go dili, Go dili derleme dili tarafından desteklenen AVX512 yönergeleriyle birlikte jenerikleri destekliyorsa, Go dilinin CPU yoğun alanda bir yeri olması beklenebilir ve hatta saf Go dili makine öğrenimi algoritma kitaplıklarının uygulanması gelecekte ortaya çıkacaktır.

Dikkat etmeye değer son şey, Go dilinin WebAssembly platformuna verdiği destektir. Ending yasasına göre: WebAssembly içinde derlenebilecek her şey sonunda WebAssembly içinde derlenecektir. Fabrice Bellard, 2018 yılında Windows 2000 işletim sistemini WebAssembly teknolojisine dayalı tarayıcı ortamına taşıdı. 2019'da, daha hafif bir Docker alternatif teknolojisi olması muhtemel olan WebAssembly System Interface teknolojisi ortaya çıktı. Go dilinde TinyGo'nun bir varyant versiyonu da vardır.Amaç, WebAssembly veya diğer mikro denetleyiciler gibi kısıtlı ortamlarda Go programlarını daha iyi çalıştırmaktır.

Çin'de dil öğrenin

Go dili ilk ortaya çıktığında, "Merhaba dünya" yazdığındaki ilk örneği hatırlayın. Ne yazık ki, buradaki "dünya" Çince'de "Merhaba, Dünya" değil, Japonca "Merhaba Dünya". Japonca hala Çince karakterlerin dönüşümüne dayanıyor.Bu tüm Çin dünyasının üzüntüsü!

Şans eseri, Çinli programcılar daha güçlü ... Şu anda Çin, dünyada sadece Go diline en çok ilgi gösteren ülke değil, aynı zamanda en çok katkı sağlayan ikinci ülke. Google Trends'den alınan verilere göre, Çin'deki Go dilinin dikkati dünyanın% 90'ından fazlasını oluşturuyor:

Sadece Go dilinin kullanıcıları değil, Çin'in Gopher'in Go diline katkısı da Amerika Birleşik Devletleri'nin gerisinde kalıyor. Bunların arasında, Wei Jingguang, Go dilinin geliştirilmesinde 2010 gibi erken bir zamanda, Go dilini Windows sistemine aktararak ve CGO desteğini uygulayarak derinden dahil oldu. Bundan sonra, Çin'den Minux, iOS ve diğer birçok platformun taşınmasını gerçekleştirdi ve resmi olarak Go dili geliştirme ekibine katıldı. Şu anda, Çin'deki Go diline bir numaralı katkıda bulunan Tianjin'den Shi Bin (benshi001). Çalışmalarının çoğu derlemenin optimizasyonuna odaklanıyor ve küresel Go dili katılımcısı sıralamasında 39. sırada yer alıyor.

Go dilinin en eski Çinli hayranları, tartışmak için Google tartışma grubu golang-china'u kullandı ve tartışma grubu yeni makaleler yayınlamaya devam edecek. Daha sonra 2012 civarında, birçok faktör nedeniyle, yerel tartışmalar QQ gruplarında yoğunlaşmaya başladı (yazar, 2010 yılında ülkenin ilk Go dili QQ tartışma grubunu kurdu). Bundan sonra, her yerde çeşitli WeChat forumları çiçek açtı. Geçtiğimiz on yıl içinde, Go dili Çin topluluğu da toplulukların sayısındaki sürekli artışla çok aktif oldu. İşte tanıdığım Go topluluğundaki bazı kişilerin ve şeylerin kısa bir incelemesi.

Fango

2010 yılında Go diline dikkat ederseniz, Fango'nun adını kesinlikle duyacaksınız. Fango, Singapurlu bir Go dili tutkunu. Go dili çıktıktan kısa bir süre sonra Go dili temalı ilk (muhtemelen tek) romanı "Hu Wen · Go" yazdı ve ardından yayınladı. İlk Go dili Çince ders kitabı olan "Go Language · Cloud Power" ı yazdı. Harika Go hikayesi için teşekkürler Fango.

Xu Shiwei ve Qiniuyun

Qiniu, Go dil gelişimini büyük ölçekte benimseyen ilk yerli şirkettir ve zaman hala Go1.0'ın resmi olarak yayınlanmasından önce. Xu Shiwei aynı zamanda Büyük Çin'deki ilk tanınmış Go dili müjdecisidir. Xu Shiwei ve Qiniuyun ayrıca 2012'de Fango'nun kitabına sadece bir aydan fazla bir süre uzaklıkta olabilecek bir "Go Language Programming" öğreticisi yayınladılar. Editörler Yang Hailing öğretmeni. O zamandan beri, Qiniu'nun Go dili ile ilgili birçok monografisi veya çevirisi var. 2015'ten önce Xu Shiwei ve Qiniuyun ekibinin Çin'deki Go dili topluluğunun tanıtımındaki ana güç olduğu söylenebilir.

Yazar ayrıca ilk kez "Go Language Programming" kitabını okudu ve Goroutine planlamasının arayüzü ve simülasyonunun nasıl uygulanacağı konusunda hala etkilendi. O sırada sunulan "Go Language Programming" imzalı sürümü için Xu Shiwei'ye ve ayrıca yeni "Go Language Advanced Programming" in önsözünü yazdığınız için teşekkür ederim, Xu Da!

Astaxie ve GopherChina Konferansı

Xie Da'nın ilk izlenimi 2012 civarında, ücretsiz bir "Go Web Programming" kitabı açtığı zamandı. Şu anda, QQ grubundaki birçok küçük ortak, gözden geçirme sürecine dahil oluyor (April Mining, Bianjiang, Oling Cat, vb.) . Go Web programlama herkesin daha çok dikkat ettiği bir yöndür Kitap sadece ORM'nin uygulanmasından değil, beedb gibi bileşenlerden de bahsediyor. Beedb gibi bu bileşenler ilk olarak Beego çerçevesine evrildi. JetBrains tarafından bir süre önce yapılan bir ankete göre Beego, Go'daki en popüler üç web çerçevesinden biridir.

Daha sonra 2015 yılında Xie Da resmi olarak GopherChina Konferansı kursunu açtı. Diğer sebeplerden dolayı yerinde katılmamış olsam da, GopherChina konferans gömleğinin ilk oturumunu da rezerve ettim. Ardından 2018'de nihayet Şangay'daki GopherChina konferansına öğretim görevlisi olarak katıldım ve CGO yönetiminin teknolojisini sizlerle paylaştım.Aynı zamanda Xie Daben'i ilk kez gördüm. GopherChina Konferansı ve "Go Web Programlama" için Xie Da'ya teşekkürler!

Diğer insanlar ve projeler

Buna ek olarak, "Learning Go" ve Go Tour'un Çince tercümanı Xingxing, gog'ları yaratan Xingxing, Go resmi belgelerini çeviren bir tür Oling Cat ve Yuhen'in "Go Language Learning" gibi birçok tanınmış Go meraklısı vardır. "Notlar", Go kaynak kodunun ve GoHackers'ı oluşturan Hao Lin'in derinlemesine bir yorumuna sahiptir. Ek olarak, yerli PingCAP şirketi tarafından yönetilen açık kaynak TiDB dağıtılmış veritabanı da çok ünlü bir projedir. Go Çin topluluğundaki bu arkadaşlar ve projeler sayesinde, herkesin çabası Çin'de Go dilinin zenginliğini getirdi.

Go dilinden öğrenin

Öğretmen Hou Jie bir keresinde şöyle demişti: Yüzen kum üzerine yüksek platformlar inşa etmeyin. Çinli İnternet şirketlerinin refahı daha çok iş düzeyinde ve temelde yatan temel yazılımların neredeyse hiçbiri Çin tarafından oluşturulmuyor. Ciddi bir yazılım geliştiricisi olarak, Go dilinden öğrenmemiz ve temelde yatan teorik temeli sağlam bir şekilde kavramaya devam etmemiz gerekiyor Sadece iş seviyesine odaklanamayız, aksi takdirde Batı yine de bir sonraki Çin-ABD ticaret savaşına yakalanacaktır.

Yıllarca süren geliştirmeden sonra, Çin'in yazılım endüstrisi çok başarılı ve olgunlaştı ve birçok yazılım geliştiricisi de 35 yaşındaki orta yaşlı eşiğine girmeye başladı. Aslında 35 yaş, yazılım geliştiricilerin ikinci kariyerinin başlangıcıdır ve kendini yaratmanın başladığı zamandır. Ancak, 996 veya 007 gibi bazı kapitalistlerin hızlı başarıya hevesli kısa görüşlü görüşleri, Çinli yazılım personelinin inovasyondan çok erken düşmesine neden oluyor. Çinli yazılım mühendisleri, hayvancılığı kodlamak şöyle dursun, kod çiftçileri olmamalıdır.Slogan atmayacak olsak da, hep sessizce ilerliyoruz.

Şu anda, Çin'de halihazırda temel yazılımın tasarımına ve geliştirilmesine katılabilecek çok sayıda yazılım geliştiricisi var. Bu gerçekçi program geliştiricilerin çabaları nedeniyle, önümüzdeki on yılda daha da ileri gidebileceğimize inanıyorum.

Yazar: yakacak odun ağacı, dil meraklılarının ilk grubu olan Go, Go'ya katkıda bulunanlar, aynı zamanda "üst düzey programlama dili Go" ve "Başlarken WebAssembly standardı" yazarı. Github hesabı chai2010'dur.

SON

"Teknoloji odaklı inovasyon" kurumsal gelişim için yeni bir yön haline geliyor. Geliştiriciler kendilerini nasıl uygulamalı?
önceki
Alt veritabanı ve alt tablo nasıl doğru bir şekilde alınır?
Sonraki
Büyük veri çağı burada, geliştiriciler nasıl saldırmalı?
Bu dizi Marvel DC'yi tamamen kararttı ve sonra bir dizi oldu
Fotoğraflar: Yakışıklı "Küçük K" Krist Stewart
Bazıları Netflix'in bu tür bir dizi yapmanın çılgınca olduğunu söylüyor, ben ısrar edersem çılgınca diyorum.
Fotoğraflar: VOGUE Eylül sayısının İngilizce baskısı, 2019'un çehresini değiştiriyor
Tek bir oyunda sadece 10 puan + 2 oyunda geri alındı! Chen Yufei 0-2 Olimpiyat ikincisi, milli takımın 3 ana oyuncusu elendi
Performans, GPU'dan 100 kat daha yüksek! İlk programlanabilir memristor AI bilgisayarı piyasaya sürüldü
Horton'ın takım arkadaşları öldü mü? 20 yaşındaki Avustralyalı yüzücü altın madalyalı kendi kendine onaylı uyuşturucu testi pozitif, CNN: Çok utanç verici
Programcıların para kazanmak için yan çizgisi için 8 model
Ay'a iniş kaynak kodu en iyi GitHub Top1'e, Ay'a inişin 50. yıldönümüne 37000 Yıldız haraç
bir iş için savaşmak? Bu 05 gönderisi üç küçük program geliştirdi
Yüksek sıcaklık altında azim | Yüksek hızlı demiryolu hattı kabul işçileri, yüksek sıcaklıkta ızgara "kesintisiz" kontrol "
To Top