JavaScriptチュートリアルからの呼び出しに従っています。ノードを使用する代わりに、Web ブラウザーから直接呼び出しています。
hello_world/index.html
<!DOCTYPE html>
<html lang="en">
<head></head>
<body>
<script src="hello_world.js"></script>
<script type='text/javascript'>
var hello_world = cwrap('hello_world', 'number', []);
var result = hello_world();
console.log("result: ", result);
</script>
</body>
</html>
hello_world/src/main.rs
#![feature(link_args)]
#[link_args = "-s EXPORTED_FUNCTIONS=['_hello_world']"]
extern {}
#[no_mangle]
pub fn hello_world() -> isize {
println!("Hello World!");
41 + 1
}
fn main() {
// Intentionally left blank
}
指示:
cargo build --target asmjs-unknown-emscripten
Safari のエラー メッセージ:
TypeError: Module["dynCall_ii"] は関数ではありません。(「Module"dynCall_ii"」では、「Module["dynCall_ii"]」は定義されていません)
Firefox Nightly のエラー メッセージ:
TypeError: Module.dynCall_ii は関数ではありません。
関数を印刷するだけの場合:
var hello_world = cwrap('hello_world', 'number', []);
console.log("function: ", hello_world);
私は(Firefox Nightlyで)得ます:
関数: 関数 asm._hello_world()