Pau*_*thy 2 rust c++-chrono webassembly
程序员对 Rust 非常满意,所以我想尝试一下。我有一个 Hello World WebAssembly,我尝试添加一些代码来显示时间。
以下行似乎终止了该函数,但它什么都不返回(无文本,无错误)
让 dt = Utc::now();
如果我注释掉该行,该函数会像以前一样运行并返回一个字符串
这是否发生在其他人身上?程序员如此喜欢的语言会以如此令人讨厌的方式行事,这对我来说似乎很奇怪。
我的 rs 文件顶部有以下 2 行:extern crate chrono; 使用 chrono::{Duration, Utc};
我在 toml 文件 chrono = "0.4" 的依赖项中有以下内容
要在 WASM 中使用,chrono必须使用wasmbind特性进行编译。
#[cfg(all(target_arch = "wasm32", not(target_os = "wasi"), feature = "wasmbind"))]
pub fn now() -> DateTime<Utc> {
let now = js_sys::Date::new_0();
DateTime::<Utc>::from(now)
}
Run Code Online (Sandbox Code Playgroud)
此外,还有一个未解决的问题用于记录此行为。
您看到的行为有多种原因。
chrono,get_time从timecrate调用函数,然后可以委托给 thelibc或 something,具体取决于目标。但是,当您编译为 WASM 时,标准库是相当有限的——例如,没有系统调用,因此必须以其他方式提供一堆功能;特别是,前面提到的get_time函数没有为这个目标明确实现,所以任何对它的调用都会导致恐慌。js-sys)仅对某些目标是必需的,它将隐藏在功能标志后面,以便chrono在例如 Windows 或 Linux 上的库(此处,)用户不会不必要地拉它。这就是为什么您需要显式启用该功能的原因,即使没有它,库在您的目标上也将无法使用。console_error_panic_hookcrate提供一些帮助,如果将其添加到您的项目中,则会在控制台窗口中显示“尚未实现”错误。