一个用于Deno的WebAssembly系统接口实现。

FrancisJudy 发布于5月前

WebAssembly System Interface implementation for Deno

This package provides an implementation of the WebAssembly System Interface for the Deno TypeScript runtime.

Status

This is a work in progress so if a function isn't implemented, hit refresh.

Name Status Notes
args_get  
args_sizes_get  
environ_get  
environ_sizes_get  
clock_res_get  
clock_time_get  
fd_advise   This has no obvious path to implementation at this time.
fd_allocate   This has no obvious path to implementation at this time.
fd_close  
fd_datasync   This is blocking on getting fdatasync(2) implemented upstream in Deno.
fd_fdstat_get This currently does not write flags and rights as we do not track those at the moment.
fd_fdstat_set_flags   This has no obvious path to implementation at this time.
fd_fdstat_set_rights    
fd_filestat_get   This is blocking on getting fstat implemented upstream in Deno.
fd_filestat_set_size   This is blocking on getting ftruncate implemented upstream in Deno.
fd_filestat_set_times  
fd_pread  
fd_prestat_get  
fd_prestat_dir_name  
fd_pwrite  
fd_read  
fd_readdir    
fd_renumber  
fd_seek  
fd_sync This is blocking on getting fsync(2) implemented upstream in Deno.
fd_tell  
fd_write  
path_create_directory  
path_filestat_get  
path_filestat_set_times  
path_link  
path_open Opening directories is not portable
path_readlink  
path_remove_directory  
path_rename  
path_symlink  
path_unlink_file  
poll_oneoff  
proc_exit  
proc_raise    
sched_yield    
random_get  
sock_recv    
sock_send    
sock_shutdown    

Example

import WASI from "https://deno.land/x/wasi/mod.ts";

const wasi = new WASI({
	args: Deno.args,
	env: Deno.env,
});

const binary = Deno.readAll("command.wasm");
const module = await WebAssembly.compile(binary);
const instance = await WebAssembly.instantiate(module, {
	wasi_snapshot_preview1: wasi.exports,
});

wasi.memory = module.exports.memory;

if (module.exports._start) {
	instance.exports._start();
} else if (module.exports._initialize) {
	instance.exports._initialize();
} else {
	throw new Error("No entry point found");
}

查看原文: A WebAssembly System Interface Implementation for Deno

  • crazymeercat
  • heavyswan