Cümlenin anlamı nedir “derlenmesini istedik, bu yüzden CPU'yu yanlış şeyler yapmıyor.”


10

Bu makaleyi okuyordum . Aşağıdaki paragrafa sahiptir.

Ve Scala hızlı mı oldu? Peki, hızlı tanımınız nedir? Java kadar hızlı. C veya Assembly kadar hızlı olması gerekmez. Python, Ruby'den önemli ölçüde daha hızlı değildir. Eşzamanlılıktan daha iyi yararlanarak daha az makine ile daha fazlasını yapmak istedik; derlenmesini istedik, bu yüzden CPU'yu yanlış şeyler yapmıyor.

Son cümlenin anlamını arıyorum. Yorumlanan dil CPU'yu "yanlış" şeyler haline getirecek mi?


3
Yorumlanan JVM bayt kodunu derleyen her şeyi çağırmak, kullanımı biraz liberal.
Rig

Yanıtlar:


47

Kod söylerse

A = A + 1

derlenmiş kod bunu yapar

add A, 1

yorumlanmış kod bunu (veya bazı varyasyonları) yapar

look up the location of A in the symbol table
find the value of A
see that 1 is a constant
get its value
add the value of A and the value of 1
look up the location of A in the symbol table
store the new value of A

fikir al?


3
Bazen basite indirgemek gerçekten does resim daha net ;-) yapmak (sadece tam olduğu: Birçok tanınmış tercümanlar optimize bazı iki örnek "uygulamaları" Burada arasında yarım yüzden uzakta adımların).
Joachim Sauer

3
@JoachimSauer: Elbette haklısın. Derlenmiş koda kıyasla, bir tercümanın 10 hız cezasından daha az faktörle çalışmasını sağlamak hala zordur. Dil, tüm zamanını matematik kütüphaneleri veya G / Ç gibi çağrılması gereken derlenmiş işlevlerde gerçekten harcayan bir dilse, yorumlama maliyeti bir sorun değildir.
Mike Dunlavey

1
Bu inanılmaz bir açıklama
Jamie Taylor

13

derlenmesini istedik, bu yüzden CPU'yu yanlış şeyler yapmıyor.

Kulağa derlenmiş ve yorumlanmıştan bahsediyor gibi geliyor. Büyük olasılıkla Twitter'ın tüm öyküsüne kadar, başlangıçta Ruby On Rails'te (yorumlanmış) geliştirildikten sonra arka plan işleme görevlerini Scala'ya (derlenmiş) taşıma.

Derlenmiş ve yorumlanmış kodun açıklaması burada .

Derlenmiş bir dilde, çalıştırılabilir bir dosya olarak kaydedilmeden önce girdiğiniz kod makineye özgü talimatlar kümesine indirgenir. Yorumlanan dillerle, kod girdiğiniz formatta kaydedilir. Derlenmiş programlar genellikle yorumlananlardan daha hızlı çalışır çünkü yorumlanan programlar çalışma zamanında makine yönergelerine indirgenmelidir.


İlk + 1'inizi verdiğiniz için mutluyum. P.SE'ye Hoşgeldiniz!
haylem

4
(Scala'nın - JVM'de olduğu gibi - teknik olarak sadece bayt-derlendiğini belirtmek gerekir).
haylem

Scala'nın JVM tabanlı olduğunu bilmiyordum. Yani muhtemelen JIT derlendi. Bu durumda, Twitter neden Ruby on Rails'tan JRuby'ye geçmedi? Derlenmiş olmanın faydasıyla bunun daha kolay bir göç olacağını düşünürdünüz.
KrisG

3
Aynı zamanda daha iyi eşzamanlılık modeli arıyorlardı ve Ruby'nin çöp koleksiyonuyla ilgili sorunları vardı. Makale bunu ayrıntılı olarak açıklamaktadır.
scrwtp

9

"Yanlış şeyler" burada yorumlayıcının kodu ayrıştırması ve işlemesi için gereken ek yük anlamına gelir. Yorumlanan ve derlenen diller kavramıyla bağlantılıdır. Kullanımda olan ve aşağıdaki kategorilerden birine giren çeşitli kod çevirisi modelleri vardır:

  • Yerel derleme - kaynak kodu doğrudan makine kodunda derlenir. Taşınabilirlik pahasına en iyi performans. Genellikle C ve C ++ ile ilişkilidir,
  • Ara derleme - kaynak kodu, daha sonra yürütülürken makine koduna yorumlanan veya derlenen (tam zamanında derleme) basitleştirilmiş bir ara dile (bayt kodu) derlenir. Yerel koddan daha iyi taşınabilirlik, yorumlamanın bazı yönlerini korurken (geç bağlama gibi) saf yoruma göre daha iyi performans. Örnekler arasında C #, Java ve JVM ve .NET CLR'yi hedefleyen diğer diller,
  • Yorum - kaynak kodu doğrudan makine koduna çevrilmez, bunun yerine özel bir tercüman programı tarafından yorumlanır ve yürütülür. Tercümanlar, saf uygulamada sofistike olarak farklılık gösterir, ancak kaynak kodunu satır satır ayrıştırmaya, analiz etmeye ve yürütmeye bağlıdır. Yorumlama, derlemeden daha fazla esneklik sağlar, dolayısıyla yorumlanmış diller, örneğin dinamik yazım veya yansımayı daha fazla kullanır. Yorumlanan diller, daha az kaynak plakası kodu gerektirdiklerinden ve hızlı prototiplemeye kendilerini iyi verdiklerinden, geliştirici verimliliğini arttırmak olarak görülür. Dezavantajı düşük performanstır. Genellikle JavaScript, Ruby veya Python ile ilişkilendirilir.

Dolayısıyla, yorumlanmış ve derlenmiş dil arasındaki seçim, neye daha çok değer veriyoruz, geliştirici üretkenliği veya performansı sorusuna dayanıyor. Makalede açıklanan göç, aynı düşünce tarzını izliyor gibi görünüyor, güçlü prototipleme dili Ruby, performans değerlendirmeleri nedeniyle JVM tabanlı Scala ile değiştirildi.


-1 cevabın ifade şekli, çok basit görünüyor. JIT ( tam zamanında derleme ) gibi şeyleri tamamen yok sayar - bu arada Scala'nın JVM / CLR üzerinde nasıl çalıştığı
gnat

Doğru. Cevabı yeniden yazdı, konuya olduğu gibi çok az şey katıyordu.
scrwtp

-3

Bu durumda the wrong stuffderlenmemiş kodda tip güvenliği eksikliği anlamına geldim .

Böylece, sadece kod yavaş yorumlamak değil, aynı zamanda daha adamcağız ...


8
Derlenmiş dillerin tür güvenli olduğunu ve yorumlanan dillerin güvenli olmadığını varsayıyorsunuz. Birçok karşı örnek var Örneğin, lisp derlenebilir ve güçlü bir şekilde yazılmaz, Haskell yorumlanabilir ve ÇOK tip güvenlidir
Zachary K

1
"Daha güvenli" ile "tip güvenli değil" eşitleme FUD satmak için ürünleri ile insanlar tarafından itilir olduğunu.
user16764

1
@ user16764: Doğru ise FUD değil. IME, ürün satmak için konuyu saçmalayan insanlar, dinamik yazım ve hatalar arasındaki bağlantıyı küçümsemeye çalışan kişilerdir. ("Bu yalnızca bir tür hatadır " vb.)
Mason Wheeler
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.