小编ram*_*mbi的帖子

为什么此 wasm 模块中有“wasi_snapshot_preview_1”导入?

最近,我尝试使用尽可能少的助手来尝试 WebAssembly。

所以我创建了 ac 项目,包含一些库(stb_image.h)并尝试编译它。

这是一个简短的可重现示例:

#include <emscripten.h>
#define STBI_NO_STDIO
#define STBI_NO_FAILURE_STRINGS
#define STB_IMAGE_IMPLEMENTATION

#include "stb_image.h"

EMSCRIPTEN_KEEPALIVE
void test(){
    stbi_load_from_memory(NULL, 0, NULL, NULL, NULL, 0);
}

Run Code Online (Sandbox Code Playgroud)

这是我使用的命令:

emcc converter.c -s STANDALONE_WASM -o converter.wasm --no-entry

这工作正常并给了我一个有效的 wasm 文件。

但后来我尝试使用 javascript 在浏览器中实例化它,而不使用其他任何东西:

let wasm = await Webassembly.instantiateStreaming(fetch('converter.wasm'), {});
Run Code Online (Sandbox Code Playgroud)

但我收到这个错误:

未捕获(承诺中) TypeError: WebAssembly.instantiate(): Import #0 module="wasi_snapshot_preview1" 错误:模块不是对象或函数

我检查了 WebAssembly,确实我的 WebAssembly 需要这些功能:

  (func $wasi_snapshot_preview1.fd_close (;0;) (import "wasi_snapshot_preview1" "fd_close") (param i32) (result i32))
  (func $wasi_snapshot_preview1.fd_seek (;1;) (import "wasi_snapshot_preview1" "fd_seek") (param i32 i64 i32 …
Run Code Online (Sandbox Code Playgroud)

c import emscripten webassembly wasi

7
推荐指数
1
解决办法
7712
查看次数

无法加载 wasm 应用程序

我正在尝试托管一个网站,并且我使用了一个 .wasm 文件,其中包含由 wasm-pack 工具创建的 .js 脚本。

我使用npmnode.js在本地测试了该项目,一切正常。

但是然后我将它托管在树莓 (apache2) 上,当我尝试访问它时,出现以下错误:

Failed to load module script: The server responded with a non-JavaScript MIME type of "application/wasm". Strict MIME type checking is enforced for module scripts per HTML spec.

细节

有多个文件,但这是一个想法:

我的 index.html 加载模块 bootstrap.js

// bootstrap.js content
import("./index.js").catch(e => console.error("Error importing `index.js`:", e));
Run Code Online (Sandbox Code Playgroud)

我的主要代码在index.js,它调用test_wasm_bg.js

最后,test_wasm_bg.js使用以下行加载 wasm 文件:

// test_wasm_bg.js first line
import * as wasm from './test_wasm_bg.wasm';
Run Code Online (Sandbox Code Playgroud)

问题出在哪儿?

加载 Web 程序集文件的正确方法是什么?

javascript apache fetch mime-types webassembly

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

迭代 [false, true] 的最有效方法是什么?

我有一个foo需要 3 个布尔值的函数,我想用每个布尔值组合来获得这个函数的结果。

这是我如何做到的:

fn foo(b1: bool, b2: bool, b3: bool) -> bool {
    b1 && b2 || !b3
}

fn main() {
    for b1 in vec![false, true] {
        for b2 in vec![false, true] {
            for b3 in vec![false, true] {
                println!("{} {} {} -> {}", b1, b2, b3, foo(b1, b2, b3));
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有比创建向量然后迭代它更直接/更短的方法?

有没有办法用宏或可变函数来做到这一点,这样编译器就可以不迭代地遍历每种情况?

iteration combinations boolean rust

2
推荐指数
2
解决办法
292
查看次数

递归地实现特征“Not”

我有一个Couple带有类型参数的 rust结构

我想对此实施一个操作(Not在这种情况下)Couple<T>:如果T实施Not,这对夫妇的否定就是否定的夫妇。

use std::ops::Not;

struct Couple<T>(T, T);

impl<T> Not for Couple<T>
where
    T: Not,
{
    type Output = Self;

    fn not(self) -> Self {
        Couple(T::not(self.0), T::not(self.1))
    }
}
Run Code Online (Sandbox Code Playgroud)

此代码与其他特征(例如 Default::default)一起编译,但不与 trait Not

我收到错误

error[E0308]: mismatched types
  --> src/lib.rs:12:16
   |
5  | impl<T> Not for Couple<T>
   |      - this type parameter
...
12 |         Couple(T::not(self.0), T::not(self.1))
   |                ^^^^^^^^^^^^^^ expected type parameter `T`, found associated type
   |
   = note: expected …
Run Code Online (Sandbox Code Playgroud)

types operator-overloading traits rust

2
推荐指数
1
解决办法
76
查看次数

C++ 代码的行为取决于编译器

我对 c 和 c++ 真的很陌生

我试着用结构来创建一个类似列表的结构,基本上可以包含浮点数和列表。

此代码可编译,但其行为因编译器而异:

  • 使用最新版本的visual studio社区,它输出5然后0.

  • 使用在线外壳,我得到5然后5

当向量通过函数时,我想要得到的第二个。

这是代码:

#include <iostream>
#include <vector>

using namespace std;

struct Box {
    Box(char t) {
        type = t;
    }
    union Value {
        float number;
        vector<Box>* elements;
    };
    Value value;
    char type;
};

Box newBox() {
    Box aBox('l');

    vector<Box> newVec;
    newVec.assign(5, Box('n'));


    aBox.value.elements = &newVec;
    cout << aBox.value.elements->size() << "\n";
    return aBox;

}

int main()
{
    Box test = newBox();
    cout << …
Run Code Online (Sandbox Code Playgroud)

c++ struct pointers

0
推荐指数
1
解决办法
61
查看次数