Yazdığınız her kod satırının, bilgisayarınızın anlayabileceği bir dile çevrilmesi gerekir. Ama bu nasıl oluyor?
PHP, Swift ve JavaScript gibi üst düzey programlama dillerinin kaynak kodu, biraz doğal dil gibi görünür. Bu tür bir kodda İngilizce kelimeler göreceksiniz ve dilin kendisini bilmeseniz bile bazı işlevlerini anlayabileceksiniz. Ancak bilgisayarın son programı çalıştırabilmesi için bu tür kaynak kodunun makine tarafından okunabilir bir biçimde olması gerekir.
Bunu yapmak için makinenin, kodunuzu işleyebileceği bir şeye çevirecek bir aracıya ihtiyacı vardır. Bu aracı bir tercüman, bir derleyici veya bir birleştirici olabilir. Hepsi benzer bir şey yapar: kaynak kodunu insan tarafından okunabilir bir biçimden makine tarafından okunabilir bir biçime çevirir. Ama bunu nasıl yaptıkları oldukça farklı.
Tercüman Nedir?
Bir tercüman, her bir kod satırını birer birer okur ve çalışma zamanında hemen yürütür. Bir tercüman, CPU'ya göndermeden önce tüm kaynak kodunun makine koduna dönüştürülmesini beklemez. Bunun yerine, her kod satırını yorumlayıcıya özgü bayt koduna dönüştürür ve her talimatı çevrildikçe yürütür. Yürütme görevi doğrudan yorumlayıcıya bağlıyken, CPU yorumlayıcının kendisine güç sağlar.
Her satırı bir seferde ayrıştırıp çalıştırdığından, işlem genellikle nispeten daha yavaştır. Bunu göz önünde bulundurarak, her kod satırı için anında geri bildirim sağladıkları için, yorumlanmış programlama dillerindeki hataları tespit etmek kolaydır.
Bununla birlikte, bu davranışın bir aksiliği, özellikle projenizde yeterli test yoksa, yürütme sırasında bir çalışma zamanı hatasının programı çökertmesi ve kötü bir kullanıcı deneyimine neden olmasıdır.
Derleyici Nedir?
Bir derleyici, kaynak kodunuzu okur ve makine tarafından okunabilen yürütülebilir bir dosyaya çevirir. Bir tercümandan farklı olarak, kaynak kodunun tamamını tek seferde okur ve daha sonra CPU tarafından işlenmek üzere makine kodu üretir. Derleyici bu görevi yalnızca bir kez gerçekleştirdiğinden, derlenen programlar genellikle daha hızlıdır ve bellek açısından daha verimlidir.
Yine de derleyici çalışma zamanı hatalarını hesaba katmaz. Bunun yerine, genellikle daha iyi olan derleme zamanında belirli hataları işaretler. Bu tür bir hata, program çalışmaya başladığında değil, geliştirme sırasında ortaya çıkar. Ancak, derlenmiş programlarda bile çalışma zamanı hatalarının hala mümkün olduğunu unutmayın.
Temel Farklılıklar
Tercümanlar ve derleyiciler ortaktır, bu nedenle aralarındaki temel farkları bilmek faydalıdır.
Kod Yürütme: Girdi ve Çıktı İşleme
Bir tercüman, satır başına her girişi yalnızca toplayabilir, çevirebilir ve yürütebilir. Kaynak kodun her satırını geldikçe sıralı olarak çalıştırır ve nihai çıktı, yürütme sırasında her satırın çıktısına bağlıdır.
Bir derleyici tüm kaynak kodunu paketler ve yalnızca bir kez çevirir. Bu nedenle, tüm kaynak kodunuzu girdi olarak alır ve bir çıktı almak için CPU'ya dönüştürür ve gönderir.
Hata Ayıklama ve Hata İzlenebilirliği
Yorumlanan kod için, yorumlayıcı bunları doğrudan orijinal kaynağa başvurarak raporlayabildiğinden hatalar daha izlenebilir. Ancak yürütme sırasında herhangi bir noktada bir hata olduğunda yorumlayıcı durur. Bu nedenle, hataları çalışma zamanında yeniden oluşturmanız gerektiğinden hata ayıklama biraz zor olabilir. Yetersiz çalışma zamanı günlüğü varsa daha da kötüleşebilir.
Öte yandan, derlenmiş bir dildeki çalışma zamanı hatalarının izini sürmek daha zor olabilir çünkü bunlar hakkında rapor verecek bir tercüman yoktur. Ancak derleme zamanında keşfettiğiniz hataların üstesinden gelmek genellikle daha kolaydır çünkü derleyici bunları tutarlı bir şekilde tanımlayacaktır.
Derlenmiş dillerin çoğunda ayrıca kullanılmayan değişkenleri, tür uyumsuzluğunu ve hatalı sözdizimini tespit eden ve bu tür hataları erkenden önleyen bir mekanizma bulunur.
Performans ve Hız
Beklendiği gibi, CPU kodu yalnızca bir kez işlediğinden, bir derleyici makinenin program kodunu daha hızlı çalıştırmasına yardımcı olur. Bu, çalışma zamanında her satırı çeviren tercümanlar için geçerli değildir.
olmasına rağmen kullanabileceğiniz programlama ilkeleri yorumlanan kodu optimize etmek için yorumlayıcı, bir sonrakine geçmeden önce her satırı ayrıştırmak ve yürütmek için zaman harcayacaktır. Ancak, yorumlanan dilleri daha hızlı hale getirmek için derleyici yardımcıları mevcuttur.
Örneğin, Chrome tarayıcı JavaScript'i V8 motorunu kullanarak işler; bu, Tam Zamanında (JIT) derleyicisinde çalışır. Pyinstaller modülü, bir Python betiğini çalıştırılabilir bir pakette toplayan ve derleyen başka bir yardımcıdır.
Bu yardımcılar, yorumlanmış bir dili bir derleyicide bir araya getirmek için kullanışlı olsa da, temel çevirmenin hala bir yorumlayıcı olduğu gerçeğini değiştirmez.
Hafıza kullanımı
Yorumlayıcının ve derleyicinin bellek kullanım davranışı görecelidir ve genellikle kaynak koduna ve diğer faktörlere bağlıdır. Bazı programcılar yorumlayıcılarda kod yığınlamasının bellek kullanımını azalttığını iddia ederken, yorumlayıcılar toplam bellek kullanımını da kaydeder.
Örneğin, incelediğinizde Python kodunuzun bellek kullanım profili, tükettiği bellek miktarı sizi şaşırtabilir.
Genel olarak konuşursak, derlenmiş programlar daha az çalışma zamanı belleği gerektirir. Kaynak kodunun tamamını önceden makine tarafından okunabilir koda dönüştürdükleri için CPU'ya daha az iş verirler. Bu, kodu yalnızca çalışma zamanında çeviren yorumlayıcıların aksinedir.
Programlama Dili Desteği
Tercüman ve derleyici adil bir paya sahiptir. programlama dili dağıtımı. Bazı popüler derlenmiş diller arasında C, C#, Rust ve Golang bulunur. Yorumlanan diller arasında Python, JavaScript ve PHP de popülerdir.
Daha fazla programcı yorumlanmış dilleri tercih etme eğilimindedir. JavaScript ve Python tercüman kullanırken, genel olarak en çok istenen iki dildir. 2023 Stack Overflow Geliştirici Anketi. Rust ve C#, beşinci ve altıncı konumlardaki derlenmiş grupları temsil eder.
Yorumlanan Dillerin Parladığı Yer
Tercümanlar şu alanlarda öne çıkar:
- Tercüman her bir kod satırını ayrı ayrı yürüttüğü için kolay hata takibine izin verir.
- Derlenmiş dillere kıyasla daha az karmaşık sözdizimlerine sahip olduklarından, yorumlanmış dillerle daha önce minimum uygulanabilir bir ürün elde etmek genellikle daha hızlıdır.
- Statik olarak yazılan derlenmiş dillerin aksine, yorumlanan diller dinamik yazmayı kullanır, kod karmaşıklığını azaltır ve okunabilirliği artırır.
Derlenmiş Dillerin Kazandığı Yer
Peki ya derleyiciler? Dillerinin biraz güç gösterdiği bazı yönler şunlardır:
- Derlenmiş diller genellikle yürütme sırasında daha hızlıdır ve kod çevirisi önceden yalnızca bir kez gerçekleştiğinden daha az çalışma zamanı belleği gerektirir.
- Derlemeden sonra yürütme, erken hata tespitine yardımcı olur. Derleyici, bir hata olduğunda konuşlandırmanın başarısız olmasını sağlar. Bu, çalıştırma sırasında hataları yakalamaktan daha iyidir.
- Statik olarak yazılmış olmasına rağmen, derlenmiş diller, değişkenlerin ve işlevlerin amaçlarını açıkça tanımlayarak onları daha belgelenmiş hale getirir.
Projeniz İçin Doğru Tercümanı Seçmek
Gördüğünüz gibi, derleyici ve tercüman mükemmel oldukları kendi alanlarına sahiptir. Bazı programcılar derlenmiş dillerin genel olarak daha hızlı ve daha iyi olduğunu savunurken, diğerleri performansın kod yapısına ve platforma bağlı olduğunu savunuyor.
Ancak daha da önemlisi, çevirmen seçiminiz teknik mekanizmaların yanı sıra başka birçok faktöre de bağlı olmalıdır. Öğrenme kolaylığı, topluluk ve proje amacı, yorumlanmış ve derlenmiş diller arasında seçim yaparken dikkate alınması gereken faktörler arasındadır.