Filosfino

观察世界,出走青铜时代、梦马臆想

学一门新语言

发布于 # Rust

学哪门语言

迫于业务代码海海望不到尽头,准备扩展一下视野学习一门其他语言。工作中使用的 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

从哪里开始