Jasper Ji

开口不在舌头上

0%

尝试Rust

最近在看WebAssembly的东西,觉得Rust写基于WebAssembly的Web应用好像是不错的选择。另外Rust这门语言,很早就听说的了,后来也买了《Rust权威指南》这本书,只是简单的翻了翻,并没有做过什么项目。于是就起了个备忘录的简单项目。

Yew

有点类似React,用起来还是比较顺手了。目前版本迭代还是相当的快,我一开始用的0.19.0的版本,最后因为一个库的关系,直接选择了最新的版本,版本之间还时存在兼容问题。我打包后有2M,相比传统的还是比较大了,不过可能是是没有优化的结果。在代码里面写Html,主要的问题是格式化的问题,vscode里面一格式化代码后,html的代码就乱了。

问题

Yew本身提供的文档还可以,有问题看看文档也能解决。主要的问题是wey_sys的一些库的使用,比如我想使用IndexedDB这个东西,其实JS版的文档很好看懂,Rust版的就有点不知所措,主要还是我对Rust了解不够,再加上这些库并没有特别全的文档,所以折腾半天。比如设置IndexedDB回调的问题,参数显示js_sys::Function,我想着那就构造个Function出来,结果翻遍文档没有看到如何构造的例子,最后解决方案是闭包转Function的方式,一开始也是报错,提示闭包已久被销毁了,后来发现官方的例子有点问题,最后修复了。

另外因为要在几个页面间共享一些数据,想着写个单例吧,发现不那么简单,找了个lazy_static这样库,提示*mut u8` cannot be shared between threads safely这样的错误,最终还是停了下来。

总结

Rust的学习曲线比较陡,主要是很多语法不同于传统的C体系,所以感觉原来的经验无法施展,而且沿着经验的思路反而会比较绕,发现还是得按Rust的方式解决问题。