Aplikasi asm.js sangat cepat (mendekati kecepatan asli C ++):
http://kripken.github.io/mloc_emscripten_talk/micro4b.png
Tetapi bagaimana mungkin untuk menulis satu di C ++, mengonversinya menjadi kode LLVM, kemudian melakukan beberapa trik dengan emscripten / asm.js? Saya belum menemukan tutorial tentang itu.
Dan jika saya menulis kode dalam C ++, lalu bagaimana menggunakan js API-s, misalnya XMLHttpRequest, WebSockets, Canvas atau WebGL?
c++
javascript
llvm
LO kaka
sumber
sumber
Jawaban:
Saya percaya Anda salah dalam memahami asm.js Anda .
Pertama, dari FAQ mereka
Dan Anda meminta klarifikasi menambahkan :
Anda tidak menulis "asm.js aplikasi", bukan asm.js adalah target 1 untuk mengkompilasi C ++ kode untuk.
Ini artikel oleh John Resig menyediakan sejumlah detail yang mungkin lebih menjelaskan bagaimana asm.js akan digunakan.
Dimulai dengan gambar ini:
Anda dapat melihat bahwa asm.js adalah target terjemahan emscripten . Emscripten menangani menerjemahkan bytecode LLVM ke dalam JavaScript, dan asm.js adalah bagian dari JavaScript. Tetap berada dalam subset terbatas JavaScript asm.js memungkinkan kode dioptimalkan dan berjalan lebih cepat.
Anda juga bertanya:
Sekali lagi, Anda agak kehilangan intinya. Asm.js memungkinkan porting aplikasi C / C ++ yang sudah ada ke dalam JavaScript sehingga dapat dijalankan di dalam browser. Anda biasanya tidak dapat menggunakan API JS dalam kode C / C ++ Anda, dan tidak ada yang ajaib tentang asm.js untuk mengizinkannya.
Jika Anda memiliki aplikasi baru untuk menulis yang membutuhkan JS API maka Anda harus menulis aplikasi dalam JS dan tidak lanjut dengan mencoba menulis dalam C ++ dan kemudian port ke JavaScript.
Dan kembali ke artikel Resig, ada dua kutipan kunci untuk pertanyaan Anda:
dan
Apa yang Anda mungkin ingin lakukan adalah memiliki program JavaScript yang memanggil JS API yang Anda perlukan bersamaan dengan membuat panggilan ke C ++ yang Anda kompilasi ke JavaScript. Silahkan lihat pada ini emscripten tutorial untuk melihat bagaimana memanggil C ++ kode dari JavaScript.
Untuk beberapa penelitian tambahan, emscripten memiliki tutorial yang dapat membantu Anda memulai dengan memahami cara mengambil kode C ++, menjalankannya melalui LLVM, dan kemudian menargetkan asm.js.
1 Sebenarnya, itu tidak benar. Kode C / C ++ tidak mengetahui apa yang akan dikompilasi, jadi saya tidak bisa benar-benar memanggil asm.js target. Alat lain (emscripten) mengambil output LLVM dan kemudian diterjemahkan ke JavaScript yang sesuai dengan asm.js. Tapi saya akan menyebutnya target karena lebih mudah dimengerti.
sumber
Ya, Anda dapat menulis kode C ++ dan mengompilasinya ke asm.js, menggunakan emscripten. Saya belum mencobanya sendiri, dan saya tidak yakin seberapa siap ini untuk prime time. Tampaknya cukup baik untuk menjalankan banyak game.
Berikut ini adalah tutorialnya: http://kripken.github.io/emscripten-site/docs/getting_started/Tutorial.html . Melihat tutorialnya, sepertinya cukup mudah untuk mengkompilasi kode C ++:
sumber
emcc
valid?Cara termudah adalah dengan menggunakan WCPP , paket yang memungkinkan Anda mengimpor C ++ hampir secara langsung ke proyek Node Anda.
C ++ kami
Di terminal (untuk mengkompilasi C ++ kami)
JavaScript kami
Untuk informasi lebih lanjut, lihat Paket NPM atau Git Repo
sumber