2010-12-28 26 views
8

(sayfa 46), yazarlar bir not şunu ifade: parçası olarak derlenmiş zamanDerlenmiş kod, kabuktan ayrıldığında bir tane mi? <a href="http://www.manning.com/logan/" rel="nofollow">Erlang and OTP in Action</a> yılında

Bazı garip köşe durumda olduğunu ortaya çıkabilir, kabukta değerlendirilen kod aynı kodundan biraz farklı davranır Bir modülün Böyle bir durumda derlenmiş versiyon altın standarttır. Kabuk, ifadeleri yorumlarken aynı şeyi yapmak için elinden gelenin en iyisini yapmaya çalışır.

bu küsur köşe durumlarda biri veya birkaçı düşünebiliyor musunuz? Bu durumlarda hafif farklar hangileridir?

cevap

7

Erlang yorumlayıcısı, erl_eval, derlenmiş kod gibi davranması çok zor çalışır. Eğer değilse, büyük olasılıkla bir böcek. Bir durumda dışında ve mesajlar alınıyorsa

. Derlenmiş kod, mesaj sırasına erişmek ve bunları yönetmek için dahili talimatlara erişebilir. Tercüman bunu yapamaz. Şöyle olmalıdır: aslında iletileri sıradan kaldırın (receive X -> X end ile daha fazla veya daha az); alma desenleriyle eşleşip eşleşmediklerini görmek için onları test edin; uymayanları saklayın; ve şu anda istenmeyen tüm iletileri kuyruğa geri koyun (tüm mesajlarını alarak ve daha sonra kendilerine geri göndererek). Bu, bir mesaj geldiğinde, derlenmiş koddaki mesaj sırasındaki aynı yerde sonuçlanmayacağı kısa bir zaman olduğu anlamına gelir.

8

En önemli fark, derlenmiş kodun ... iyi .. derlendiği halde, kabuğun yorumlanmasıdır. Bu, yürütme hızında ve işlevin bellek kullanımında gözle görülür farklılığa sahiptir. Başka bir deyişle, yorumlanmış varyantın daha yavaş olduğunu veya derlenmiş sürüm yokken tüm belleğinizi kullandığını görebilirsiniz. Bu sorun, bir çok Erlang programcısının ısırdığı bir problemdir. Erlang'in diğer dillere göre oldukça yavaş olduğunu düşünürken, gerçekte derlenmiş yorumlanmış bir kod testidir.

Paragraf koruyucu bir önlemdir. Temel olarak yorumlayıcı ve derleyici, bir fonksiyonun tüm giriş/çıkışları konusunda hemfikir olmalıdır. Ama ne yazık ki bu her zaman böyle değildir. Pratikte yorumlayıcı ve derleyici farklı yürütme motorlarıdır ve dolayısıyla farklı olabilir. HiPE ile yerel derlemeyi yaparsanız, değişiklikler daha da büyük olabilir. Genellikle problemler IEEE 754 kayan nokta sayıları etrafında ortaya çıkar.

+1

Hız farkının sizi alabileceği bir durum, eğlencenin kabuğunda oluşturulduğu bir durumdur. Derlenmezler ve derlenmiş kodlara geçtikleri zaman bile her zaman yorumlanırlar. – rvirding

İlgili konular