产品架构设想
依托于最新的前端技术,使用 rust 语言进行编写,编译成 wasm 在浏览器中运行,通过转换层最终调用 WebGL 或 WebGPU 完成 web 端渲染工作。后面可以通过替换不同的渲染层来实现渲染在桌面应用程序和移动应用程序上。
功能点
Q&A
为什么不用 JS/TS
我们这个项目的目录就是为了在工作之余学点新的东西,js/ts 的语法大家肯定已经烂熟于胸了,所以不能再用已掌握的这些。
为什么是 Rust ?
既然要学习一门新的语言,那最好选一个和之前语言差异比较大的,这样在学习新知识的同时,还能同时和旧的知识进行比较,学习二者的差异以及为何会有不同的设计,从而巩固新知识和旧知识。
之所以选择 Rust 是因为 Rust 有以下特点:
静态类型
Rust 是一门 强类型,且类型安全的静态语言 。
虽然 ts 给 js 带来了类型定义,但是为了兼容 js 的灵活所以有了各种个样的类型断言,所以 ts 的类型不够彻底,学习 Rust 有助于让我们学习到强类型语言的编程方式。体会另一种痛苦。
独特的内存管理
区别于 js,rust 提供了一种无 GC 也不需要手动管理内存的方式,不过 rust 虽然解决了内存回收的问题,但是为了解决这个问题需要引入更多的概念,比如 借用,自引用,变量声明周期中。和 GC 相比虽然有了更高的性能,但是会代码更多的心智负担,二者并无优劣,只是为了不同的目标做的取舍。要学好 Rust,需要深入理解内存、堆栈、引用、变量作用域等这些其它高级语言往往不会深入接触的内容。有助于我们理解代码的底层实现,体会另一种痛苦。
错误处理
Rust 有一套独特的处理异常情况的机制,它并不像其它语言中的 try 机制那样简单。
Rust 的理念是所有可能会出现的错误,都应该被处理。
这样我们学习了一种新的错误处理方式,这个其实在我们开发中很有用,js 中很多可能会存在错误的地方我们经常会不记得 try 一下,所以导致生产环境出现问题,而 Rust 的错误处理让我们时时刻刻必须去显式处理所有错误,可以让我们体会另一种痛苦。
优秀的编译器和类型检查工具
Rust 会通过语法、编译器和 clippy 这些静态检查工具半帮助半强迫的让你成为更优秀的程序员,写出更好的代码。Rust 程序只要能跑起来,那代码质量其实就是相当不错的,不像 js 一样,随便写写就能跑起来,有些错误只能在运行时发现,因为 Rust 编译器、clippy 啥的实在是严师厉友,甚至有些鸡毛。Rust 开发的大部分时间,其实都是在和他们斗智斗勇。可以让我们体会另一种痛苦。
新
Rust 最早是 Mozilla 雇员 Graydon Hoare 的个人项目。从 2009 年开始,得到了 Mozilla 研究院的资助。2010 年项目对外公布,2010 ~ 2011 年间实现自举。自此以后,Rust 在设计变化 -> 崩溃的边缘反复横跳(历程极其艰辛)。终于,在 2015 年 5 月 15 日发布 1.0 版。
Rust 是一门很新的语言,新语言有个好处就是它在最开始设计的时候,就能借鉴已有语言的各种好的设计,并且不会有历史包袱。
虽然很新,但是 Rust 也很火,其连续七年成为全世界最受欢迎的语言,并且它建立了一个强大且活跃社区,已经有了一整套完善稳定的项目贡献机制。
开源
目前 Rust 的主战场是在开源上,Go 的成功也证明了农村包围城市的可行性。
- UI 层开发,Rust 的 WASM 发展的如火如荼,隐隐有王者风范,在 JS 的基础设施领域,Rust 也是如鱼得水,例如 swc、 deno 等。同时 nextjs 也是押宝 Rust,可以说 Rust 在前端的成功完全是无心插柳柳成荫。
- 基础设施层,数据库、搜索引擎、网络设施、云原生等都在出现 Rust 的身影,而且还不少。
- 系统开发,目前 Linux 已经将 Rust 列为即将支持的内核开发语言,是继 C 语言后第二门支持内核开发的语言,不过刚开始将主要支持驱动开发。
- 系统工具,现在最流行的就是用 Rust 重写之前 C、C++ 写的一票系统工具,还都获得了挺高的关注和很好的效果,例如 sd, exa, ripgrep, fd, bat 等。
- 操作系统,现在在使用 Rust 开发的操作系统有好几个,其中最有名的可能就是谷歌的 Fuchsia,Rust 在其中扮演非常重要的角色。
- 区块链,目前 Rust 和 Go 可以说各领风骚,未来 Rust 可能会一统江湖。
为什么又是表格
市面上已经有很多开源的表格产品了,我们再做一次是否有重复造轮子的嫌疑?
不是的,我们做 next-sheet 的目的不是结果,而是过程,我们要通过开发 next-sheet 学习新的技术,掌握更多的知识。同时 表格 也是我们公司的核心业务,开发这个项目也能我们更深入得理解表格的业务逻辑。