编辑回复: 棒,get hands dirty 系列很多同学刚看都说很难看不懂,你是第一个把自己的学习过程贴上来的,给你置顶啦,学习思路正好也可以供其他同学参考~
作者回复: 谢谢赏识。我希望这门课不光能教会大家语言本身,更重要的是如何用语言提供的能力优雅地解决实际问题。有的人能用 C 写出面向对象的代码;有的人能用 Java 写出 Fortran 的感觉。Rust 为我们提供了强大的抽象能力,我们要用好它。:)
作者回复: 如果你觉得每个项目都有个 target,项目多了不好清理,那么可以编辑 ~/.cargo/config,让所有项目的编译结果都放在同一个目录下(不过这样无法同时编译多个项目,cargo 有文件锁): ``` [build] target-dir = "/Users/tchen/.target" ``` 如果你觉得编译后的结果太大,倒也不用担心,release build 比较小,目前 9M,这里还可以用很多方法进一步优化: ``` ❯ ls -l ~/.target/release/thumbor -rwxr-xr-x 2 tchen staff 9562656 Aug 30 12:09 /Users/tchen/.target/release/thumbor* ``` 至于如果你觉得编译的中间文件太大,nodejs 的 node_modules,python 的 virtualenv,都是吃磁盘的主。:)
作者回复: reqwest 和 tracing_subscriber 已经是顶级 namespace,如果你想直接使用 get,你可以 use reqwest::get,但你如果就是要通过 crate 名引入其功能,可以直接使用,就跟我们可以直接用 std::sync::Arc 一样。Rust 下只要你加了依赖,对应的依赖就可以访问了,不存在 import 的过程。use 只是简化 namespace。
作者回复: 苦干,实干,巧干。让勤勉追上时间的脚步。:)
作者回复: 👍
作者回复: 几个选择: - 你可以直接在 image 库上实现 - 使用 imagemagick: https://github.com/nlfiedler/magick-rust - 使用 opencv: https://github.com/twistedfall/opencv-rust - 使用 piet: https://github.com/linebender/piet - 或者任何 C/C++ image 库(需要做一下 rust binding)
作者回复: 嗯,会的,后续的文章我们紧扣数据结构在栈和堆上的关系展开,我觉得这很重要,但似乎没有人这样讲解。接下来的课程你会慢慢看到的。
作者回复: Wow,你是第一个把思考题答案贴出来的!看得出理解了代码,并且还研究了一下 photon_rs 的能力。非常棒!
编辑回复: 哈哈大佬也是坚持不懈学出来的,看到差距就已经看到学习方向了,加油💪