-
Notifications
You must be signed in to change notification settings - Fork 3
Special exports __zigar
Zigar exposes certain utility functions through the symbol __zigar
:
Return a promise that resolves when WebAssembly code finishes compiling and all Zig functions can be called synchronously.
const std = @import("std");
pub fn hello() void {
std.debug.print("hello\n", .{});
}
import { __zigar, hello } from './special-exports-example-1.zig';
const { init } = __zigar;
hello();
hello
Use of this function is only necessary when topLevelawait
is
false
. For node-zigar, this function is useless. It returns a promise that resolves immediately.
Unload the module from memory. Imported functions would no longer work afterward. This function is meant mainly for automated testing where a large number of modules would get loaded and used only once.
``js import { __zigar, hello } from './special-exports-example-1.zig'; const { abandon } = __zigar;
hello(); abandon(); try { hello(); } catch (err) { console.log(err.message); }
hello Module was abandoned
Unloading does not happen immediately. This function merely removes all references to the module,
allowing it to be garbage-collected. It can fail if there're objects allocated from the fixed
memory heap sitting somewhere.
## released()
Return `true` if module has been unloaded from memory; `false` otherwise.
```js
import { __zigar } from './special-exports-example-1.zig';
const { abandon, released } = __zigar;
abandon();
// force garbage collection to occur (need --expose-gc)
gc();
// give V8 a chance to invoke object finalizers
await new Promise(r => setTimeout(r, 0));
console.log(released());
Use a different console object to display output to stdout and stderr. Only its log
method will get
called, always with a single string as argument.
import { __zigar, hello } from './special-exports-example-1.zig';
const { connect } = __zigar;
connect({
log(s) {
console.log(`Zig output: "${s}"`);
}
});
hello();