学哪门语言

迫于业务代码海海望不到尽头,准备扩展一下视野学习一门其他语言。工作中使用的 Python 是一门强类型、带 GIL(全局解释器锁)、执行效率较低的动态语言,初步定位要接触的语言特性为

  1. 并发友好
    1. 感受各种并发模型和其上限
    2. 支持灵活的变量可变性控制
  2. 函数式编程友好
  3. 静态检查
    1. 保证语言效率

读完 《七周七语言》《七周七并发模型》。直接上手纯函数式语言无疑是地狱难度,对于习惯了可变变量的程序员们,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 做自动内存管理(有些场合需要手写 referenceLifetime,会很让人头疼,甚至可能需要各种花式 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
  • rustup 类似 pyenv 的多版本管理
    • Rust 分 nightly / beta / stable 三个语义化版本
  • rust-unofficial
    • too-many-lists 作者通过渐进式实现单链表、双链表,记录了其中大战编译器的步骤、debug 思路、解决方案,非常详细的讲了每段增加代码的原因。