ASM.js nedir ve herkes için anlamı nedir?


27

ASM.js adlı bu proje hakkında telaşlı duymaya başladım . Şu anda onların web sitesi korkunç ve kafa karıştırıcı. İşte web araştırmamdan bildiklerimi.

  • Yüksek düzeyde optimize edilebilecek bir JavaScript alt kümesidir. Tahmin ediyorum, çünkü dilin daha dinamik kısımlarını engelliyor.
  • ASM.js için derlenen kodun performansı C hızının yaklaşık yarısında çalışır (ışık değil).
  • Amaç, derleyicilerin hedef dillerini ASM.js.
  • Firefox, pişirilen ASM.js optimizasyonu ile gönderilecek.
  • Mozilla ve Unreal ekipleri, Unreal Engine'i web ile bağlantıya geçirdi ve yakın bir hızla Firefox'ta çalıştı.

Bunun gerçekte ne olduğu veya fayda veya nihai amaç hakkında web'de somut bir bilgi yok gibi görünüyor . Sunucu tarafı kod tabanlarımı derleyebiliyor muyum ve tarayıcıda yerel hızlara yakın bir hızda çalıştırmam mümkün mü? Geliştiriciler için sonuçlar nelerdir?

Yanıtlar:


21

Zaten ne tarif olduğunu . Kullanımı, tüm tarayıcılarda çalışan düşük seviyeli bir dil, bazılarında oldukça hızlı ve bazılarında çok hızlı olmasıdır. Bunu yaptığınız şey, diğer programlama dilleriyle yaptığınız kadar açık uçludur.

Mozilla'nın en çok üzerinde durduğu görünen kullanım senaryosu şudur: Dilleri LLVM arka uçlarıyla (en belirgin şekilde C ve C ++) JavaScript'i Emscripten aracılığıyla derleme yolları vardır. asm.js, Emscripten'in zaten yayınladığı şeye çok yakın olduğundan, bu, Emscripten kodunun (günümüzün JavaScript JIT derleyicilerinde zaten etkileyici şekilde hızlıdır) daha hızlı hale gelmesini ve mevcut kod tabanlarının web'e taşınması hedefini daha da artırmasını sağlar. Yine, bunu tam olarak ne için kullanıyorsunuz kararınız. Oyun taşıma tek kullanımlık bir durumdur (Mozilla'nın görünüşe göre aktif bir şekilde katıldığı), ancak C ve C ++ ile yazılmış ve sayısının bir kısmı web sitesinin kullanışlı olabileceği sayısız şey vardır. Bazıları fizibilite konusunda hiçbir garanti vermeden etrafta salınıyor (artı kendi tasarımlarımın bir kısmını):

  • JavaScript'i / web sitelerini daha fazla yapmaya, yeni bir web standardı oluşturmaya gerek kalmadan ve bunu uygulamak için ayrı ayrı tarayıcılara bağlı kalmadan güçlendirmek için genel amaçlı algoritmaları (örn. Zlib, libjpeg, openssl, FFT uygulamaları) taşıma.
  • Tercümanları taşıma, böylece JavaScript dışındaki diller tarayıcıda daha az ek yük ve minimum taşıma çabasıyla çalışabilir.
  • Asm.js dosyasını daha fazla derleyici için arka uç olarak kullanmak, özellikle JavaScript ile iyi eşleşmeyen ve özelliklerinin çoğuna ve genel giderlerine ihtiyaç duymayanlar. Bir örnek, hafıza tahsisi olmadan hızlı sayısal işler için tasarlanmış bir dil olabilir.
  • Asm.js kullanma JIT oluşturmak için de JavaScript. Herhangi bir dili uygulayabilir - örneğin, ActionScript .
  • Aynı şekilde, mevcut JIT derleyicilerinin tarayıcıda çalışacak şekilde taşınması (tercümanların taşınması, JS üzerinden etkin bir şekilde genel gider). Bu muhtemelen sadece JIT derleyicileri PyPy'de olduğu gibi otomatik olarak oluşturulduğunda uygulanabilir.

2
İşte bir başka güzel açıklama: ejohn.org/blog/asmjs-javascript-compile-target
Jarrod Nettles

1
İşte bir JIT'i asm.js.'ye taşımak için kavramın bir kanıtı. Bu eşsiz bir satış noktasıdır, ortaya çıkan çoğu platform JIT dostu değildir.
Tobu

Asm.js'nin JIT derlemesini nasıl desteklediğinin bir açıklaması var mı? Bununla ilgili herhangi bir bilgi bulamıyorum. En çok güvenlik etkilerinin nasıl ele alındığı ile ilgileniyor.
Roman Starkov

@romkyns Asit.js'nin tarayıcı koduyla makine koduna JIT derlemesi veya asit.js için JIT derlemesi (bir JavaScript programı tarafından)? Birincisi, en azından Firefox’ta, saf-JS JIT derleyicilerinin makine kodu üretme tesisleri yeniden kullanılıyor. Asm.js yalnızca JS'yi arayabildiğinden, aritmetik işlem gerçekleştirebildiğinden ve dizinin aralık içi dizin denetlemeli bir yığın dizisini okuyarak / yazdığında, güvenlik, JS yürütme güvenliği kadar iyidir. Sonuncusu için, sadece asm.js kaynak kodunu üretiyorsunuz ve tarayıcının çalıştırmasına izin veriyorsunuz ve daha önce bahsettiğimin ötesinde ek güvenlik çıkarımı yok.

(İkincisini kastettim) Elbette; Her nasılsa, JIT derleyicilerinin yerel makine kodunu gönderdiğini hayal ettim. Açıklama için teşekkürler!
Roman Starkov

4

ASM.js'yi büyük bir ikili olarak hayal edin ArrayBuffer, bir prologue yönergesiyle başlayan ve bir yığın ve bir dizi JavaScript modülü olarak adlandırılan bir derleme olarak hayal edin: "use asm";ve derleme dillerine benzer şekilde ham ikili verilerde hızlı düşük seviyeli işlemler gerçekleştirin. Bu modüller elle yazılmış veya LLSM kodundan Emscripten gibi betikler ile daha iyi derlenmiş olabilir. Mozilla OdinMonkey motoru sayesinde performansları artırılabilir, ancak modern ECMAScript tercümanlarının çoğu ile geriye dönük olarak uyumludurlar.

ASM.js oyunlara sınırlı değildir, hatta Qt gibi, tarayıcınızda uygulamaları bütün çalıştırabilirsiniz bu !

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.