我在尝试上传CSV文件并使用rust在web组装极性中解析它时遇到了下面的问题。
感谢错误:
Grid.js:498 panicked at 'unsafe precondition(s) violated: ptr::read requires that the pointer argument is aligned and non-null', C:Users61414.rustuptoolchainsnightly-2022-11-20-x86_64-pc-windows-msvclibrustlibsrcrustlibrarycoresrcpanicking.rs:89:58
我有下面的示例代码。
此外,我正在使用Svelte作为前端,但我认为这不会有太大的不同。
生锈:
pub fn load_csv(&mut self, buff: &[u8]) -> String {
let cursor = Cursor::new(buff);
let lf = CsvReader::new(cursor).with_ignore_parser_errors(true).finish().unwrap().lazy();
return lf.describe_plan();
}
打印稿:
当文件上传到文件输入时触发的函数。
function load_csv_file(event){
const file = event.target.files[0]
let reader = new FileReader();
reader.readAsArrayBuffer(file);
reader.onload = data1 => {
console.log(data1.target.result)
console.log(data.load_csv(new Uint8Array(data1.target.result)))
};
}
WASM跟踪:
不知道如何得到更好的
Error
at http://localhost:5173/rustFunctions/grid/pkg/Grid.js:504:21
at logError (http://localhost:5173/rustFunctions/grid/pkg/Grid.js:134:18)
at imports.wbg.__wbg_new_abda76e883ba8a5f (http://localhost:5173/rustFunctions/grid/pkg/Grid.js:503:66)
at console_error_panic_hook::Error::new::h5d7996250e9efb8e (http://localhost:5173/rustFunctions/grid/pkg/grid_bg.wasm:wasm-function[154789]:0x30fc8e8)
at console_error_panic_hook::hook_impl::h667dd0ae102fb048 (http://localhost:5173/rustFunctions/grid/pkg/grid_bg.wasm:wasm-function[29585]:0x1c5c717)
at console_error_panic_hook::hook::hc3def586df00a6f2 (http://localhost:5173/rustFunctions/grid/pkg/grid_bg.wasm:wasm-function[169823]:0x31c84b3)
at core::ops::function::Fn::call::h397369bf956b8712 (http://localhost:5173/rustFunctions/grid/pkg/grid_bg.wasm:wasm-function[149254]:0x30a5529)
at <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call::hfcda8f4a283bd42a (http://localhost:5173/rustFunctions/grid/pkg/grid_bg.wasm:wasm-function[125833]:0x2ee5fac)
at std::panicking::rust_panic_with_hook::h7e6939e50e26b51d (http://localhost:5173/rustFunctions/grid/pkg/grid_bg.wasm:wasm-function[914]:0x4641c8)
at std::panicking::begin_panic_handler::{{closure}}::hfff77ccb8fcf1114 (http://localhost:5173/rustFunctions/grid/pkg/grid_bg.wasm:wasm-function[34760]:0x1e31219)
:
- 我已经检查了数组缓冲区不为空,使用.is_empty()检查游标并打印出与[u8]数组匹配的CSV解析器,当我在没有Wasm的情况下在本地运行极地rust代码时,它确实有效。
- 正如我提到的,我在没有Wasm的情况下使用了相同的rust代码来正确加载文件。
所以我猜在使用WASM时,光标创建或传递到极点有问题,但这只是一个猜测。
你可以看一下Js-polars实现参考。
一般来说,当向JS暴露rust函数时,你应该使用wasm-bind或通过extern "C"
函数使用ffi。Wasm-bindgen比手动处理内存要容易得多。指针。
其他注意事项:
如果处理大型数据集,您可能会遇到wasm的最大内存限制;生锈。您可以通过更新.cargo/config.toml
来修改它。为解析CSV而启动web worker线程池也有很大的开销,并且您需要在worker中运行parse_csv
函数。@polars/browser
npm包简化了很多,你可以看看那里的一些指南,关于如何在浏览器中运行polar。