Tôi tin rằng bạn đang nhầm lẫn trong sự hiểu biết của bạn về asm.js .
Trước hết, từ Câu hỏi thường gặp của họ
Q. Asm.js có phải là ngôn ngữ mới không?
A. Không, đó chỉ là (một tập hợp con) của JavaScript.
Và bạn đã yêu cầu làm rõ thêm :
Nhưng làm thế nào có thể viết một [ứng dụng asm.js] trong C ++
Bạn không viết "ứng dụng asm.js", thay vào đó asm.js là mục tiêu 1 để biên dịch mã C ++ của bạn.
Điều này viết này của John Resig cung cấp một số chi tiết có thể giải thích rõ hơn về cách sử dụng asm.js.
Bắt đầu với hình ảnh này:
bạn có thể thấy asm.js là mục tiêu dịch thuật của emscripten . Emscripten xử lý dịch mã byte LLVM sang JavaScript và asm.js là một tập hợp con của JavaScript. Ở trong tập hợp con bị hạn chế của asm.js cho phép mã được tối ưu hóa và chạy nhanh hơn.
Bạn cũng đã hỏi:
Và nếu tôi viết mã bằng C ++, thì làm thế nào để sử dụng API js
Một lần nữa, bạn là loại thiếu điểm. Asm.js cho phép chuyển các ứng dụng C / C ++ hiện có sang JavaScript để chúng có thể chạy trong trình duyệt. Thông thường bạn sẽ không thể sử dụng API JS trong mã C / C ++ của mình và không có gì kỳ diệu về asm.js để cho phép điều đó.
Nếu bạn có một ứng dụng mới để viết cần API API thì bạn nên viết ứng dụng đó bằng JS và không viết bằng cách cố gắng viết bằng C ++ và sau đó chuyển sang JavaScript.
Và quay trở lại bài viết của Resig, có hai trích dẫn chính cho câu hỏi của bạn:
loại ứng dụng sẽ nhắm mục tiêu Asm.js, trong tương lai gần, là những ứng dụng sẽ được hưởng lợi từ tính di động của trình duyệt nhưng có mức độ phức tạp trong đó một cổng trực tiếp tới JavaScript sẽ không thể thực hiện được
và
Như bạn có thể thấy từ đoạn mã trên Asm.js không được thiết kế để viết bằng tay. ... Trường hợp sử dụng phổ biến nhất cho Asm.js ngay bây giờ là trong các ứng dụng tuân thủ từ C / C ++ đến JavaScript. Hầu như không có ứng dụng nào trong số này tương tác với DOM theo cách có ý nghĩa, ngoài việc sử dụng WebGL và những thứ tương tự.
Thay vào đó, những gì bạn có thể muốn xem xét thực hiện là có một chương trình JavaScript gọi API API mà bạn cần cùng với thực hiện các cuộc gọi đến C ++ mà bạn đã biên dịch thành JavaScript. Có một cái nhìn về hướng dẫn này. để xem cách gọi mã C ++ từ JavaScript.
Đối với một số nghiên cứu bổ sung, emscripten có một hướng dẫn có thể giúp bạn bắt đầu với việc hiểu cách lấy mã C ++, chạy nó thông qua LLVM và sau đó nhắm mục tiêu asm.js.
1 Nói đúng ra, điều đó không đúng. Mã C / C ++ không biết nó sẽ được biên dịch thành gì, vì vậy tôi thực sự không thể gọi asm.js là mục tiêu. Một công cụ khác (emscripten) lấy đầu ra LLVM và sau đó dịch sang JavaScript tuân thủ asm.js. Nhưng tôi sẽ gọi nó là mục tiêu vì nó dễ hiểu hơn.