辛宝的玄酒清谈!
993 words
5 minutes
09-速通 Syntax 647 对比 NodeRust 基础概念
2023-10-30
<audio src="ipfs://bafybeiffukdukxeax4niw6bntxm36fs2rzesb6x65fcoxgukrqgs4lfgdi" name="速通 Syntax 647" artist="辛宝Otto" cover="ipfs://bafkreigudhqviyiwl4tytbxh4d247dbz3s5gatdg2bxjpoouqiimwhekwu"></audio>

《咿呀能跑就行》是我的个人 solo 播客,草稿版本的 web worker 播客。主打随意和快速消费,如果你对我聊的话题感兴趣,想在 web worker 播客中认真讨论,欢迎和我互动。

本次带读速通 20230731 发布的 Syntax.fm 647 Rust for JavaScript Developers - Node vs Rust Concepts,原时长大概 30 多分钟,速通大概 13 分钟。

在比较 JavaScript (JS) 和 Rust 的生态方案时,我们可以从基本层面进行介绍,而不需要对 Rust 的使用经验。

包管理工具#

包管理工具 Package Manger node 可以使用 npm/pnpm/yarn rust 使用 Cargo

cargo 除了包管理,还可以运行测试,而不是 node 中的 vitest/jest/mocha/chai 还可以 build your doc 还可以发布 rust library 还可以 run code - like npm run start

main package file Cargo.toml 类似 package.json

关于 Cargo.toml

Cargo.toml 是 Rust 语言中的一个配置文件,用于描述和管理项目的元数据和依赖项。

在一个 Rust 项目中,Cargo.toml 文件位于项目的根目录下。它使用 TOML (Tom’s Obvious,Minimal Language) 格式来描述项目的配置信息。

TOML (Tom’s Obvious,Minimal Language) 是一种用于配置文件的轻量级格式,由 Tom Preston-Werner 创建。它的设计目标是易于阅读和编写,同时保持简洁和明显的语法。

TOML 的设计目标是使配置文件易于编写和阅读,同时保持简洁和明显的语法。它在 Rust 社区中得到了广泛的应用,成为了 Rust 项目中常用的配置文件格式之一。

类似 yaml

cargo build 构建 发不到一个 rust 内部的注册表,类似 npm https://crates.io/

node 中有不同的选项,Python 中更多了,rust 只有一个。有一个 rust fork,crab

Cargo doc

cargo doc 是 Rust 语言中的一个命令行工具,用于生成项目的文档。它会根据项目中的注释和文档注释 (doc comments) 生成一个 HTML 格式的文档网站,以便开发者可以方便地查看和浏览项目的文档。

从代码注释中提取为文档, 继续看 crates.io,每隔项目都有 readme,而且大部分都很清晰。因为生成文档太容易了。

阅读 docs.rs 文档,不仅可以学习 rust,还能学习这种风格,在 js 中也可以收益。

类似 jsdoc,比 jsdoc 更容易,但需要学习语法。practice.rs 的 comments-docs

rust is fully typed,类似 ts 的静态类型,也有泛型。在 ts 中的经验可以用于 rust

继续看内存安全 memory safety。是个复杂话题,js 中是有垃圾回收机制的,Rust 没有垃圾回收的基础上构建内存安全。细节比较复杂,就略过了。

并发 concurrency,在 js 中是 single thread 单线程。Rust 支持 multi threading

Promise/async-await Rust 中叫 feature。Rust 有 async-await 单线程中,和 js 很像。

谈到了 await 关键字出现的位置和 js 不同。

有时候看 Rust 能看到很多 javascript-like 的代码。

Rust 没有 try..catch,处理异常类似模式匹配,有点想 switch

总结来说,Rust 中的错误处理方式使用模式匹配来处理错误,这种方式更加安全和可靠。与传统的 try-catch 机制相比,它可以在编译时捕获到潜在的错误,并提供更好的代码可读性和可维护性。

import 导入。导入语法不同,Rust 先导入模块在使用具体方法,类似 Python,js 中无法使用这种推导。具体双冒号和斜杠的用法就忽略。

在 js 中都是对象,所以我们 a.b.c 就能访问对应的数据、功能。在 Rust 中使用 :: 双冒号

high level 表述: 什么地方不同?

  • 技术选择更快乐,使用 Rust 提供的足够,很多东西不需要选择。
  • Rust 有时候像 Typescript/JavaScript

基本类型 13 种,包含大量整数类型。两种不同的 flow type。后面可以继续讲,比如类型 type、结构、变量。

09-速通 Syntax 647 对比 NodeRust 基础概念
https://ijust.cc/fm/09/
Author
辛宝 Otto
Published at
2023-10-30