Öyleyse, yorumlanan kısmın dil şartnamesinde bir gereklilik olduğu veya bir dilin ve onun birçok uygulamasının arasındaki farka bakarken dilin tercüme edilmiş bir programlama dili olduğunu söylemek yanıltıcı mıdır?
ECMAScript dil meraklılarının sık sık terim "ES tercüman" ECMAScript'e bir uygulamaya başvurmak için kullanın, ancak Spec bu terimi kullanmıyor. Özellikle dile genel bakış , dili yorumlayıcı-agnostik terimlerle açıklar:
ECMAScript nesne tabanlıdır: temel dil ve ana bilgisayar olanakları nesneler tarafından sağlanır ve ECMAScript programı bir iletişim nesnesi kümesidir.
Bu nedenle EcmaScript, G / Ç'ye veya dış dünyaya başka herhangi bir bağlantıya izin verenler de dahil, ancak bir tercüman gerektirmeyenler de dahil olmak üzere nesne tanımları sağlayıcısı olarak tanımlanan bir "ana bilgisayar ortamı" varsaymaktadır.
Dilde ifade ve ifadelerin semantiği, tercümanlarda önemsiz bir şekilde uygulanan tamamlama belirtimi açısından tanımlanır , ancak belirtim bunu gerektirmez.
8.9 Tamamlama Şartnamesi Türü
Tamamlama tipi tabloların davranışlarını açıklamak için kullanılır ( break
, continue
, return
ve throw
) kontrol yerel olmayan transfer gerçekleştirin. Tamamlanma türden değerlerin formu (içinde üçe tipi , değer , hedef ), tip biridir normaldir , kırmak , devam , dönüş veya atmak , değer herhangi ECMAScript dil değer veya boş ve hedef herhangi ECMAScript kimliğidir veya boş .
Burada kullanılan “ani tamamlama” bir ile herhangi tamamlanması anlamına gelir türü dışında , normal .
Yerel olmayan kontrol transferleri, yerel veya bayt kodu derlemeye izin veren atlamalarla birlikte talimat dizisine dönüştürülebilir.
"EcmaScript Altyapısı" aynı fikri ifade etmenin daha iyi bir yolu olabilir.
Görünüşe göre JavaScript için statik bir derleyici yok.
Bu doğru değil. V8 "tercüman" dahili olarak yerel kod için derlenir, Rhino isteğe bağlı olarak dahili olarak Java bytecode'unu derler ve çeşitli Mozilla tercümanları ({Trace, Spider, Jager} Monkey) bir JIT derleyicisi kullanır.
V8 :
V8, çalıştırmadan önce JavaScript'i yerel makine koduna derleyerek, bayt kodunu çalıştırarak veya yorumlayarak performansı artırır.
Gergedan :
public final void setOptimizationLevel(int optimizationLevel)
Mevcut optimizasyon seviyesini ayarlayın. Optimizasyon seviyesinin -1 ile 9 arasında bir tamsayı olması beklenir. Herhangi bir negatif değer -1 olarak yorumlanır ve 9'dan büyük herhangi bir değer 9 olarak yorumlanır. Kullanılmış. 0 - 9 arasındaki seviyeler, sınıf dosyalarının oluşturulabileceğini gösterir. Daha yüksek optimizasyon seviyeleri, çalışma zamanı performansı için derleme süresi performansını dengeler. Optimizer paketi çalışma zamanında mevcut değilse, optimizer seviyesi -1'den büyük olamaz.
TraceMonkey :
TraceMonkey, Mozilla'nın JavaScript® motoruna (“SpiderMonkey” olarak bilinir) yerel kod derlemesi ekler. UC Irvine'de geliştirilen “iz ağaçları” adı verilen bir tekniğe ve Tamarin Tracing projesiyle paylaşılan kod ve fikirlere dayanıyor. Net sonuç, hem tarayıcı kromunda hem de Web sayfası içeriğinde büyük bir hız artışıdır.