Bu yazıyı okuduğunuzda yazılım dillerine bakış açınız değişecek.
Yazılım dillerinin nasıl çalıştığına gelin yakından bakalım, kodu yazdıktan sonra neler oluyor?
Yazılım, bir bilgisayarı programlamak için kullanılan komut dizilerini içeren programların makine diline dönüşmeden önce, komutların insanlar tarafından oluşturulmasını sağlayan, insanların anlayabileceği seviyeye indirgenmiş alfabetik ve nümerik karakterler ile oluşturulan makine komutlarıyla eşleştirilmiş komut parçacıkları içeren yapılardır.
Bu uzun ve karmaşık tanımlamadan sonra basitleştirerek anlatmak gerekirse, bilgisayarı amaca göre programlamak için, komutları bilgisayara aktarmada kullanılan ara bir katman olarak basitçe tanımlanabilir.
Bazı popüler programlama dillerini şöyle bir listeleyelim;
- Python
- Php
- Go
- Javascript
- Typescript
- NodeJS
- Ruby
- Rust
- Pascal
- Basic
- Perl
- Swift
- Java
- C\C++
Burada hepsinin çalışma prensibine girmeyeceğiz ama genel olarak programlama dillerinin temelde nasıl işlediğini birkaç örnek üzerinden fikir sahibi olacağız.
Python programlama dilinde, .py uzantılı bir dosya oluşturup komutlarınızı dil kurallarına uygun şekilde yazarsınız ve işletim sisteminin terminal ekranından “$ python komut.py” gibi benzeri bir komut girerek yazdığınız komutların çalışmasını sağlarsınız.
Bu şekilde komut girdiğinizde arka tarafta ne olur?
python komut.py komutunu incelediğimizde ilk parametre, python programlama dilinin komutlarını yorumlayacak olan programın ismi, ikinci parametre ise yazdığınız python komutlarını barındıran dosyanın yolu.
NOT: Daha teknik ve nispeten karmaşık bir açıklaması var ama bunu diğer dillere göre genelleştireceğim ve karmaşıklığı azaltıp anlaşılırlığı ve fikir sahibi olmayı arttırmak istediğim için tekniği bir tarafa bırakıp en basit şekilde anlatacağım
Python yorumlayıcı komut dosya yolunu parametreden alır ve dosyayı okumaya başlar, okuduğu dosyadaki komutları alır ve o komuta denk gelen makine kodlarını sırasıyla çalıştırı. Komutlar bittiğinde program sonlanmış demektir.
Peki bunun programa yansıması nasıl olur, program çalıştığında o an dosyada hangi komut varsa onlar yorumlanır, program sonlandığında program kapanmış olur ve program tekrar çalıştırılıncaya kadar hiçbir kaynak kullanmaz.
Burada bir virgül koyalım ve diğer karşılaştırma yağacağımız bir diğer programlama diline geçelim
Go dilinde çok basit bir program oluşturmak istediğinizde .go uzantılı bir dosya oluşturursunuz ve içerisine go dilinin yazım kurallarına uygun komutlar yazdıktan sonra yine işletim sisteminin terminal kısmına “$ go run komut.go” komutunu kullanarak programı çalıştırırsınız.
Program komutları işler ve komutlar bittiğinde, programda kapanmış olur.
Fakat go dilinde bir farklılık var, “$ go build komut.go” komutu ile programı derliyorsunuz ve çalıştırılabilir bir çıktı aluyorsunuz komutun çalışması tamamladıktan sonra, burada build komutu yazmış olduğunuz komutları, makine diline çevirerek çalıştırılabilir bir çıktı veriyor ve kaynak kodları olmadan bu programı başka bilgisayarlarda da çalıştırabiliyorsunuz.
Virgül koyduğumuz yere geri dönecek olursak, iki programlama dilinin arasındaki fark, birinde kodların yorumlanıyor olması, diğerinde ise kodların derleniyor olması.
Peki yorumlama ve derleme arasın ne gibi bi fark var?
Yorumlanan dillerde asıl çalışan program ile kodlarınızın arasında bir yorumlayıcı katman bulunur ve kodlarınızı okuyup makine kodlarıyla eşleştirir ve eşleştirdiği kodları çalıştırır, derlenen programlama dillerinde ise yine yazdığınız programlarla eşleme yapılacak makine kodları arasında bu sefer derleyici bi katman bulunur fakat bu derleyici katman sizin yazdığınız komutları eşleştirdiği makine kodlarıyla çalışan bir program çıktısı verir, bu çıktıda ne derleyici katmana nede kaynak kodlarına ihtiyaç duymadan başka bilgisayarlarda çalıştırılabilir.
Bu iki programla dilini çalışma prensibi bakımından farklılığı anlatmak için örnek olarak kullandım. Kabaca baktığımızda yorumlanan ve derlenen programa dillerimi görürken daha detaya indiğimizde tartışmaya açık olan farklı programala dilleride mevcuttur.
Çok kısa bir örnek vermek gerekirse, javascript ve typescript arasında karmaşık bir ilişki vardır, aslına baktığımızda typescript bir dil olmasına karşın derlenen bir dildir fakat vermiş olduğu çıktı bir javascript çıktısıdır, javascript dili ise yorumlanan bir dildir.
Toparlamak gerekirse, programlama dilleri, bilgisayarları insanların kolay bir şekilde programlayabilmeleri için icat edilmiş uyduruk ama bir kadar da etkili araçlardır.