本文来自Dark Lang的创始人兼首席执行官Paul Biggar,Darklang语言是一种编程语言(具有内置基础结构),承诺“deployless”部署,从代码到生产的时间不超过50毫秒。
Dark正在使用F#。这对包括我在内的人们来说都是一个惊喜。多年来,我们一直在谈论是否使用Rust重写;我们已经有了一个用Rust编写的CLI和两个服务,所以我很确定将来重写的语言是Rust。
Why not Clojure/Haskell/Scala?
人们也询问其他几种语言,因此让我们先将它们排除在外。
- Clojure
我对Clojure有很多经验,因为CircleCI几乎都是Clojure。但是,我们花了很多时间来处理意外的复杂性,特别是“此字段是什么类型”,并且在整个地方都为空。因此,即使Clojure是一种可爱的语言,我还是故意选择不使用动态类型的语言。
- Haskell
以前,我曾经爱过Haskell,当时我在Recurse Center时尝试用它编写翻译,但我不喜欢它。HN一个用户的帖子完全符合我的感觉:
根据我的经验,Haskell社区的学术性更高。一篇最近的文章:“有人向我指出的私人通信的元组函数\ X - >(X,X)实际上是biapplicative对角化和一些相关结构的一个特例,这篇文章收到了39封狂热的回复。
- Scala
我没有使用Scala的经验,但是我对语言和社区的总体感觉是整个事情都是一团糟。所以我没有考虑,现在仍然不会。
Ok, why not Rust?
快速总结一下, Rust好的部分是:
- 工具很棒
- 库包生态系统很棒
- 社区很棒
- 宏很好(尽管我觉得我过度使用它们来覆盖语言中的问题)
坏的部分是
- 不得不做内存管理糟透了
- 模式匹配不能很好地工作
- 做事情的方式太多(Arc vs Rc,异步vs sync,不同的stdlib)
- 语言不是一成不变的
- 必须与编译器战斗
最终,当需要做出决定时,它归结为几项主要事情:缺少GCP库以及该语言的低级本质。
Rust有大量的库,它们工作得很好,并且集成得很好。他们具有Honeycomb,LaunchDarkly和Rollbar的3rdparty库,它们对我们来说是重要的服务。但是,用于GCP的库似乎是超级草稿。
当试图使用异步时,我真的很难使事情变得异步。显然,递归为异步增加了新的复杂度。但是杀死我的是pinning。
Rust是一种低级语言
我正在使用的是F#/ OCaml的语言, 它们更容易实现;Rust的语义虽然使许多事情变得容易,但并非是我想做的。
我认为我们大多数人都不需要Rust。我认为Rust是一个很棒的社区,生态系统和工具,它包装的语言很好地解决了我们很少有人遇到的问题。
Rust是一种非常底层的语言,这很容易忘记,我们对社区和工具如此着迷,以至于我们忘记了底层语言很烂。
也许Rust比大多数底层语言都更好,但请记住垃圾收集器很棒,通过使用GC,我们无需做任何会在Rust中所有涉及GC问题的工作。也许这会降低性能,但是我需要能够快速编写代码的能力远远超过我需要的额外性能。