chrono杀死了我的Rust WebAssembly函数
程序员对Rust非常满意,所以我想试试。我有一个Hello World WebAssembly,我试图添加一些代码来显示时间 下面的行似乎终止了函数,但它不返回任何内容 (无文本,无错误) 设dt=Utc::now() 如果我注释掉该行,函数将像以前一样运行并返回一个字符串 这会发生在其他人身上吗? 我觉得奇怪的是,一种程序员如此喜欢的语言竟然会表现得如此令人讨厌 我的rs文件顶部有以下两行: 外部板条箱时钟; 使用计时::{持续时间,Utc} 我在toml文件的依赖项中有以下内容chrono杀死了我的Rust WebAssembly函数,rust,webassembly,chrono,Rust,Webassembly,Chrono,程序员对Rust非常满意,所以我想试试。我有一个Hello World WebAssembly,我试图添加一些代码来显示时间 下面的行似乎终止了函数,但它不返回任何内容 (无文本,无错误) 设dt=Utc::now() 如果我注释掉该行,函数将像以前一样运行并返回一个字符串 这会发生在其他人身上吗? 我觉得奇怪的是,一种程序员如此喜欢的语言竟然会表现得如此令人讨厌 我的rs文件顶部有以下两行: 外部板条箱时钟; 使用计时::{持续时间,Utc} 我在toml文件的依赖项中有以下内容 chrono
chrono=“0.4”要在WASM中使用,
chrono
必须使用wasmbind
功能进行编译
然而,我在文档中找不到这个。此功能已被引用:
#[cfg(全部(target_arch=“wasm32”,而不是(target_os=“wasi”),feature=“wasmbind”)]
pub fn now()->DateTime{
现在就让我们来看看js_sys::Date::new_0();
日期时间:::从(现在)
}
此外,还有一个用于记录这种行为的开放窗口
您看到的这种行为有几个原因
chrono
从time
板条箱调用get_time
函数,然后该函数可以委托给libc
或其他对象,具体取决于目标。然而,当您编译到WASM时,标准库相当有限——例如,没有系统调用,因此必须以其他方式提供一系列功能;特别是,前面提到的get_time
函数是针对这个目标的,因此对它的任何调用都会死机js sys
)仅对某些目标是必需的,则它将隐藏在功能标志后面,以便库(此处,chrono
)的用户(例如Windows或Linux)不会不必要地提取它。这就是为什么您需要显式启用该功能,即使没有它,库也将无法在您的目标上使用你的完整代码是什么。。?
#[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)
}