Statik olarak yazılan dillere göre dinamik olarak yazılan dilleri hızlandırmayı zorlaştıran şey. Başka bir deyişle, yürütme hızını optimize etmeyi kolaylaştıran, statik olarak yazılan dillerden kaynaklanan özellik nedir?Dinamik olarak yazılan diller neden yavaş?
cevap
Statik olarak yazılan dillerde özniteliklere/yöntemlere erişilirken, aramalar genellikle statik işlev adresine indirgenebilir. Daha yavaş olan sanal yöntemlerde bile, arama sadece bir veterinerden bir mahsup okumaktır.
Dinamik dillerde, adlar dizelere dayanmaktadır. foo.bar
bakmak ister misiniz? Yerel değişken karma tablosunda foo
'u bulun, ardından foo
hash tablosunda bar
'u bulun. Bazı dinamik dillerde, Python ve Ruby gibi, dinamik olarak oluşturulan özniteliklerin uygulanması için ek aramalar/yöntem çağrıları olabilir.
bu aramalarının tamamı
hızlı yapmak çok sert bulunmaktadır. Python, dünyadaki en iyi ayarlanmış hash tablosu uygulamalarından birine sahiptir ve JavaScript'in hızlı bir şekilde milyonlarca dolarlık araştırma parası dökülmüştür. Bu taktikler işe yarar - ne kadarını görmek için Chrome'un JavaScript'i IE 5 ile karşılaştırın - ancak bunlar, işlev çağrılarını statik olarak oluşturmaktan çok daha zordur.Bir dilin "dinamik" inin nasıl farklı olabileceğini belirtmeliyim. Python, bazı durumlarda güzel olan değişken aramalarla etkileşimde bulunmanın birkaç farklı yoluna sahiptir, ancak optimizasyonu çok zorlaştırır. Common Lisp ve Smalltalk gibi diğer dinamik diller, birçok kullanım durumunda statik dillerle eşit olarak rekabet edebilir, çünkü dinamik aramalar/modifikasyonlar daha fazla kontrol edilir.
Dinamik olarak yazılan diller çoğu zaman bir tercüman tarafından çalıştırılırken, statik olarak yazılan diller genellikle makine koduna derlenir.
Biraz basitleştirici gibi görünüyor. Statik olarak yazılan tüm diller, herhangi bir statik CLR veya JVM dili dahil olmak üzere, makine koduna kadar derlenemez. Dinamik olarak yazılan tüm diller yorumlanmaz, örneğin birçok Lisp bytecode'a kadar derlenebilir ve Python ve PHP için birçok derleyici vardır. – Juliet
Common Lisp aslında makine koduna derlenebilir. –
En iyi Common Lisp uygulamaları makine koduna derlenir. Bazılarının tercümanları yok, sadece JIT derlemesi yapıyorlar. –
Bazı derleme zamanı en iyileştirmeleri, yalnızca bir değişkenin tam türü biliniyorsa gerçekleştirilebilir.
Dinamik olarak yazılan diller, genellikle türü belirlemek ve değerin tür için doğru olduğundan emin olmak için genellikle mantık ekledi. Bu piton örneğe
Görünüş:
def fact(n):
if n==0:
return n
return n*fact(n-1)
n nedir? Bu bir numara mı? Bu bir String mi? Daha önce tanımladığınız bir sınıf mı? Derleyicinin hangi girdiye ulaşacağını bilmesinin bir yolu yoktur. Çalışma zamanında çok fazla kontrol yapmanız gerekir, bu da basit operasyonlar için daha örtülü bir iş yaptığınız anlamına gelir.
Aslında ocaml, F # ve Haskell'e destek türü çıkarımı (http://en.wikipedia.org/wiki/Type_inference), bu yüzden derleyici gibi bazı languagse, tip ek açıklamalar olmaksızın kullanıma göre bir değişken veri türünü belirlemek . Örneğin, 'n == 0', bir tamsayı değişkeni için bir eşitlik testi, 'n' bir tamsayı olduğunu gösterir. Derleyicinin 'n' bir tamsayı olduğunu bildiğinden, 'dönüş n' işlevi, bir tamsayı da döndürdüğü anlamına gelir. Böylece, işlevin bir int aldığını ve int döndürdüğünü belirleyebiliriz. – Juliet
@Princess: Ah, ama makine boyutunda bir int veya bignum mu? Bunu hala test etmelisiniz (ancak verimli bir şekilde yapılabilir) – simon
Hala çok statik düşünün - dinamik yeniden derleme ve belirtim hakkında (kendi belgelerini okuyun). Aslında, dinamik bir derleyici, fiili bir bilgi birikimine sahip olarak, statik bir derleyiciden bile daha hızlı kodlar üretebilir, çünkü değer aralıkları vb. Hakkında bile bilgi sahibi olabilir. Muhtemelen, dil yapma çabasına ne kadar para yatırılacağı sorusu olabilir. hızlı ... – blabla999
Dinamik olarak yazılan diller, yürütme sırasında türün değişebileceğinden, çalışma zamanında tüm denetimlerini yapmalıdır.
Statik yazılan diller, derleme sırasında tüm türleri çözer, böylece maliyet bir kez önden tüketilir.
Bu, dinamik yazılan dillerin genellikle daha yavaş olmasının ana nedenidir. Ama düşünülmesi gereken başka şeyler var. Çok fazla derleyici veya yorumlayıcıya, GC uygulamasına, dağıtım tablosu düzenine ve arama algoritmalarına diğer optimizasyonlara bağlıdır.
Her şey uygulamaya bağlıdır: Bir dinamik yazılan dil, derlenmiş bir dilden daha hızlı olabilir, bunu gerçekleştirmek için daha fazla iş gerektirir.
Dinamik dilleri derlenebilir ;-) – Ponkadoodle
Dinamik olarak yazılan bir dilin çok iyi uygulanabilmesi, statik olarak yazılan bir dilin çok zayıf bir uygulamasından daha hızlı olabilir. – niagr
Sorunu, dinamik olarak yazılmış diller aslında yavaş olmadığından biraz kapalıdır. Pek çok örnek uygulamada olabilir, ancak diğerleri hızlıdır (hızlı "c ile makul şekilde karşılaştırılabilir" veya bunun gibi bir şey, ortak lisp).
Birçok dinamik diller bir VM üzerinde çalışan ve hatta önlenebilir yavaşlamalar neden olabilir, hangi yorumlanır. Belli bir seviyede, statik dil derleyicileri (veya bir şey hakkında dinamik olmayacak sözler vermiş dinamik olanlar) için tamamen dinamik bir durumda mümkün olmayan optimizasyonlar vardır. Sadece örneğin diyelim ki, piton ve C++ arasındaki farklar hakkında düşünme eğer
Ancak, gerçekten konudur statik vs dinamik değil.
Ayrıca, daha yeni Javascript bytecode çevirmenlerinin bazılarının genellikle C++ kadar hızlı performans gösterdiğini belirtmek de hoş olabilir. – eyelidlessness
- 1. Sağdan sola yazılan diller Python
- 2. C# Dinamik olarak yazılan dil
- 3. SDL_GL_SwapBuffers() aralıklı olarak yavaş
- 4. resolveInfo.loadLabel() neden bu kadar yavaş yavaş?
- 5. Neden array.min çok yavaş?
- 6. JQuery'm neden yavaş çalışıyor?
- 7. QTreeView'da yavaş seçim, neden?
- 8. Java 7'deki Dinamik Diller için Destek Ne Olur?
- 9. Neden alıyorum Dinamik olmayan varmı dinamik olarak bağlayamıyorum?
- 10. Dinamik parametre, derleyicinin, yöntem dönüşünün dinamik olduğunu düşünmesine neden olur.
- 11. Javascript: neden kapatma değişkenine erişim yavaş olabilir
- 12. Neden Eratosthenes Elek çok yavaş?
- 13. Neden javascript in-in yavaş?
- 14. FizzBuzz programı yavaş görünüyor: Neden?
- 15. Neden parametreler argümanlar olarak geçirildiğinde daha yavaş çalışabilir Sp_executesql yapar
- 16. Neden CollectionViewSource.SortDescriptions kullanarak sıralama yavaş?
- 17. Windows makinemde neden yavaş kalıyor?
- 18. Neden amazon s3 yavaş mı?
- 19. PDO bağlantısı neden yavaş çalışıyor?
- 20. Uygulama # çağrısı neden yavaş olsun?
- 21. DateTime.Parse neden bu kadar yavaş?
- 22. Neden getBoundingClientRect IE8'de yavaş?
- 23. Neden benim nodejs istekleri yavaş?
- 24. Neden IE8'de CSS Hover Yavaş?
- 25. StyleCop Diğer diller için
- 26. MTU Desteklenen Diller
- 27. PHP yavaş yavaş mysqli
- 28. JAX-RS response.getEntity yazılan
- 29. cordova css dönüşümleri için bile neden yavaş?
- 30. Delegeleri dinamik olarak
Gereksinim duyduğunuzda, Common Lisp'te statik olarak türleri belirtmek mümkündür. Hız için oluşturulmuş bir uygulama çok hızlı kod üretebilir. –