学一门新语言2019年3月11日
学哪门语言
迫于业务代码海海望不到尽头,准备扩展一下视野学习一门其他语言。工作中使用的 Python
是一门强类型、带 GIL(全局解释器锁)、执行效率较低的动态语言,初步定位要接触的语言特性为
- 并发友好
- 感受各种并发模型和其上限
- 支持灵活的变量可变性控制
- 函数式编程友好
- 静态检查
- 保证语言效率
读完 《七周七语言》 和《七周七并发模型》。直接上手纯函数式语言无疑是地狱难度,对于习惯了可变变量的程序员们,Clojure
这种非纯函数式语言用起来会比较舒服,在需要可变性的时候允许引入可变,还有 JAVA VM
类库支持。Erlang
中的 Let it crash
哲学和语言采用的 Actor
并发模型非常打动人,不间断服务,生产环境中超高的可用性都非常棒。
简单翻看了一下国内很火的 Golang 和人气很高的 Rust,两个很有特色的语言。
Golang
静态、不能写函数式,语言使用 goroutine + channel
原生支持 CSP 并发模型
,可以 和 thread M:N 调度
,runtime GC
,包比较多,包管理工具比较杂,二进制分发。
Rust
语言使用静态的 mutable/immutable reference check
来规避变量可变性带来的错误,使用变量 scope 做自动内存管理(有些场合需要手写 reference
的 Lifetime
,会很让人头疼,甚至可能需要各种花式 workaround),minimal runtime,zero cost abstraction(static dispatch..),宏支持 AST
匹配,操作符重载,支持函数式(Iter
/Option
/Result
,懒计算),好用的 Enum
/ Pattern Match
,灵活好用的包管理和依赖管理,有健全的文档、生态、编译器提示。看得出来是一门非常有诚意的语言。有些大学开始专门设置 Rust
课程,比如 http://cis198-2016s.github.io/。
从通用语言的角度出发,年轻的 Rust
更能锻炼一个工程师的编程思维,较成熟的 Golang
则更适合搭建并发方向的产品。作为第二语言的话,我选 Rust
。
从哪里开始
- 官方文档 给了一个非常好的入门建议手册,从了解、使用,到语言高级特性、compiler 工作方式等等
- the book (里面有详细介绍
Rust
的内存模型,这是很少在其他语言的入门读物中见到的。对于引入的新概念borrow
/lifetime
等等,都有非常详细的说明) - rust by example
- cargo book
- the book (里面有详细介绍
- rustup 类似
pyenv
的多版本管理- Rust 分
nightly
/beta
/stable
三个语义化版本
- Rust 分
- rust-unofficial
- too-many-lists 作者通过渐进式实现单链表、双链表,记录了其中大战编译器的步骤、debug 思路、解决方案,非常详细的讲了每段增加代码的原因。