Rust.unwarp(): 编译器驱动开发


prtyaa
prtyaa 2023-12-25 13:34:41 50242
分类专栏: 资讯

用 Rust 来写个应用,这个想法颇久了。之前呢,要么找不到合适的场景,要么觉得 Rust 门槛有些高。直到最近呢,刚好对底层编程有点想法,便想着用这门语言做点东西玩玩。

考虑到,我用这门语言的时间只有一星期多,某些观点和感受并非那么准确。因此,我的观点并不适合作为一份参考材料。

Rust 是什么?

让我来 copy 一下

Rust 是由 Mozilla 主导开发的通用、编译型编程语言。设计准则为“安全、并发、实用”,支持函数式、并发式、过程式以及面向对象的编程风格。 Rust 语言原本是 Mozilla 员工 Graydon Hoare 的私人项目,而 Mozilla 于 2009 年开始赞助这个项目,并且在 2010 年首次揭露了它的存在。

顺便加上 MDN 上的介绍:

Rust 是一个全新的开源系统编程语言,由 Mozilla 和社区的义务劳动者创造,它帮助开发者创造高速与安全的应用,同时能享受到现代多核处理器的强大特性。Rust 使用易懂的语法避免了段错误 (segmentation faults) 并保证了线程安全。

不仅如此,Rust 提供了零成本抽象,更多语义,内存安全保证,不会发生竞争的线程,基于特性 (trait) 的泛型,模式匹配,类型推导,高效的 C 绑定,和最小运行时大小。

所以,就这个简介来说,这个语言已经差不多有十年的历史了。

Rust 优点

开始之前,我仍然是要强调一下的,这里的优点是对比我所学的其它语言而言的,如 Go、Java、Kotlin、TypeScript或者其它。

底层语言 && 系统编程语言

我正在寻找一门不是那么复杂的底层编程语言,以陪我完成一些更有意思的工作,而且还不需要那种 “指向指针的指针”。就这方面来说,Go 是一门不错的语言,但是没有 OO。哦,不对,对于 Go 来说的,它的 OO 应该是:Yes and No

从某种意义来说,Go 也有类似的潜质,面向的也是类似的人群。然而,从现有的情况来说,Go 更像是面向网络编程,而非系统编程。

编译器驱动

我记得我听闻到的一个关于 Rust 的观点是:只要编译成功,基本呢,不会出错。比如烦人的内存泄漏之类的问题(当然还是会有一些的,只是要写出来并不是那么容易)。

编译器内建了强大的纠错功能。它把我们在运行时遇到的问题,提前到了编译时。也因此,相比于其它语言,它可能会降低你的开发速度。

从某中意义上来说,它相当于是内置了一个 Sonarqube、Findbugs 这一类的 SAST(静态应用程序安全测试)工具。并在编译时失败,以强迫你修复潜在的漏洞。

这其实是个缺点,哈哈哈。

交叉编译

在 Go 一样,在这一点上远远比 C/C++ 还是优秀。

包管理 + 构建

在几个底层语言里,C/C++、Go、Rust 里,几乎只有 Rust 的包管理是好用的。虽然说 Go 也有,但是就是渣啊。为了使用方方便,我基本选择的是拷贝,而不是用 go mod。

与此同时,我们还可以拓展 Cargo 的功能,以进行更多的操作。

==,Go 有构建工具吗?可能是 Makefile 吧

和 Web 的无缝结合

是的,作为一个追求跨平台的开发人员,我特别看好 Rust 的两个 Web 相关的方向。

  • 高性能 Web。Rust + WASM,
  • 更高性能地跨平台应用。Rust + Electron + Node.js,结合 Neon Binding,可以编译为 Node.js 的模块,并在 Electron 应用中调用,开发跨平台桌面应用。

在一切都云化之后,它的这一点特质将会越来越重要。

编程语言优点

从社区来说,它还有这么一些优点:

  • 优秀的 Macro 宏定义机制
  • 可 OO。基于 Traits 的简洁而强大的范型系统
  • 错误处理。基于 Option & Result 的空值和错误处理
  • 防 OOM。基于 Ownership、Borrowing、Lifetime 的内存管理机制

缺点

从上手难道上来说,我觉得 Rust 是比 Go 更加复杂的。

学习成本 + 处理更多的细节

大抵这是一门系统集成编程语言,对于原先我们使用的那些编程语言来说,原先的这些事都是由 bug 和编译器来体现。于是乎,我们要处理更多的细节。

Rust 的诸多语法,都有些不合直觉。除此,Rust 还有一个功能非常强大的宏(macro)系统。嗯,每多一个特性,就多一点点的复杂度。

复杂的所有权机制

Rust 引入了所有权的概念和工具,以在没有垃圾回收机制的前提下保障内存安全。这是一个相当复杂的概念——主要是在其它语言中都没有。

一个非常有意思的例子就是对于字符串的操作。

let mut owned_string: String = "hello ".to_owned();
let borrowed_string: &str = "world";

owned_string.push_str(borrowed_string);

嗯,对,处理一个字符串,你都要小心翼翼的。所以,我还是用 format 来做这样的事情:

format!("{}{}", owned_string, another_owned_string);

缺少支持完备的 IDE

Rust 并非没有可用的 IDE,而是还没有像 Intellij IDEA 那么完备的 IDE。

我使用 Clion + Rust 插件来开发应用,但是它并非非常完美 —— 主要是,我依赖于 IDE 来进行重构,以及借助于 IDE 的智能提醒。

 

网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。

本文链接:https://www.xckfsq.com/news/show.html?id=30282
赞同 0
评论 0 条
prtyaaL2
粉丝 1 发表 2553 + 关注 私信
上周热门
如何使用 StarRocks 管理和优化数据湖中的数据?  2987
【软件正版化】软件正版化工作要点  2906
统信UOS试玩黑神话:悟空  2881
信刻光盘安全隔离与信息交换系统  2764
镜舟科技与中启乘数科技达成战略合作,共筑数据服务新生态  1297
grub引导程序无法找到指定设备和分区  1270
华为全联接大会2024丨软通动力分论坛精彩议程抢先看!  172
2024海洋能源产业融合发展论坛暨博览会同期活动-海洋能源与数字化智能化论坛成功举办  170
点击报名 | 京东2025校招进校行程预告  166
华为纯血鸿蒙正式版9月底见!但Mate 70的内情还得接着挖...  164
本周热议
我的信创开放社区兼职赚钱历程 40
今天你签到了吗? 27
信创开放社区邀请他人注册的具体步骤如下 15
如何玩转信创开放社区—从小白进阶到专家 15
方德桌面操作系统 14
我有15积分有什么用? 13
用抖音玩法闯信创开放社区——用平台宣传企业产品服务 13
如何让你先人一步获得悬赏问题信息?(创作者必看) 12
2024中国信创产业发展大会暨中国信息科技创新与应用博览会 9
中央国家机关政府采购中心:应当将CPU、操作系统符合安全可靠测评要求纳入采购需求 8

加入交流群

请使用微信扫一扫!