En fazla (hepsi değilse de) dinamik dillere bakıldığında (örneğin Python, PHP, Perl ve Ruby) hepsi yorumlanır. Yanlışsam düzelt. Derleme aşamasından geçen herhangi bir dinamik dil örneği var mı? Dinamik dil, yorumlanan dil ile aynı mıdır?
En fazla (hepsi değilse de) dinamik dillere bakıldığında (örneğin Python, PHP, Perl ve Ruby) hepsi yorumlanır. Yanlışsam düzelt. Derleme aşamasından geçen herhangi bir dinamik dil örneği var mı? Dinamik dil, yorumlanan dil ile aynı mıdır?
Yanıtlar:
En fazla (hepsi değilse de) dinamik dillere bakıldığında (yani Python, PHP, Perl ve Ruby) hepsi yorumlanır.
Doğru değil. Python kaynağını derleyebilirsiniz. Bu varoluşsal bir kanıt.
Statik olarak yazılan diller için tercümanlar ve dinamik olarak yazılan diller için derleyiciler vardır. İki kavram diktir.
Yan not: Genel olarak, bir dil sadece şudur: Anlambilimi ifade etmek için bir dizi sözdizimsel yapıya sahip bir dil. Bir beyaz tahtaya Python yazarsanız, buna hala Python denir! Bu var uygulama tercüman veya derleyici olabilir. Statik olarak yazılan veya dinamik olarak yazılan (her ikisinin de bir melezi) dilin bir özelliğidir, yorumlama veya derleme yoluyla bir program yürütme uygulamanın bir özelliğidir.
.pyc
dosyalar bayt kodudur . Python kaynak kodu ayrıştırıldı, optimize edildi ve oluşturmak için derlendi . Bayt kodu talimatları nispeten üst düzeydir ve en popüler uygulaması düz bir yorumlayıcıdır (aksine, JIT'in bayt kodunu çalışma zamanında çok akıllı makine koduna derleyen PyPy'ye bakın), ancak Python Java'dan daha az derlenmemiş veya C #. Python, yalnızca "derleme" yerel zamanın erken derlemesiyle sınırlıysa "derlenmez" , ancak hiç kimse bununla ilgili bir şey söylemedi ve genellikle herhangi bir dil-dil dönüşümü anlamına gelebilir.
Python
ve CPython
ikincisi de öncekinin bir uygulamasıdır PyPy
.
Ortak Lisp dinamik olarak (ve güçlü bir şekilde) yazılır ve genellikle derlenir .
Bu dinamiklik çalışma zamanında elde edildiğinden, derleyiciye bir sembolün yalnızca belirli bir tür değeri tutacağından emin olmak için kaynak kodunda kullanabileceğiniz bazı yönergeler vardır, böylece derleyici oluşturulan kodu optimize edebilir ve performansı artırabilir.
node.js, Google'ın V8 javascript motorunu temel alır. V8 çalışma zamanı derlemesi yapar. V8 bu gerçeği göz önünde bulundurarak körü körüne hızlı. Sadece http://shootout.alioth.debian.org adresini ziyaret edin ve V8'i yukarıdaki yorumlanmış dillerden herhangi biriyle karşılaştırın.
Hayır - kesinlikle dinamik dilleri derlemek mümkün.
Her zaman tasarım tarafından derlenen bazı dinamik diller bile vardır (örn. Clojure).
Bununla birlikte, soru önemli bir ilgili noktaya değinmektedir: dinamik diller derlenebilse de, genellikle dinamik diller, statik olarak yazılan bir dil kadar verimli bir koda derlenemez . Bunun nedeni, dinamik olarak derlenen ve statik olarak derlenmiş bir dilde gereksiz olabilecek çalışma zamanı denetimleri gerektiren bazı doğal özellikler olmasıdır.
Bunun bir örneği: nesnelerin çalışma zamanı yamalamasına izin veren diller (örn. Ruby), nesne üzerinde bir yöntem çağırdığınızda, genellikle nesnenin incelenmesini (karma bir arama veya benzeri bir yöntemle) gerektirir. Bu derlenmiş olsa bile, derleyici çalışma zamanında yöntem araması yapmak için kod oluşturmak zorunda kalacak. Bir dereceye kadar bu yöntem araması, bir tercümanın yapması gerekenden farklı değildir.
Bu, Java gibi bir dildeki bir yöntem çağrısına kıyasla önemli bir ek yük ekler; burada doğru yöntem, derleyici tarafından sınıf tanımından statik olarak belirlenebilir ve yerel koddaki basit bir işlev çağrısına indirgenebilir.
Dinamik etkilerin, statik olarak derlenmiş meslektaşlarına göre ortalama olarak daha yavaş performansa neden olmasının, bu etkinin her şeyden çok olduğuna inanıyorum. Hatalı ölçütlerden görebileceğiniz gibi, sıralamanın altındaki dinamik dillerle (Perl, Python, Ruby, PHP vb.) En hızlı olma eğiliminde olan statik olarak yazılmış dillerdir (C, Java, Fortran vb.).
Bir zamanlar BASIC yorumlandı. BASIC'in bazı varyantlarında dinamik yazım vardı. Ve onlar için de derleyiciler alabilirsiniz.
(Bu, 100K disket sürücülerinde, dinozorların hala dünyayı dolaşıp kahvaltı için şüphesiz s / w geliştiricileri yediğinde geri döndü.)
Farklı Smalltalk uygulamaları bunu farklı şekilde ele alır, ancak bazıları yüksek performanslı bir VM'de çalışan bayt kodları için derlenir.
Aslında, sözde "yorumlanmış" dillerin çoğu, daha hızlı çalışmasını sağlamak için tam zamanında derlemeye izin verir. Ve bazılarını çalıştırmadan önce bayt koduna derlemelisiniz.
Aslında, dinamik ve yorumlanmış bir ilişki olsa da, tamamen 2 farklı fikirdir. Dinamik yazmayı kimin hissettiğinin işini daha kolay ve daha hızlı hale getirmesinin nedeni, kodun biraz daha yavaş ama taşınabilir olmasını gerektirmez.
Chrome, IE9 ve Firefox 3.1+, JavaScript'i yerel ikili dosyalara derler ve JavaScript dinamik olarak yazılır.
Dinamik dillerin tarihsel olarak yorumlanma eğiliminde olmasının nedeni, dinamik yazma ve yorumlama (ya da daha spesifik olarak, derleme eksikliğinin) her ikisinin de komut dosyası yazma dillerinde ve genel olarak komut dosyası yazma görevlerinde faydalı özellikler olma eğiliminde olmalarıdır.
Performans da bu dillerde yazılmış program türleri için bir endişe kaynağı değildi (bu değildi), bu yüzden yine dinamik yazma ve yorumlama yükü, dillerde olduğu kadar büyük bir sorun değildi. bu değer performansı.
Python tipik olarak derlenir. Kuşkusuz, daha sonra yorumlanacak bayt koduna derlendi.
Perl de benzer şekilde çalışıyor.
Ortak Lisp, tipik olarak, yerel veya bayt kodlarından birine derlenir. Bu, uygulamalar arasında (ve çeşitli optimizasyon ayarlarına bağlı olarak bir uygulama içinde bir dereceye kadar) farklılık gösterir.
Evet. Tüm dinamik diller yorumlanmış bir dildir (ancak yorumlanan bir dil dinamik olmayabilir).
Nedeni basit: Dinamik ise, dinamizmi ikili derleme düzeyinde gerçekleştirmek için bir tercümana ihtiyaç duyar.
ex. : bir veriyi bir PHP değişkenine koyduğumuzda, daha sonra farklı türde bir veri daha eklediğimizde, her türün kendi ikili gösterim formatına sahip olması nedeniyle programımız ikili koda derlenemedi; tercüman ikili seviyedeki değişimleri dinamik bir şekilde yönetir