标签: webassembly

将基于 JIT 的 lang 编译为 WebAssembly

当思考解释器工作的原因时:解析代码 -> 生产者机器字节代码 -> 分配 exec mem -> 运行

如何在 wasm 中完成?

谢谢!

javascript c python webassembly

3
推荐指数
1
解决办法
917
查看次数

WebAssembly 多个模块?

假设我们有以下内容:

(module)
Run Code Online (Sandbox Code Playgroud)

只是一个简单的模块,没有函数、局部变量、内存和所有花哨的东西。现在,如果我不想过度填充我的模块怎么办?我的意思是 id 喜欢有两个模块,但在尝试编译类似以下内容时,我显然遇到了错误:

(module)
(module)
Run Code Online (Sandbox Code Playgroud)

那么有没有办法让每个模块都有自己的内存或id呢?或者有什么办法可以做到吗?这还有道理吗?我只是说因为模块真的会变得很大。

我想要完成的是在两个模块之间进行通信,因为我相信防止模块变得太大是有意义的。我对 WebAssembly 很陌生,所以也许我所说的听起来很疯狂。

对于编译测试,我使用https://mbebenita.github.io/WasmExplorer/

webassembly

3
推荐指数
1
解决办法
4197
查看次数

如何从多个cpp文件编译WebAssembly?

我正在使用 emscripten 将 c++ 编译为 WASM,但一次只能对一个文件执行此操作。我不想将整个项目和库放在一个文件中,但我还没有找到有关如何正确编译它的任何信息。

c++ compilation web webassembly

3
推荐指数
1
解决办法
3983
查看次数

如何在 WebAssembly 中创建和引用表?

有人可以分享一下静态创建具有某些元素的表并引用它的语法吗?我找不到任何这样做的网络汇编代码。

还有一些细节,例如我可以有多个列,如果索引不在表中会发生什么等,会有帮助吗?

webassembly

3
推荐指数
1
解决办法
1793
查看次数

如何在多个同名模块中“外部”一个函数?

我有一个 lib 项目,其中包含多个名为one和 的模块two,位于单独的文件中。每个模块都有一个名为的函数run

mod one {
    pub fn run() {
        println!("One");
    }
}

mod two {
    pub fn run() {
        println!("Two");
    }
}

fn main() {
    one::run();
    two::run();
}
Run Code Online (Sandbox Code Playgroud)

操场

我想将每个文件/函数编译为 WebAssembly,然后能够加载它们并调用函数run()

我相信我必须添加#[no_mangle]指令并将它们标记为extern "C"函数。run当我这样做时,尽管模块结构不同,但函数上会出现名称冲突。

这是无法编译的修改版本:

mod one {
    #[no_mangle]
    pub extern "C" fn run() {
        println!("One");
    }
}

mod two {
    #[no_mangle]
    pub extern "C" fn run() {
        println!("Two");
    }
}

