为什么Dark不选择Rust/Clojure/Haskell/Scala? - darklang


本文来自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有大量的库,它们工作得很好,并且集成得很好。他们具有HoneycombLaunchDarklyRollbar的3rdparty库,它们对我们来说是重要的服务。但是,用于GCP似乎是超级草稿。
当试图使用异步时,我真的很难使事情变得异步。显然,递归为异步增加了新的复杂度。但是杀死我的是pinning
 
Rust是一种低级语言
我正在使用的是F#/ OCaml的语言, 它们更容易实现;Rust的语义虽然使许多事情变得容易,但并非是我想做的。
我认为我们大多数人都不需要Rust。我认为Rust是一个很棒的社区,生态系统和工具,它包装的语言很好地解决了我们很少有人遇到的问题。
Rust是一种非常底层的语言,这很容易忘记,我们对社区和工具如此着迷,以至于我们忘记了底层语言很烂。
也许Rust比大多数底层语言都更好,但请记住垃圾收集器很棒,通过使用GC,我们无需做任何会在Rust中所有涉及GC问题的工作。也许这会降低性能,但是我需要能够快速编写代码的能力远远超过我需要的额外性能。

相关:Dark网站的后端为什么选择F#?