Go Nedir??? Google Kendi Programlama Dilini Geliştirdi

Go Google'ın Programlama DiliEvet sonunda bunuda mı görecektik? Google yine yapacağını yaptı ve belkide rakiplerini kızdırmaktan mutluluk duyuyordur ama Go isimli kendi programlama dilini geliştrimeyi de başardı. Bilindiği gibi Google arama motoru ile programlamada ve mimari altyapıda verimliliğin ne kadar önemli bir konu olduğunu ispatlamış bulunmakta, bunu arama sonuçlarının 1 sn ve altında elde edilmesinden görüyoruz. Özelliklerine de bakacak olursak Go açık kaynak kodlu bir programlama dili olarak karşımıza çıkıyor ve Google bununla birlikte performansa da tabiki büyük önem veriyor. Go C programlama ailesine göre tasarlanmış ve kendi uygulamalarında da yoğunlukla kullandığı Python un da özelliklerini içerisinde barındırarark daha dinamik  programlar geliştrimesinin de yolunu açmayı hedefliyor.

Peki bunca programlama dili varken neden Google sizce kendi dilini yaratmayı hedeflemiş olabilir. Bunun cevabı aslında kedi kuruluşunda gizli. Çünkü Yahoo, Lycos, Altavista gibi bir çok arama motoru varken Stanfordda iki öörenci olarak bu ideali benimsediler ve meydan okuyarak rakipleribi silip süpürdüler yine tarih tekerrürden ibarettir diyebiliriz, ama bu sefer olumlu anlamda çünkü söz konusu olanlar dahi insanlar gerçekten.

Bir çok sebebi olmasına karşın tabiki Google stratejisini kendi uzmanlık alanında yoğunlaştırarak nasıl daha efektif olabileceğini düşünmüş ve günümüz donanımlarının yakın senelerde çok hızlı gelişmesine rağmen programlama dillerinin C++, Java gibi hantal yapılarıyla bu isteklere yeteri kadar ecvap veremediklerini düşünerek paralel hesaplama gibi işlemlerin çok daha farklı bir perspektifle yaklaşılarak, donanımın daha verimli kullanılmasıyla daha modern web uygulamaları geliştirilebileceğini anlamışlar.

Robert Griesemer, Rob Pike ve Ken Thompson aslında hedeflerle ilgili skeçler hazırlamaya 2007 yılıın eylül ayında başlamışlar. Kısa bir süre sonra bu hedefler şekillenmiş ve bir plana dönüşmeye başlamış.  Ocak 2008'e gelindiğinde artık compiler üzerinde çalışılmaya başlanarak fikirlerin geliştirilmesi sağlanmış ve proje  tüm zamanlı olarak geliştirilmeye devam etmiş. Go'nun aslında doğuş sebebi varolan dillerin sistem programlama üzerindeki isteklerinin hüsranla sonuçlanmasıdır da denebilir.

Bir seçim yapmak istendiğinde verimli şekilde derleme, verimli çalışma veya programlama esnekliği ve kolaylığı gibi konulara gelindiğinde tek bir platformda buna karşılık gelen bir uygulamanın olmayışının sıkıntısını yaşamışlar. İşte bu noktada Go bu eksiklikleri gidermek üzere yola çıkmış. Aynı zamanda da modern olmayı da hedefleyerek, networke bağlı ve çok çekirdekli yapıları da desteklemeyi hedeflemiştir. Sonuç olarak karşımıza büyük bir exeyi tek bir bilgisayarda bir kaç saniyede derleyebilen bir dil ortaya çıkmıştır.

Go daha önce de belirttiğimiz gibi bir sistem programlama dilidir ve hedefi de genel amaçlı bir dil sistem dili olmasıdır, tıpkı C++ gibi. Tabiki yaklaşım ve aradan geçen zaman içinde gelişen trendlere göre arada mutalak çok fazla farklılık da bulunmaktadır.

