Yanıtlar:
PHP yorumlanmış bir dildir. PHP'yi yorumlamanızı sağlayan ikili dosya derlenir, ancak yazdıklarınız yorumlanır.
Yorumlanan diller için Wikipedia sayfasında daha fazlasını görebilirsiniz
Her ikisi de. PHP daha sonra çalışma zamanı motoru tarafından yorumlanan bir ara bayt koduna derlenir.
PHP derleyicisinin işi, PHP kodunuzu ayrıştırmak ve çalışma zamanı motoru için uygun bir forma dönüştürmektir. Görevleri arasında:
PHP kurulumunuza bağlı olarak, bu adım genellikle komut dosyası ilk kez çağrıldığında yalnızca bir kez yapılır. Derleyici çıktısı sonraki kullanımlarda erişimi hızlandırmak için önbelleğe alınır. Ancak komut dosyası değiştirilirse, derleme adımı yeniden gerçekleştirilir.
Çalışma zamanı motoru, komut dosyası çağrıldığında AST ve bayt kodunu yürür. Sembol tablosu, değişkenlerin değerlerini saklamak ve işlevler için bayt kodu adreslerini sağlamak için kullanılır.
Bayt kodunu derleme ve çalışma zamanında yorumlama işlemi Perl, Java, Ruby, Smalltalk ve diğerleri de dahil olmak üzere bir tür sanal çalışma zamanı makinesinde çalışan diller için tipiktir.
PHP yorumlanmış bir dildir. Bununla birlikte, üçüncü taraf araçları tarafından bayt kodlamak için derlenebilir.
Bir derlenmiş kod bilgisayarın CPU tarafından doğrudan çalıştırılabilir. Olduğunu, çalıştırılabilir kod CPU belirtilen yerli dilinde belirtilir
Yorumlanan dillerin kodu çalışma zamanında herhangi bir formattan CPU makine talimatlarına dönüştürülmelidir. Bu çeviri bir tercüman tarafından yapılır.
Bir dilin yorumlandığını veya derlendiğini söylemek doğru olmaz çünkü yorumlama ve derleme, dilin bir özelliği değil , söz konusu dilin uygulanmasının özellikleri kendisinin . Bu nedenle, herhangi bir dil derlenebilir veya yorumlanabilir - sadece kullandığınız belirli uygulamanın ne yaptığına bağlıdır.
En yaygın olarak kullanılan PHP uygulaması tarafından desteklenmektedir Zend Motoru ve PHP.The Zend Engine böylece yürütebileceği bir biçime PHP kaynak derler adıyla bilinen Zend motoru bir olarak çalışıyor tercüman .
Bu anlamsız bir soru. PHP, GCC gibi yacc (bizon) kullanır. yacc bir "derleyici derleyicisidir". Yacc çıktısı bir derleyicidir. Bir derleyicinin çıktısı "derlenir". PHP yacc çıktısı tarafından ayrıştırılır. Yani tanım gereği derlenmiştir.
Bu tatmin edici değilse, aşağıdakileri göz önünde bulundurun. Hem php (ikili) hem de gcc kaynak kodunuzu okur ve soyut bir sözdizimi ağacı oluşturur. Sürüm 4 ve 5 altında, php programı bayt koduna çevirmek için ağaç üzerinde yürür (derleme adımı). Vulcan Mantık Damperini kullanarak bayt kodunu (montaja benzer) opcode çevrilmiş olarak görebilirsiniz . Son olarak, php (özellikle Zend motoru) bayt kodunu yorumlar. gcc, buna karşılık, ağaçta yürür ve montajı çıktılar; ayrıca işlemi bitirmek için montajcıları ve bağlayıcıları çalıştırabilir. Bir "yorumlanmış" ve diğer "derlenmiş" tarafından işlenen bir programın çağrılması anlamsızdır. Sonuçta, programlar her ikisi ile birlikte bir "derleyici" üzerinden çalıştırılır.
Bunun yerine sormak istediğiniz soruyu sormalısınız. ("PHP her istek için kaynak kodumu yeniden derlediğinden performans cezası ödüyor muyum?" Vb.)
Bu sorunun eski olduğunu biliyorum ama her yerde bağlantılı ve bence buradaki tüm cevaplar yanlış (belki de eski oldukları için).
Orada YOK tercüme edilmiş bir dilde veya derlenmiş dil olarak böyle bir şey. Herhangi bir programlama dili yorumlanabilir ve / veya derlenebilir.
Her şeyden önce bir dil sadece bir kurallar dizisidir, bu yüzden derleme hakkında konuşurken o dilin belirli uygulamalarına atıfta bulunuruz .
Örneğin HHVM , PHP'nin bir uygulamasıdır. Kodu orta HipHop bayt koduna dönüştürmek ve daha sonra makine koduna dönüştürmek için JIT derlemesini kullanır. Derlendiğini söylemek yeterli mi? Bazı Java uygulamaları (hepsi değil) JIT kullanır. Google'ın V8'i JIT kullanıyor.
Derlenmiş ve yorumlanmış olan eski tanımları kullanmak günümüzde bir anlam ifade etmemektedir.
"PHP derlendi mi?" derlenmiş bir dil ile yorumlanan bir dil arasında açık ve anlaşılmış sınırlayıcılar olmadığı için mantıksız bir sorudur.
Onları sınırlamanın olası bir yolu (bu ikilikte bir anlam bulamıyorum):
derlenmiş diller Zamanın Ötesinde derlemeyi kullanır (C, C ++);
yorumlanan diller Tam Zamanında derleme kullanır veya hiç derleme yapmaz (Python, Ruby, PHP, Java).
in most cases, evet. her durumda, hayır. böylece anlamsal olarak önemli ve kabul edilmiş bir çizgi çizemezsiniz.
En azından kodu istediği kadar derlemez (veya optimize etmeliyim).
Bu kod ...
for($i=0;$i<100000000;$i++);
echo $i;
... her çalıştırıldığında programı eşit derecede geciktirir.
Bunun sadece ilk kez yapılması gereken bir hesaplama olduğunu tespit etmiş olabilir.