如果您在 Chrome 中双击英文文本,则会突出显示您单击的以空格分隔的单词。这并不奇怪。然而,前几天我在阅读一些日语文本时点击并注意到一些单词在单词边界处突出显示,即使日语没有空格。这是一些示例文本:
?????????????????????????????????????????????????????? ???
例如,如果您单击 ???,即使它不是单个字符类(这是汉字和平假名的混合),Chrome 也会正确地将其突出显示为单个单词。并非所有的亮点都是正确的,但它们似乎不是随机的。
Chrome 如何决定在这里突出显示什么?我尝试在 Chrome 源代码中搜索“日语单词”,但只找到了一个实验模块的测试,该模块在我的 Chrome 版本中似乎并不活跃。
在Leroy关于如何在OCaml中输入递归模块的论文中,编写了在模块类型近似的环境中检查模块:
module rec A = ... and B = ... and C = ...
Run Code Online (Sandbox Code Playgroud)
环境{A - >约(A); B - >约(B); 首先构建C - > approx(C)},然后用于计算A,B和C的类型.
我注意到,在某些情况下,近似值不够好,并且类型检查失败.特别是,当将编译单元源放在递归模块定义中时,类型检查可能会失败,而编译器则能够单独编译编译单元.
回到我的第一个例子,我发现一个解决方案是在初始近似环境中输入A,然后在新的计算类型A扩展的初始环境中输入B,并在前一个环境中输入C新计算的B类型,依此类推.
在进一步研究之前,我想知道是否有关于此主题的任何先前工作,表明这种递归模块的编译方案是安全还是不安全?是否有反例显示使用此方案正确键入的不安全程序?
ocaml programming-languages functional-programming module strong-typing
有没有办法在没有JavaScript的情况下获得对DOM和/或WebAPI(即全屏API)的读/写访问权限?
我正在尝试用C构建一个基本的应用程序(C源实际上是从GC语言转换的结果).我正在构建的应用程序将作为桌面应用程序运行(它不打算在"真正的"浏览器中运行)所以我可以根据需要调整环境(即布局引擎).
我从这个Rust代码创建了一个小的WASM文件:
#[no_mangle]
pub fn hello() -> &'static str {
"hello from rust"
}
Run Code Online (Sandbox Code Playgroud)
它构建并且hello可以从JS调用该函数:
<!DOCTYPE html>
<html>
<body>
<script>
fetch('main.wasm')
.then(response => response.arrayBuffer())
.then(bytes => WebAssembly.instantiate(bytes, {}))
.then(results => {
alert(results.instance.exports.hello());
});
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我的问题是alert显示"未定义".如果我返回a i32,它可以工作并显示i32.我也尝试返回String但是它不起作用(它仍然显示"未定义").
有没有办法从WebAssembly中的Rust返回一个字符串?我应该使用什么类型的?
我正在尝试制作一个 Rust WebAssembly 项目并修改了rust-webpack-template作为我的起点。该模板是一个带有 JavaScript 文件的 webpack 项目,该文件调用单个 Wasm 函数,Rust Wasm 从那里接管。
我修改了模板,因为我想在 JavaScript 中使用我的主要逻辑并通过 API 调用 Rust Wasm。
我已将 webpack 条目更改为bootstrap.js如下所示。
// bootstrap.js
import("./index.js").catch(e =>
console.error("Error importing 'index.js':", e)
);
Run Code Online (Sandbox Code Playgroud)
我添加了文件index.js,它调用了 Rust Wasm 函数
// index.js
import * as wasm from "../crate/pkg/rust_webpack";
const title = document.getElementById("msg");
title.innerText = wasm.get_msg();
Run Code Online (Sandbox Code Playgroud)
get_msgRust的函数如下所示:
#[wasm_bindgen]
pub fn get_msg() -> String {
"Hello from Rust WebAssembly!".to_owned()
}
Run Code Online (Sandbox Code Playgroud)
当我使用 运行项目时webpack-dev-server -d,一切正常。
但是,当我使用构建项目webpack并尝试直接托管生成的文件时,没有显示任何内容并且浏览器控制台显示错误:
导入“index.js”时出错:TypeError:“响应具有不受支持的 MIME …
我是 emscripten 的新手,发现它非常困难...我有义务在 Windows 上工作,因为我必须测试我的应用程序的 .exe 版本。我用的是Windows 7。
我可以编译 wasm 但 javascript 无法读取它。这是我的代码。
C代码:
char * HelloWorld ()
{
return "Hello World !";
}
Run Code Online (Sandbox Code Playgroud)
Emscripten 命令行:
emcc hello.c -O2 -s ONLY_MY_CODE=1 -s WASM=1 -s SIDE_MODULE=1 -s EXPORTED_FUNCTIONS="['_HelloWorld']" -o hello.wasm
Run Code Online (Sandbox Code Playgroud)
瓦特结果:
(module
(type $t0 (func (result i32)))
(type $t1 (func))
(import "env" "memory" (memory $env.memory 256))
(import "env" "memoryBase" (global $env.memoryBase i32))
(func $_HelloWorld (export "_HelloWorld") (type $t0) (result i32)
(get_global $env.memoryBase))
(func $__post_instantiate (export "__post_instantiate") (type $t1)
(set_global $g1
(i32.add …Run Code Online (Sandbox Code Playgroud) 正在阅读有关 Wasm 的 MDN 文档。他们多次使用 WASM 模块这个术语。他们的定义如下:
WebAssembly.Module 对象包含已由浏览器编译的无状态 WebAssembly 代码,可以与 Workers 高效共享,并多次实例化。要实例化模块,请调用 WebAssembly.instantiate() 的辅助重载。
我不太明白这句话的意思。Web 程序集模块只是一个 Wasm 文件还是其他文件?
Emscripten 文档 ( https://kripken.github.io/emscripten-site/docs/porting/connecting_cpp_and_javascript/Interacting-with-code.html#与代码直接函数调用交互)。
但是按值传递结构呢?如果我有这样的 C 函数:
typedef struct {double a, b, c;} MyStruct;
MyStruct Foo(const MyStruct x, double y);
Run Code Online (Sandbox Code Playgroud)
我将如何调用 Foo 并解码结果?(使用 Module.cwrap 或直接调用 Module._Foo )。我需要访问 Emscripten 堆栈才能做到这一点吗?这是在哪里记录的?
我有一个图像处理 Wasm 项目,它将不同的二值化算法应用于给定的图像。当我运行其中一种算法时,会产生此错误:
Uncaught abort("Cannot enlarge memory arrays to size 17100800 bytes (OOM). Either
(1) compile with -s TOTAL_MEMORY=X with X higher than the current value 16777216,
(2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime, or
(3) if you want malloc to return NULL (0)
instead of this abort, compile with -s ABORTING_MALLOC=0 ") at Error
Run Code Online (Sandbox Code Playgroud)
编译后"-s ALLOW_MEMORY_GROWTH=1",该算法在Chrome中并没有出错,而是将图像变成了黑色。连续第二次运行出现此错误:
Uncaught RuntimeError: memory access out of bounds
第一次在 Edge 中运行时,42.17134.1.0我收到此错误:
SCRIPT5147: The ArrayBuffer is …
webassembly ×8
javascript ×4
emscripten ×3
c ×2
rust ×2
assembly ×1
browser ×1
cjk ×1
dart ×1
dart2js ×1
flutter ×1
flutter-web ×1
low-level ×1
module ×1
ocaml ×1
webidl ×1
webpack ×1