Bunları da özetlemek gerekirse;

  •  Go constructor ve destructorları olan class (sınıf) lar içermez, üye metodlar, sınıf miras hiyerarşisi ve sanal fonksiyonlar yerine Go, arabirim yani interfaceleri destekler ve bu da aslında C++ ile birlikte template kullandığınızda da kullanılan bir yapıdır.
  • Go garbage collection (çöp toplama) yani kısaca işi biten elemanların atılarak temizlik yapılması ve gereksiz hafıza kaplamalarının önlenmesi de denebilir, bunun da modern işlemcilerde incremental olarak yapılması daha efektiftir.
  • go da pointer (işaretçiler) bulunur ancak pointer aritmetiği bulunmaz. Yani bunu da açmak gerekirse, bir işaretçi kullanarak bir stringe ait byte lar üzerinde ilerleyemessiniz.
  • Diziler Go da birinci sınıf değerlerdir. Bir dizi, bir fonksiyonda parametre olarak kullanıldığında, fonksiyon dizinin bir kopyasını alır, ona ait bir işaretçi almaz. Ancak uygulamada fonksiyonlar slice ları kullanırlar. Bu da yeni bir kavramdır ve konsept olarak Slice 3 alanı olan bir struct (yapı) dır ve bir diziye işaret eden bir pointer, uzunluk ve kapasite bilgisini tutar ve [ ] operatorünü destekleyerek dizi elemanlarına erişmeyi sağlarlar ve len fonksiyonu sayesinde de Slice'ın  uzunluğunu lde edebileceğiniz gibi, cap fonksiyonuyla da dizinin kapasitesini elde edebilirsiniz.
  • Stringler de dil tarafından sağlanmıştı ancak bir kez oluşturulduktan sonra b,r daha değiştirilemezler.
  • Hash Table'lar da desteklenmiştir ve burada map olarak geçmektedir.
  • Farklı threadlerin çalışırılabilmesi ve bunların arasında bir haberleşme kanalının olması da dil tarafından desteklenen bir özellik olmuştur.
  • Go Header dosyaları kullanmaz. Bunun yerine, her kaynak dosyası tanımlanmış bir paketin bir parçasdır.
  • Go kullanıcı tanımlı operatörleri desteklemez.
  • Go const ve volatile'ı da desteklemez.
  • Go geçersiz işaretçiler için nil değerini kullanır, C++ da bildiğiniz gibi bu değer NULL olarak geçmekte idi.

Daha bir çok özellik olsa da şimdilik bunları sayabiliriz. Tabi syntaxda da önemli değişiklikler olmuştur ve C++ ile karşılaştırıldığında belki de ilk başta alışması zor sayılabilecek bir şekilde ters çevrilmiştir de diyebiliriz, buna da örnek vermek gerekirse, değişken ismini yazdıktan sonra hangi tipte olduğunu belirtiyoruz dersek herhalde anlaşılır. Sonuç olarak da okurken sağdan sola doğru bir yol izlememiz gerekir diyebiliriz, mesela int tipinde bir d1 adında değişken tanımlamak istersek  veya bir dizi 2.satirdaki gibi, 3. satırda da pointer tanımlamayı örnek verebiliriz.

Go                                                            C++
var d1 int                                                 // int d1;
var d2[10]int                                           // int d2[10];
var d3 *int                                              // int* d3;

Bunların dışında yukarıda kullandığımız var tanımlama kelimesini de her sefer yazmak istemiyorsanız, bir modern dilden beklendiği gibi Go burada da imdadımıza yetişmiştir.

var {

     x int
     y float
}

Bunun gibi örnekleri çoğaltmak mümkündür, şimdilik makalemizi burada noktalıyoruz, umarız Go ile ilgili başlangıç seviyesinde vermeye çalıştığımız bilgiler yararlı olmuşturi bir sonraki ders ve makalelerimizde buluşmak dileğiyle...