为啥学Rust?

先说本文不涉及任何技术细节,只是自己学Rust的一段历程,一半为倾诉,一半为记录,大家没兴趣的可以不用往下看了。

这题目的答案,简单点说,一半是因为Rust确实有我需要的东西,另一半是因为被"骗"了。

Go用了一段时间,对现有的orm的使用方式都不太满意,于是不自量力的想自己写一个,前前后后的折腾了有几个月的时间,其中还有推到重来的过程,最终整出来了,在两个小项目上用了一下,然后就搁置了,并不是不好用,只是觉得实现的方式是在是不优雅,导致每次扩展新的功能都会变成一次痛苦的煎熬。自己总结了一下,觉得造成这种结果的主要原因有两个,一个是没有class method, 一个是没有泛型。导致你要么跟现在go的大多数orm一样,采用用户自己创建对象,然后把对象传到函数或者方法里进行填充修改的方式,要么就得自己整代码生成机制。后来随着写的代码越来越多,go没有泛型这个问题在我这就显得越来越严重,不是所有的项目都是边边角角都设计好了再开工的,很多情况下其实是随提要求随设计随写代码然后测试看效果再修改设计如此往复循环,这就导致一个严重的问题,就是很多时候我没法抽象出合适的interface,假如这时候让你写一个collection类的东西,那就只有俩选择,要么empty interface{}, 要么用具体的类型。结果就是,要么舍弃一部分性能和安全性,要么代码的复用率会变的越来越低,等项目结尾的时候,一切尘埃落定,但是代码的数量也让你改不动了。

于是我的目光从go身上移开了, 开始找下一个搭档。这时候Rust突然在我眼前出现了,看了一下,自己需要的都有,不需要的也有,最重要的,它连续5年在stackoverflow的调查中被评为最喜欢的语言。那还等啥,开整吧。我这人习惯学语言的时候先写个爬虫,结果rust的这版爬虫成了我个人编程史上最惨烈的爬虫,需求一降再降,但还是只听见编译器啪啪打脸的声音,不见任何能运行的代码出来。我当时就想,这货还能被评为最喜欢的语言?码农圈里的受虐倾向都演变的这么严重了么?一度想放弃,但又觉得就这样退出丢不起那人,只能硬着头皮边看文档边查资料边写。最后总算狼狈的交了卷,那一刻心中竟然隐隐有了一丝成就感,你丫不反人类么,老子的脑子也不是正常人的脑子。然后就开始了与Rust编译器的漫漫搏斗路,每到一个新的场景,都毫无例外的被编译器按住一顿爆揍,但是随着经验的积累,它能占上风的时间越来越短,以至于后来很多时候我已经能预判它会在哪里发难,远远的就躲开了。写个代码都能写出UFC的感觉也是没谁了。经历了重重磨难,对它的脾气秉性越来越熟悉,现在大多数情况下已经可以驾驭它了,虽然游戏动作自己都能感到不那么优雅,而且偶尔还是会遭到它的暗算,但是,干点常见的活是没什么问题了。不得不说,泛型和宏真香。但是这时候再想想我的初衷,一个支持泛型的编译型语言,貌似可选的范围很大啊,我为啥偏要跟自己过不去选Rust呢?Rust的卖点其实就三个,内存安全,运行效率高,抽象能力强大,这其中除了第三条,貌似其他两条对我来说就是浪费啊,关键人家还是主打内存安全,我还被人家的内存安全整的体无完肤......

所以现在突然觉得自己是上当了,上的就是那个连续5年最喜爱的语言的当,倒也不是说Rust不好,只是在自己有那么多选择的情况下,选择了这个明显投入产出比要比其他对手高的家伙,有点心疼,毕竟对于一个中年人,时间宝贵。但是既然已经投入了这么多,肯定是不能轻易放手了,好在Rust确实是个特性比较全面的语言,单就函数式编程的那些工具方法就真的让我不想回到Go了。更好的异常处理,更好的包管理,这些都让Rust的实际使用体验要好于Go。更重要的是,Rust的新特性的引入明显要比Go要快,这倒不一定是什么优点,但是选语言就像选老婆,性格和得来是很重要的一点,与稳重的相比,我更喜欢Rust这种活跃的。

说了半天优点,问题也不是没有,而且在我看来还是比较致命的问题,先说普及率的问题,与主流语言相比,Rust是个小众的语言,而且东家一度把支持队伍解散了,现在虽然成立了基金会,但是能否在如今这个百花齐放的市场上占有自己的一席之地,还真的不好说,好消息是, Linus个人默认了Rust加入linux源代码的开发队伍中, C终于有伴了,这如果真的能实现,那在系统编程领域也算是有了自己的领地,大富大贵不能保证,但是活下来应该是没问题了。第二个问题就是整个语言的发展给人的感觉就是走一步看一步,只解决眼前的问题,很多特性的引入其实说是打补丁还差不多,前两天了解了一下Unpin这个特性,貌似这个就是为了Future专门引入的,因为别的地方貌似没有用到它的地方,而且官方的解释废话连篇,看到最后我还是一脸问号。

最后总结一下,有其他选择的时候,别选Rust,如果选了,那就坚持吧。就我个人而言,Go添加上泛型之后,我觉得我还是会考虑重回Go的怀抱,毕竟代码七分是给人看的,三分才是给机器的,一个受众广泛但是毛病也多的语言远比一个小众但更完美的语言更容易在这个世界生存下去,js就是个最好的例子。最后强调一点,啥语言都是工具,能表达出你要表达的就算合格,用着觉得不舒服就换,没必要从一而终,当然也没必要贪大求全, 为了学语言而去学语言。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值