Hayatınızda en az bir kez bile olsa, bilgisayarların sadece sıfırlar ve birler (0-1 / binary code) ile çalıştığını duymuşsunuzdur. Ancak hiç yazılımcı arkadaşınız olduysa ya da herhangi bir şekilde bir programın kaynak kodlarına baktıysanız, içinde tıpkı bizim dilimizde kullandığımız gibi harfler ve kelimeler olduğunu da görmüşsünüzdür. Peki sizce de burada bir çelişki yok mu? Hani sadece 0 ve 1 ile çalışıyordu bilgisayarlar? Nasıl harfler ile bilgisayara komut veriyoruz? Gelin bu konuya açıklık getirelim.

Programlama Dilleri?

Bu konuyu anlayabilmemiz için öncelikle kodlama dilinin ne olduğunu anlamamız gerekiyor. Olabildiğince basitleştirmek istediğim için ve kafanızın karışmaması için konuyu terimlerle değil benzetmelerle açıklayacağım.

Şimdi bilgisayarla muhabbet etmek istediğinizi düşünün. Ancak birbirinizin dilini bilmiyorsunuz. Bilgisayar 0 ve 1 ile iletişim kurmaya çalışırken siz harfler, kelimeler ve cümleler ile iletişim kurmak istiyorsunuz. Bu durumda iletişim sağlamak istiyorsanız muhakkak araya bir tercüman koymanız gerekecek. Ama şansa bakın ki bu tercüman da insan dillerini bilmiyor. Tercüman size diyor ki :

“Ben senin konuştuğun dile en yakın dil olarak C dilini ve sana göre çok zor olan “assembly*” dilini biliyorum (Biraz sonra assembly’a değineceğiz. Okumayı sürdürün) . Eğer C dilini öğrenirsen bunu bilgisayara tercüme edebilirim.”

Bu durumda assembly dili öğrenmek gibi bir delilik yapmadığınız sürece dil kuralları biraz daha size benzeyen C dilini öğrenip tercümanınızdan tercüme etmesini isteyebilirsiniz. İşte bu öğrendiğiniz C dili, programlama dilidir. Kısaca bizim tercümanlarımızın assembly diline çevirebileceği özel dillere “programlama / kodlama dilleri” diyoruz.

*Assembly : hani bilgisayar 0 ve 1 kullanıyor dedik ya, işte o 0 ve 1lere tercüme edilebilecek kodlar bütününe assembly kod deniyor. Bunlar haricindeki kodları makinenin anlayabileceği 0 ve 1lere dönüştüremiyoruz.

Tercümanlarımız (Derleyiciler)

Şimdi tercümanla anlaştık ve C dilini öğrendik diyelim. Tercüman da anlaşmaya uyarak benim C dili ile yazdığım kodları assembly kodlara tercüme edecek. Peki bu tercüman kim?

Bizim bu noktadaki tercümanlarımız “derleyiciler”dir. Yani derleyici dediğimiz şey, insan diline yakın olan kodu insan dilinden çok uzak olan assembly koduna çeviren programlardır.

Şimdi şöyle bir durum var ki, dünyada sadece 1 tercüman olmadığı gibi kodlama dünyasında da sadece 1 çeşit derleyici yok. Bir derleyici diyor ki “ben rust dilini ve assembly dilini biliyorum. beni kullanmak istiyorsan rust öğren”. Başka biri diyor ki “ben R dilini ve assembly dilini biliyorum. beni kullanmak istiyorsan R öğren.”. Bu şekilde farklı programlama dilleri için farklı derleyicileri yani tercümanları kullanarak anlatmak istediğimiz şeyi assembly diline çevirebiliyoruz. Farklı programlama dillerinin olma sebebi ise farklı bir yazı konusu olabilir.

Assembly Kod’a Çevirdik, Ya Sonra?

Tercümanımız bizim programlama diliyle yazdığımız kodu assembly koda çevirdi. Assembly kodu tanımlarken ne demiştik, “0 ve 1lere tercüme edilebilecek tek kod türü”. Yani bir programlama dilini 0 ve 1lere dönüştürmedik henüz, fakat 0 ve 1lere dönüşebilecek bir forma dönüştürdük.

Şimdi araya bir kez daha tercüman koyacağız ve assembly kodlarımız 0 ve 1lere dönüşecek. Bu tercümanımızın adı ise “assembler”. İşlem sıramızı minik bir şekilde gösterelim :

Kodlarımız –> Derleyici* –> Assembly Kod –> Assembler** –> 0101010110…

(*Tercüman 1, **Tercüman 2)

Artık bizim söylediğimiz şeyler bilgisayarın anlayabileceği 0 ve 1 haline dönüştü. Kısaca bilgisayara artık emrimizi verebildik 🙂 Anlatmak istediğimi anlattım ama minik bir somut örnek vererek meraklıları biraz daha tatmin etmek istiyorum.

Meraklısına

Örneğin şimdi Rust dili ile “Ekrana ‘Merhaba Dunya!’ yaz!” komutunu verecek olan kod parçasını yazacağım :

  • fn main(){
  • println!(“Merhaba Dunya!”);
  • }

şimdi de aynı komutu verecek kodları C ile yazacağım :

  • #include <stdio.h>
  • void main(){
  • printf(“Merhaba Dunya!”);
  • }

İki farklı dille, bilgisayara aynı komutu verdik. Şimdi bunların çalışması için Rust dili ile yazdığım kodu Rust Derleyici ile, C ile yazdığım kodu C Derleyici ile derlemem gerekir. Çünkü tercümanların bildiği dilleri konuşmam lazım. Onlar da bana “assembly kod” şeklinde bu komutun çıktısını verecekler.

İkisinin verdiği assembly kod çıktıları aynı olacaktır. Çünkü aynı şeyi emreden kodlar yazdık ve artık bu kodlar assembly hale dönüşerek köprüden önceki son çıkışa geldiler. Aynı şeyleri anlatıyorlarsa, 0 ve 1 dizilişleri aynı olması gerekir. Tercümanın aynı tercümeyi yapması için de aynı cümleyi vermeniz gerekir. Bu yüzden iki kodun da assembly hali aynıdır.

Daha sonra bu assembly kodlar assembler ile son kez tercüme edilip 0 ve 1lere dönüşecek ve işlemciye gönderilecek. İşlemci de işlemini yapacak ve emriniz gerçekleşecek ^•^

© Bu yazının her türlü telif hakkı yazarın kendisine ve / veya temsilcilerine aittir.

3 Yorum

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir