<-- Home |--rust

1000_reasons_to_go_rust原神启动的1000个理由

为什么Rust?

今天来务个虚,不写代码。

我已经说过好多次,我不是特别喜欢Rustaceans浓度过高时的氛围。但是,我仍然喜欢Rust。

首先是,我是个渣男。我对任何语言都没有任何忠诚度。我就因为太过于喜欢尝试新的程序设计语言,所以我没办法成为一个真正的程序员。我以后也许会找一份编写程序的工作,我现在也经常通过编写程序来交付很多看起来跟编程序毫无关系的工作。曾经,我有一个特种设备(术语:专测设备)调试的任务,我的所有数据采集、处理、报告都是用Matlab写的程序,每天调了一天,运行一个脚本,自动在测试计算机上拿到数据,从测控计算机上拿到数据,根据测控计算机数据来确定车次和实验条件,生成一个简短的总结报告(PDF)。最终的报告我也一边做实验一边写脚本,最终几经测试,在交付的时候运行拿到了一个报告。

当然,我还编制了各种构造测试数据的脚本,当然这些脚本也可以用于伪造创建时间、统计特性都以假乱真的数据。

其次,我是微机原理的课代表。虽然我大学当过很多门课的课代表,但是微机原理大作业用汇编点了几个灯还是让我大为震撼……从那以后,我对所有的程序设计语言都没有什么敬畏之心。

什么精心设计,什么概念完美,所有的一切到最后就是指令、终端、控制器、寄存器,电位高低。

好吧好吧,ADT还是让我有所收敛的。离散数学也把我搞得有点上头,虽然没有泛函分析和测度论那么就上头就是了。

闲话说了那么多,为什么Rust?

C、Lisp之不敌,公所知也。C唯智胜,Lisp虽强,终为所禽。

福窃料之,Cpp有十败,Rust有十胜,Cpp虽兵强,无能为也。

Cpp繁礼多仪,Rust体任自然,此道胜一也。

Cpp以逆动,Rust奉顺以率天下,此义胜二也。

信息爆炸,程序失于宽,Cpp以宽济宽,故不慑,Rust纠之以猛,
而上下知制,此治胜三也。

Cpp外宽内忌,用程序而疑之,所任唯模板指针,Rust外易简而内机明,
用之无疑,唯才所宜,不间远近,此度胜四也。

Cpp多谋少决,失在后事,Rust策得辄行,应变无穷,此谋胜五也。

Cpp因累世之资,高议揖让以收名誉,士之好言饰外者多归之,
Rust以至心待人,推诚而行,不为虚美,以俭率下,与有功者无所吝,
士之忠正远见而有实者皆愿为用,此德胜六也。

Cpp见人饥寒,恤念之形于颜色,其所不见,虑或不及也,
所谓妇人之仁耳,Rust于目前小事,时有所忽,至于cargo,
与四海接,恩之所加,皆过其望,虽所不见,虑之所周,
无不济也,此仁胜七也。

Cpp委员会各家争权,谗言惑乱,Rust基金会御下以道,
浸润不行,此明胜八也。

Cpp程序是非不可知,Rust所是进之以礼,所不是正之以法,此文胜九也。

Cpp好为虚(函数)势,不知程序语言精要,Rust以少克众,
用trait如神,程序员恃之,bug畏之,此武胜十也。

Rust有此十胜,于以败Cpp无难矣。

上面这个十胜十败当然是扯淡和瞎编的,但是郭奉孝哄曹不哄程序员啊……Rust是真的先进。

工具链

其实我写了多年的C++,搞得我最恼火的就是工具链的问题。其实我技术很好,因为长期帮一群废渣力学的人搞开发环境。我什么开发环境都会搞,我们那个时代,TC就是很好用的玩意儿。Linux那是新得不能再新的时髦玩意儿,只有计算机系的人会搞。力学那帮渣渣,都是DOS,还有个老师,他的设备控制程序都是QBasic编的你信。

但是这么多年下去,Windows上搞个C++还是那么凡人,导致很多较C++的班,都用什么Code Blocks,Dev C++。无他,VS那一套简直装得要死人,还各种联网联网联网……还不如以前哪个VC 6.0+MSDN光盘的搞法。

虽然现在CMake我用得已经很溜了,至少AI用得很溜,但是我一点都不愿意在Windows下写C++,虽然我最多的C++代码都是在Windows下写的。装个库,搞半天,还各种打补丁改脚本改配置。

微软的那套玩意儿,我真是服了。

Linux下面C/C++搞起来开心多了,我很喜欢在WSL下面写C++,然后直接在Windows下运行。但是交付不行啊,客户都是Windows的,测试环境各种奇葩。

像Java那么流行,四分之一在于完美的虚拟机,四分之一在语言够差,一半都在Maven上。Java的构建工具,都不好用,但是还挺皮实。

都是些老古董。到了新的玩意儿,那就太丝滑了。

Rust的工具链,简直就是完美地保留了所有我们这些奇怪人类的奇怪爽点。

首先是rustup,单一的入口,管理所有的工具链。

rustup install,安装;rustup update,更新;rustup uninstall,卸载;rustup doc,文档;rustup help,帮助。

而安装rustupRustup.rs。虽然,还是要搞什么"You may also need the Visual Studio prerequisites."。

在WSL或者Linux,就直接:curl --proto '=https' --tlsv1.2 -sSf <https://sh.rustup.rs> | sh

然后,就装好了。

Cargo 带来的生态革命

Cargo 是 Rust 的构建系统和包管理器。它不仅管理依赖,还管理构建、测试和发布。

我最喜欢Cargo的一点,就是Cargo可以用来直接安装Rust编的程序。

cargo install

比如,那个强迫症要犯的typst,就可以直接用cargo install typst来安装。

然后,就可以直接用typst来编译文档了。

我自己编的程序,cargo install --git https://github.com/qchen-fdii-cardc/hugo-post-checklist,这是一个GUI程序,照样Windows/Linux直接用。

命令行程序同样的啊,比如那个刷新hosts的程序,cargo install --git https://github.com/qchen-fdii-cardc/updatehosts4rs

我的初衷不是给别人用,我的初衷是给自己用,换一台电脑,比如家里电脑、笔记本电脑,直接这么一拉,编译,命令就来了。

虽然我也抱怨<crates.io>那个先到先得搞得很多包名字超好笑,主要是不知道借鉴Maven的<groupId>/<artifactId>的搞法。但是,可用性真的很强啊。

标准库和语言

我还没怎么仔细看Rust的标准库,但是Rust对于标准库、是否依赖libc、是否依赖操作系统,还是很严肃的,这让人就很舒服。

C/C++也挺好的,我也很喜欢他们可以随意用apt/yum/brew来安装库。但是Rust的库还是一致性(!)比C/C++强多,也有人说这是因为Rust太弱鸡,只有那么几种写法,能过编译器的差不多就那个鬼样子。看我C++ 365变,每种都行!就说我牛叉不牛叉。

最后是有争议的语言特性。Rust是一个更加抽象一点的C;也是一个更加不自由的C++。反正C/C++是彻底放飞的。

Rust其实还挺严格的,表达能力比C强(存疑),但是也还是偏弱的。

但是,那几个所谓的学习曲线陡峭,其实都是扯淡。你要学Rust,就必须跟C一样学,学体系架构、学计算机原理。

也可以这样说:学了C语言,发现真是屁也不会做的,因为C语言的能力,跟它那孱弱的语言特性,根本不是一个数量级的。能够操纵内存地址,C语言是无所不能的。但是Rust就好多了,真的好好学了Rust,基本上,也能编挺多东西了。C语言要真的能编点啥,还得要《数据结构+算法=程序》,当然现在的年轻人应该都不知道这个作者和这本书了,老难啃……虽然比Knuth那几本没人看的砖头好太多。

所以说,Rust所谓的学习曲线陡峭,是因为Rust实际上学了C语言+一大堆开发技能。

我不觉得Rust哪些所谓难点难以理解,反而是什么trait,在我看起来可能还难一点点,我的意思是用trait来做良好的设计。

Rust的语法,其实挺简单的。

总结

原神,启动还是不启动?当然最后还是要看钱……有人给钱,VBA也能编。


文章标签

|-->rust


GitHub