学习Rust引发的其他思考

还记得少年时候做的语文阅读理解题目了吗?当时有一个故事广为流传,说有一个孩子在做阅读理解题时遇到自己父亲的作品,恰巧这篇作品就是写他父亲和他的故事,但当卷子发下来时,很多题目都判他错,他哭着说作者就是这么想的,答案根本就不对!

当时我也是这么想的,难道作者不知道什么情况,还需要标准答案告诉作者本人吗?

后来才发现,自己从头就搞错了。阅读理解这个题型,大有深意。工作之后发现,客户在想什么,领导在想什么,同事在想什么,这三者分别和产品、工作安排、人际关系有着密切的关系。

阅读理解,就是在培养学生揣度出题人意图的能力,进而掌握揣度这一门技巧。有了这个技巧,就可以分析出很多原本一眼看不出来的信息。很多时候,就不需要自命正直,痛苦地批判这社会却又无能为力了。

看看那些一边编程一边吐槽语言本身的人,有几个是自己搞出一个新编程语言,取代旧语言,完成自己升华的?

————————————————————————————————————————————————————————

推荐来的博客中,有很多是讨论Rust和Golang选择哪一个的。在讨论的这些博客中,有些作者也坦然,介绍Rust安全,无GC的时候,也批注了“还不知道Rust是怎么做的”。那么很显然,那些博客中得出的结论,要么是其他人得出的,要么是推测的(即待验证的)。

在写完Golang和Rust的HelloWorld后,对这两种语言有了一定肤浅的认知。Golang正如作者所言,其目的是让新入行的年轻人,不用受原本C++学习过程的荼毒,能够快速上手。我觉得Golang做到了,所以我有一个草率的结论:所有对Golang非“快速上手”(当然还有其他好处,这里不一一列举,因为这里的目的是“举例”。而因为这里而来吐槽的,也能看出吹毛求疵的评论风格了)上的指责,都是正直的人在给自己加戏。指责说不定很中肯呢,只不过跟人家作者的初衷没半毛钱关系。

Golang的这一特性,将使应用层的开发难度进一步降低(因为它本身还有一些线程等方面的别的好处),使更多的人入行的成本降低,这是行业兴旺的很重要的特点(和我小时候想的不同,行业的兴旺不取决于大神的多少,相反大神的多少取决于行业的兴旺。而行业的兴旺,在于有多少普通人进入这一行业)。

Rust就更有意思了,我对于底层开发经验基本为0,可以说毫无资格评价。所以我这里只是做阅读理解练习,我培养我揣度作者意图的能力,只不过不知道自己这次答题是否符合标准答案。

Rust解决的是运行时的问题。做任何事的,都有这么几种人,其中有两种比较特殊,也可以说特征比较明显。一种是做事的,凡是力求先做到,再做好。这也是行业发展的基本规律,一项基础科学解决了重大难题,后续就有应用科学研究出各种产品来了,通过多年实践变得稳定。打个比方,Golang将大多数人带入行,然后再工作中由程序员自己设计出一套机制来处理各种exception,同时总结出各种代码规范,随着时间的沉淀,还能产生很多成熟的框架来。当然其中总会有些新手在新手村写出能运行的烂代码。

Rust要解决的,就是这个问题,它在某些方面强迫程序员做了一些原本在其他编程语言中不需要做的事情。它强迫你使用一些抽象,同时禁止一些事情的发生(当然也做了一点折衷,不过有些人因为这些折衷而嗤之以鼻,而且仅仅针对这些折衷而已了)。Bob大叔的《架构整洁之道》中描述了三种开发范式(面向过程、面向对象、面向函数)的意图,仅在于“约束程序员不做某些事情”,那么Rust则为了某些实际的特性,约束了更多的事情。

这些特性是什么呢?这些特性总的目的是为了减少我们刚刚说的exception的处理(常伴随难以复现的问题和没休止的DEBUG),以及生产各种附加事物的成本(到底是哪些事物得视情况而定,我没说的别自己脑补出我说的,如果揣度后让双方都不开心,我想这应该不是学习揣度这门技术的初衷吧)。

内存、运行问题、多线程等问题,是C/C++中非常重要,而且也很棘手的问题,即使多年的老司机,也很容易翻车。Rust的意义,在于制造一个复杂而可信赖的工具,一旦掌握了这种工具,那么有很多不确定因素很多的问题就迎刃而解了。

这里举一个例子吧,JUnit的诞生,原因是作者期望程序能告诉自己结果是“行”还是“不行”,而不需要自己每次想好了步骤如临深渊的一步一步DEBUG,结果还有时行有时不行。Rust的编译器不是来跟程序员为难的,恰恰相反,是帮助程序员说,在这个特征下(就是你想获得的好处下),你这么做,是有问题的。

就像我们用Eclipse检查文件名、变量名的拼写错误一样,一目了然。Rust的编译器(即所谓的学习曲线陡峭)也是做这个的。

——————————————————————————————————————————————————————

所以来说一点我的结论吧(也许老师会在这里划个×,不过我个人觉得得到一个×比什么都不做要好上那么一点点)。

Rust提供了编程语言里一种新的解决问题的思路,对于大多数场景而言,这种思路可能完全用不到,或者没有什么优势,只有目标应用有着相应的特征,才应该使用Rust。Rust的目标,我猜测从来就不是成为一种完美的语言(就像法国人说的那种:法语是世界上最美丽的语言。我猜Rust的作者不会用这种语气和情绪说话),它有它特有的目标、场景、优势。

看看官方文档里写的:其特性适合那些有类 C 语言经验,正在寻找更安全的替代品的开发者;同样适合有着类 Python 语言背
景,寻求在不牺牲表现力的前提下,编写更高性能代码的开发者。

但是有些人就会这么脑补:其特性适合那些有类 C 语言经验,正在寻找更安全的替代品的开发者(啊,Rust说它是全世界最安全的语言),同样适合有着类 Python 语言背景,寻求在不牺牲表现力的前提下,编写更高性能代码的开发者(我笑了,Rust竟然比Python更有表现力,太不要脸了)。由此还可以继续脑洞大开,毕竟能说出“世界上最安全”、“比Python更有表现力”(虽然这些话是脑补出来的,但对于脑补者而言和作者亲口说的并无差别)的人,其人品、道德一定是低劣的,由此还能推测出他的教育、家庭、社会环境,如果这些没有什么问题,那么还可以往更“深层次”(地域?省份?)去推敲、去攻击、去下结论,并把结论扣在对方头上。

好了,优快云没有是否可评论的选项,不知道会不会被喷呢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值