Compile Time ve Runtime Farkları | Java
Herkese selam, bugün birlikte geliştirdiğimiz programların çalışırken geçtiği aşamaları öğrenelim. Bu aşamalar Compile Time ve Runtime olarak gruplandırılır. Compile Time, derleme zamanı anlamına gelirken; Runtime, çalışma zamanı anlamındadır. Programlama dillerinin yazdığımız kodu çalıştırması ya da aldığımız hatalar gibi bir çok şey bu kavramlarla ilgilidir. Bu yüzden bu kavramları bilmek yazılım geliştirirken bize fayda sağlayacaktır.
Compile Time | Derleme Zamanı
Genellikle high-level programlama dilleri kullanırız. Bu diller bizim anlayabileceğimiz seviyede kolaylaştırılmış syntax’lere (söz dizimi) sahiptir. Ancak makinelerin yazdığımız kodu direk anlaması ve çalıştırması mümkün değildir. Bu yüzden compiler’lara yani yazdığımız kodu makinelerin anlayacağı biçime çeviren araçlara ihtiyaç duyarız. Özetle yazdığımız kod derlenir ve machine code’a (makine kodu) dönüştürülerek çalıştırılır.
Şimdi birlikte Java’da geliştirdiğimiz programın çalışma aşamalarına bakalım. Bizler kodlarımızı .java uzantılı dosyalara yazarız. Çalıştırmak istediğimizde bu dosyalarımız Java Compiler (javac) ile .class uzantılı dosyalara derlenir. Java bytecode olarak bilinen kodlarımız bu .class uzantılı dosyalarda tutulur. İşte bu süreç Compile Time’ın kendisidir. Türkçe’sinden de anlaşılacağı üzere yazdığımız kod machine code’a dönüştürülmeye hazır hâle getirilir yani derlenir.
Compile Time Hataları
Derleyici sırasında oluşabilecek hatalar syntax veya semantic kaynaklı hatalardır. Semantic (anlamsal) hatalar syntax olarak doğru fakat mantıksal olarak yanlışlara sebep olan hatalardır. Örneğin int bir değerle String bir değeri toplamaya çalışmak.
Runtime | Çalışma Zamanı
Derlenmiş hâle gelen kodumuz artık machine code’a dönüştürülmeye hazır. Bu aşamada kodumuz makinelerin anlayacağı hâle dönüştürülür ve çalıştırılır. Direk derlenebilir dillerden ziyade yazdığınız dile bağlı olarak kodunuz machine code’a dönüştürülmeden assembly code’a çevrilebilir. (Yorumlanabilir Diller)
Java’da derleme ve yorumlama birlikte kullanılabilir. Java .class uzantılı dosyalara derlenmiş olan kodu Runtime’da, Java Virtual Machine (JVM) kullanarak assembly code’a çevirir. Daha sonra yine JVM’in içinde bulunan Just In Time Compiler (JIT) ile machine code’a çevirir ve çalıştırır.
Runtime Hataları
Çalışma zamanında oluşabilecek hatalar, Java compiler’ın derleme aşamasında tahmin edemediği doğru sytnax ve semantic’e sahip hataladır. Bu tarz hatalar program çalışırken beklenmeyen veya kontrol edilmeyen bir durum olduğunda karşılaşılan hatalardır.
Örneğin bölme işlemi yapan bir method yazdığınızı düşünün, iki parametre alıp ilk sayıyı ikinciye bölüyor olsun. Herhangi bir syntax veya semantic hata olmadığı için derleyici bu kodu derler ve program çalışır. Fakat kullanıcı ikinci sayı olarak 0 (sıfır) yollarsa Division by zero hatasıyla karşılaşılır. Ya da başka bir örnek olarak kullanıcıdan alınan String’in uzunluğunu (length) ekrana yazdıran bir programımız olsun. Kullanıcı bir değer girmeden çalıştırmak isterse NullPointerException hatası oluşur. İşte bu tarz hatalar compiler tarafından derleme zamanında tahmin edilemeyip çalışma zamanında oluşan hatalardır.
Özet
Sonuç olarak geliştirdiğimiz dillere bağlı olarak bir kaç şey değişse de yazdığımız kodların çalışması Compile Time ve Runtime aşamaları olarak gruplandırılır. Aşağıdaki şemada Java’da geliştirilen bir programın çalışma süreci gösterilmiştir.
Single & Albüm Tavsiye 🎉
Artık makalelerimin sonunda son zamanlarda dinlediğim ve kod yazarken dinlemesi keyifli olacağını düşündüğüm parçaları veya albümleri paylaşıyorum. Ben Fero parçaları bana motive edici gelebiliyor umarım size de keyif katar 🤷 Hatasız kodlamalar dilerim. 🥳 🎉