fn main() {
    one::run(); …
Run Code Online (Sandbox Code Playgroud)

rust webassembly

3
推荐指数
1
解决办法
1039
查看次数

CGO 库构建为 JS WASM 文件

我想使用从 Golang 构建的 WebAssembly 库编写 JS 脚本。但我需要使用C库并通过CGO使用它。

简而言之,我的代码如下所示(只是加载 C 库的示例):

package main

/*
#include <stdlib.h>
*/
import "C"

func main() {
    println("Hello")
}
Run Code Online (Sandbox Code Playgroud)

但是当我想使用下面的命令按照教程中的方式构建它时,我遇到了错误。

命令:

GOARCH=wasm GOOS=js go build -o lib.wasm test.go
Run Code Online (Sandbox Code Playgroud)

输出:

can't load package: package main: build constraints exclude all Go files in [Project path]
Run Code Online (Sandbox Code Playgroud)

所以我的问题是是否有可能构建这样的东西。

谢谢。

go cgo webassembly

3
推荐指数
1
解决办法
2166
查看次数

从使用 emscripten 编译的 c++ 连接 websocket 时出现问题

尝试使用用emscripten编译的c++代码连接到websocket(poco-1.9.0示例\WebSocketServer)。使用编译的 boost 1.69 和常见示例之一连接到套接字。

boost::asio::ssl::context ctxt(context::sslv23_client); 
ctxt.set_verify_mode(boost::asio::ssl::verify_none);

boost::asio::io_service svc;
tcp::resolver resolver(svc);
tcp::resolver::query query("127.0.0.1", "9980", 
    boost::asio::ip::resolver_query_base::numeric_service);

tcp::resolver::iterator i = resolver.resolve(query, ec);

boost::asio::ssl::stream<tcp::socket> s(svc, ctxt);
s.lowest_layer().connect(*i, ec); 
s.handshake(boost::asio::ssl::stream<tcp::socket>::client, ec);
Run Code Online (Sandbox Code Playgroud)

服务器输出如下

Request from 127.0.0.1:58152: GET / HTTP/1.1
Host: 127.0.0.1:9980
Connection: Upgrade
Pragma: no-cache
Cache-Control: no-cache
Upgrade: websocket
Origin: http://127.0.0.1:8887
Sec-WebSocket-Version: 13
Sec-WebSocket-Protocol: binary
WebSocket connection established.
Frame received (length=0, flags=0x0).
WebSocket connection closed.
Run Code Online (Sandbox Code Playgroud)

但是,此代码在握手后挂起。可以这样使用还是需要使用 asio 的异步调用?

另外,如果您知道任何类似的例子,请分享。

c++ boost emscripten webassembly

3
推荐指数
1
解决办法
3827
查看次数

拨号 tcp:协议不可用 go web assembly 测试

尝试去测试触发 POST 请求的 Web 组装功能。

收到以下错误:

firePing_test.go:40: ERROR ON POST REQUEST: Post https://not-the-real-api.execute-api.us-east-1.amazonaws.com/testing: dial tcp: Protocol not available
Run Code Online (Sandbox Code Playgroud)

运行:Ubuntu 18.04.2 LTS go版本go1.12.2 linux/amd64

我已经测试过该函数是有效的,并且在chrome中执行时会发送请求。为 linux/amd64 编译时测试也通过。

问题函数:

firePing_test.go:40: ERROR ON POST REQUEST: Post https://not-the-real-api.execute-api.us-east-1.amazonaws.com/testing: dial tcp: Protocol not available
Run Code Online (Sandbox Code Playgroud)

问题测试函数调用:

// FirePing fires a ping
func FirePing(protocol *string, domain *string, params *map[string]string) (*http.Response, error) {

    // Marshal map into POST request body
    reqBody, err := json.Marshal(*params)
    if err != nil {
        return  nil, fmt.Errorf("ERROR ON MARSHAL OF PARAMS: %v", err) …
Run Code Online (Sandbox Code Playgroud)

testing go webassembly

3
推荐指数
1
解决办法
1232
查看次数

如何使用 emscripten 通过 node.js 进行文件输入?

我有一个 C++ 项目,我已使用 emscripten 将其转换为 javascript。我需要帮助通过节点实现文件输入到程序中。据我了解,emscripten 中的默认文件系统使用只能在网页或网络工作人员上完成的预加载数据。我需要我的在命令行上使用node.js。

查看文档,我发现有一种方法可以使用 NODEFS 而不是默认的 MEMFS,这应该允许我执行此操作。但是,我不确定该怎么做。我不太明白所提供的测试代码。

以下是原始 C++ 项目中文件处理的方式:

void InputFile(std::string &fileName)
  {
    std::ifstream in(fileName);

    if (in.fail())
    {
      std::cerr << "ERROR, Could not open " << fileName << std::endl;
      exit(1);
    }
  }
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试使用文件运行转换后的程序时,node project.js -f test.file我收到错误消息:ERROR, Could not open test.file意味着打开文件失败。原始的 C++ 项目能够打开该文件,没有任何问题,所以我知道文件本身没有问题。

我不确定我必须做什么才能使转换后的项目与文件输入一起工作,任何帮助将非常感激。

node.js emscripten webassembly

3
推荐指数
1
解决办法
1502
查看次数

如何访问 Wasm (Rust) 中的 JS 对象属性?

我正在使用 wasm bindgen 并且有以下功能:

#[wasm_bindgen]
pub fn obj(o: &JsValue){
console::log_1(o);
}
Run Code Online (Sandbox Code Playgroud)

在 js 中我调用这个函数obj({name: "john"}); 并且它工作正常,但是当我尝试时它给出了指向的console::log_1(o.name); 错误unknown fieldname

rust webassembly wasm-bindgen

3
推荐指数
1
解决办法
2489
查看次数

标签 统计

webassembly ×10

c++ ×2

emscripten ×2

go ×2

rust ×2

boost ×1

c ×1

cgo ×1

compilation ×1

javascript ×1

node.js ×1

python ×1

testing ×1

wasm-bindgen ×1

web ×1