前言
著名的前端Vue框架,Next.js发布了最新版,宣布使用了一个新的JS编译工具--swc,来替换掉babel。 swc在功能上几乎与babel一样,具体的对比可以参见swc官网Comparison with babel | swc。只是swc是使用rust实现的,其编译的速度比babel快了10倍不止。
RUST是什么?
rust是一个静态的编译型语言,在语法,机制上都跟C/C++很像。它诞生的时间不久,但是热度很高,被称为网红语言。
RUST适合什么场景以及招聘情况?
RUST的特点就是快,因此非常适合做计算密集型的东西。
在市场上看,已经崛起的公司基本上都是沿用JAVA,后起之秀才愿意使用新技术,因此RUST短期内肯定不会大范围崛起,很难啃下后端JAVA的份额,只有像Go语言这种被字节这么大体量的新公司崛起才可能获取一席之地。
短期看,只会在新赛道打拼,目前看招聘的话,区块链行业对RUST的需求是最大的。
RUST 跟前端有什么关系?
后端的市场RUST很难啃,但是前端就不一样了。前端的工程化,非常依赖Webpack。但是Webpack是JS写的,它的laoder和plugin大多也是使用JS写的。
而JS这种动态的解释性+单线程语言,在性能上是天然不足的。当项目过大时,webpack的热更新,编译都很令人头疼(虽然相比C++的编译其实已经好多了)。随后涌出的esbuild,vite都是在从不同的角度来解决这个大麻烦。其中esbuild就是摒弃了JS,使用了GO这种支持协程的高性能语言。而SWC也是一个类似的思路,只不过它选用了RUST实现。
而我们知道,Webpack的编译主要实际上对文本的处理,这个属于计算密集型。如果我们将各种JS的loader都从JS切到RUST或者GO,那么将带来数十倍的性能优化。SWC只是做了Babel的事情,我认为未来会有更多的类似工具出现的。
另外,Rust 和 webassembly关系密切。WebAssembly现在还是萌芽状态,但是发展很快。WebAssembly对RUST的支持非常友好。webassembly被认为是处理前端性能问题的有效手段,在一些计算密集型的项目中,比如在线文档,云IDE,可视化领域都非常有潜力。
对于目前的前端从业者来说,rust的场景其实不多,可能更多偏向于做一些工具类的东西(但这些工具用node也能完成,只是rust性能好一点)。学一学,搞一些数据采集分析的工具还是很有用的,或者自己好玩写一个前端的loader(一不小心火了呢)。
学习RUST的前置条件
RUST的入门门槛比JS高很多,如果本身JS理解的就不是很深刻,那么其实不建议学习这个。 要求先理解这些概念:
- 解释型语言和静态语言的区别
- JS在内存上是如何给string,class,number类型分配空间的
- GC是什么,会带来哪些问题
- 指针是什么
如果以上几个概念,都不是很清晰,那就建议补全一下JS的这些知识,有余力再来学习RUST。
注意!注意!注意!
前端同学如果要学习Rust,要慎重思考一下ROI。
一般情况下,是不太推荐大家来学习的。有这个时间,学习学些webpack,react底层,甚至研究研究CSS都比较好。
如果只是简单的跑一个hello world,意义也不是很大。因此建议大家,要么不学,要么就学的深入一点。
前端日常都是js,而rust是一种完全不同的编程范式,体验一下,或许有不一样的收获。
环境配置
好了,如果你看到这里,那就认为你已经准备好了。我们开始吧~
万事第一步,搭建开发环境。
像node一样,我们需要下载核心库。可以在这里下载: 入门 - Rust 程序设计语言 (rust-lang.org) MAC可以直接使用命令行安装,windows则需要下载安装程序。 在安装过程中,可能会出现失败的情况,不要灰心,多安装几次就好了。(最好是科学上网) RUST 和Node很像,node有node 和npm两个核心。Rust有rustc,以及包管理工具cargo 安装完成之后,输入
cargo --version
rustc --version
复制代码
来确定是否安装成功
第二步,安装必要的编译库
如果你是MAC,就可以跳过这一步。 如果是windows,则需要C++的构建工具集,才能正常的编译rust。可以去微软官网下载vs的安装包,然后安装C++相关的组件即可。
第三步,试一下环境
先后在命令行执行
cargo new hello_cargo //初始化一个示例项目
cd hello_cargo //进入项目根目录
cargo build // 编译项目
复制代码
此时应该能在命令行看到类似的语句
Compiling hello_cargo v0.1.0 (file:///projects/hello_cargo) Finished dev [unoptimized + debuginfo] target(s) in 2.85 secs
如果出现了error,fail之类的字样,要排查一下是否是第二步没做好。 此时,执行一下
$ ./target/debug/hello_cargo # 或者在 Windows 下为 .\target\debug\hello_cargo.exe
复制代码
就能看到命令行打印出来的"Hello World"
第四步,配置VSCode调试环境
VSCode配置比较简单,首先使用VSCode打开刚刚初始化的hello项目,它会智能提示安装几个插件:
- RUST Rust - Visual Studio Marketplace
- rust-analyzer rust-analyzer - Visual Studio Marketplace
- CodeLLDB CodeLLDB - Visual Studio Marketplace 其他的可以根据提示酌情安装
插件安装完毕之后,直接F5运行,会提示你配置lunch.json,VSCode会自动生成一个配置。我们删除配置文件中多余的configurations,删的只剩第一个。然后将剩下的配置修改为:
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "lldb",
"request": "launch",
"name": "Debug executable 'hello_cargo'",
"cargo": {
"args": [
"build",
"--bin=hello_cargo",
"--package=hello_cargo"
],
"filter": {
"name": "hello_cargo",
"kind": "bin"
}
},
"args": [],
"program": "${workspaceFolder}/target/debug/hello_cargo",
"cwd": "${workspaceFolder}"
}
]
}
复制代码
配置结束,可以在源代码中打一个断点,再F5运行一下,看断点是否生效就好啦!