Asm.js'yi anlamada yanılmış olduğuna inanıyorum .
Öncelikle, Sıkça Sorulan Sorular bölümünden
S. asm.js yeni bir dil midir?
A. Hayır, sadece JavaScript'in bir alt kümesidir.
Ve sordu açıklama eklendi :
Ancak bir [asm.js uygulaması] C ++ dilinde nasıl yazılabilir?
Bir "asm.js uygulaması" yazmazsınız, asm.js C ++ kodunuzu derlemek için bir hedef 1'dir .
Bu John Resig tarafından makale daha iyi asm.js cihazların nasıl kullanılacağı konusunda açıklayabilir detaylar bir dizi sağlar.
Bu resimle başlayarak:
asm.js'nin emscripten'in çeviri hedefi olduğunu görebilirsiniz . Emscripten, LLVM bayt kodunu JavaScript'e dönüştürür ve asm.js bir JavaScript alt kümesidir. Asm.js 'nin sınırlı JavaScript alt kümesinde kalmak, kodun optimize edilmesini ve daha hızlı çalışmasını sağlar.
Siz de istediniz:
Ve eğer kodu C ++ 'da yazarsam, js API-s nasıl kullanılır?
Yine, noktayı kaçırıyorsun. Asm.js, mevcut C / C ++ uygulamalarının JavaScript'e taşınmasını sağlar, böylece bir tarayıcıda çalıştırılabilirler. Normalde JS API'lerini C / C ++ kodunuzda kullanamazsınız ve asm.js ile ilgili sihirli bir şey yoktur.
JS API'leri gerektiren bir yeni uygulamanız varsa, o zaman uygulamayı JS'ye yazmalı ve C ++ ile yazmayı denemeye çalışarak futz yapmamalı ve ardından JavaScript'i kullanmalısınız.
Ve Resig'in makalesine geri dönersek, sorunuz için iki önemli teklif var:
yakın gelecekte Asm.js'yi hedef alacak uygulamaların türü, tarayıcıda çalışmanın taşınabilirliğinden faydalanacak ancak JavaScript’e doğrudan bağlantı noktasının olanaksız olacağı karmaşıklık düzeyine sahip olan uygulamalardır.
ve
Muhtemelen yukarıdaki koddan görebileceğiniz gibi Asm.js elle yazılmış şekilde tasarlanmamıştır. ... Şu anda Asm.js için en yaygın kullanım durumu, C / C ++ ile JavaScript arasındaki uygulamalardadır. Bu uygulamaların neredeyse hiç biri DOM ile etkileşimli bir şekilde WebGL ve benzerlerini kullanmanın ötesinde etkileşime girmez.
Bunun yerine yapmayı düşünmek isteyebileceğiniz şey, JavaScript'i derlemiş olduğunuz C ++ 'a yapılan çağrılarla birlikte ihtiyacınız olan JS API'lerini çağıran bir JavaScript programına sahip olmak. JavaScript'den C ++ kodunu nasıl arayacağınızı görmek için bu emscripten eğitimine bakın.
Bazı ek araştırmalar için, emscripten, C ++ kodunu nasıl alacağınızı , LLVM'de nasıl çalıştıracağınızı ve asm.js.'yi nasıl hedefleyeceğinizi anlamanıza başlamanıza yardımcı olabilecek bir öğreticiye sahiptir.
1 Kesinlikle konuşma, bu doğru değil. C / C ++ kodu ne derleyeceğinin farkında değil, bu yüzden asm.js'yi gerçekten hedef olarak adlandıramam. Başka bir araç (emscripten) LLVM çıktısını alır ve ardından asm.js uyumlu JavaScript'e çevrilir. Ama ben buna hedef diyeceğim çünkü anlaşılması daha kolay.