我在前公司主要使用的技术栈是 Go。Go 语言本身语法简单,既有动态语言的一些特性,又有很高的运行效率,同时拥有很好的并发运行能力的支持。Go 语言本身【大道至简】到丑陋,不过正是因此,反而统一了编码风格,对于团队协作而言非常有意义。而且 Go 直接输出可执行文件,工程部署上简单很多,也是公司很多团队都会用的原因。

Go 本身也有很多问题:乱用 interface、缺乏泛型、goroutine 调度、半吊子的面向对象、不完善的依赖管理(go mod 以后好多了)等。

后来写 serverless runtime 的时候,基于 V8 ,又写了一段时间 C++,欲仙欲死。因为不是原生开发,是基于 V8 的 API。对我这种不甚熟悉 C++ 的同学,搞出来一大堆奇奇怪怪的姿势,感叹确实 C++ 很强大很厉害,又担心过个把月我也看不懂我写的啥了。

离职后,本来是用 Go 在重写小站用的静态生成器(当初版本还是 GOPATH 时代,还没 go mod)。后来觉得,玩自己熟练的东西没意思,就想试一试 Rust。最早调研 serverless runtime 的时候就看到 Deno 使用的是 Rust v8 bindings —— rusty_v8。很多 wasm 的 runtime 也是用 Rust 写的,比如 WasmEdgeWasmer。当时调研认为 wasm 是边缘函数计算很有可能的未来。基于这些考虑,学习一下 Rust 好了。