rust学习笔记(c++ based)
08 Nov 2018
|
|
为什么又要写一个?不写一遍真的记不住,写的也没有参考中的文章写得好。详细的版本直接跳到参考。
rust这个语言真是热闹。很多特性的融合,对标c++,必须要探究一下! 首先,这个社区+api文档 + 手把手demo 真的非常好,上手难度还好。写好的程序不好说,这文档是真方便,随便点一下就跳到实现上了。 这也说明新语言没那么大包袱。c++打开头文件看实现,天书,还是点开cppreference看接口文档吧。这东西和cppcoreguideline文档也是新搞的。c++也有人注意到了这个问题吧。
列几点我看书(rust book)过程中记录的好玩的地方。
- 默认不可变语义,这个和c++是正好相反的,c/c++ 想要保证不可变,程序员自觉不改,或者加const,加上const也会有阴招(const_cast)绕过去,c/c++原则,充分信任程序员,程序员要知道自己在做什么,rust不信任,默认不可变,可变得手动标mut,不然分分钟报错
- 引用语义。c++中,值语义,引用语义的切换非常自然。这个代价就是类型转换天花乱坠,但是自然。rust的引用语义(以及衍生的slice)需要显式指定,传参数得带&,这语法太难看。
- 接上面,引用在rust中有借用语义,编译器强保证,所以用起来会很痛苦。
- 宏,rust的宏有点像c++的变参模板,但是语法很邪恶,像perl shell这种脚本语法。很邪恶。
- enum,这个东西就是个std::variant,配合rust本身的match语法,更变态一些。match这东西从函数式语言中抄过来的。也是先进性体现了。
- traits 好东西,和c++的type_traits也有点像,也像c++ concept这种静态接口。rust直接去掉了继承,大家实现接口就好了,or enum
- 这个函数声明风格挺像go的。说起go,go也有interface这种东西,也有magic方法,magic方法有点不适应,就比如make defer这种,没规律。难受。感觉还是c风格,指针回调的感觉。相比rust的traits方法还算系统,c++ concept当初也是这个计划,
- 最后一句可以当返回值,这是ruby perl语言的优势,不用return。这个有利有弊
- 很多语法和go很像,但是更系统一些(或者是我对go有偏见)
暂时就这么多。具体还是要写代码才懂。
reference
- 一个英语博客 https://github.com/nrc/r4cppp
- 一个不错的总结,针对c++语法 写的不错,基本把我想写的写了。
- https://xr1s.me/2018/03/01/rust-learning-notes-for-cxx-programmer-part-one/
- https://xr1s.me/2018/03/01/rust-learning-notes-for-cxx-programmer-part-two/
- https://xr1s.me/2018/03/01/rust-learning-notes-for-cxx-programmer-part-three/