编程语言
目录:
摘要
问题
阿拉需要为阿拉个软件选编程语言。阿拉有两个主要需要:一种适合 Web 应用个前端编程语言,还有一种适合服务器应用个后端编程语言。
决策
前端阿拉选 TypeScript。
后端阿拉选 Rust。
状态
已决定。对出现个新备选方案,阿拉保持开放。
详情
假设
前端应用是典型个:
典型个用户搭交互
典型个浏览器搭系统
典型个开发搭部署
前端应用可能演进得很快:
阿拉想确保快速又容易个开发、部署、迭代等等。
阿拉重视可证明性,比方类型安全,为了做到迭点,阿拉愿意多做一眼工作。
阿拉勿需要兼容遗留系统。
后端应用个要求高于典型:
对质量个目标高于典型,特别是可证明性、可靠性、安全性等等。
对近实时个目标高于典型,也就是阿拉勿想因为虚拟机垃圾回收而出现停顿。
对函数式编程个目标高于典型,特别是并行化、多核处理搭内存安全。
阿拉接受较慢个编译速度,换取编译期安全搭运行时速度。
限制
阿拉对能搭主要云提供商个函数服务(比方 Amazon Lambda)一道用个语言,有很强个限制。
立场
阿拉考虑过迭眼语言:
C
C++
Clojure
Elixir
Erlang
Elm
Flow
Go
Haskell
Java
JavaScript
Kotlin
Python
Ruby
Rust
TypeScript
论据
每种语言个小结:
C:被否决,因为安全性低;Rust 几乎样样做得更加好。
C++:被否决,因为伊一团糟;Rust 几乎样样做得更加好。
Clojure:出色个建模;最好个 Lisp 近似;JVM 上有出色个运行时。
Elixir:出色个运行时,包括可部署性搭并发;出色个开发者体验;生态相对较小。
Erlang:出色个运行时,包括可部署性搭并发;开发者体验有挑战;生态相对较小。
Elm:看起来非常有前途;IBM 辣发表重要个案例研究,结果良好;生态较小。
Flow:比 JavaScript 有意思个改进;勿过开发者辣离开伊。
Go:出色个开发者体验;出色个并发;勿过有一连串做坏个决策,削弱了语言个记录。
Haskell:最好个函数式语言;开发者社区较小;还呒没足够多公开发表个生产成功案例。
Java:出色个运行时;出色个生态;开发者体验一般。
JavaScript:有史以来最流行个语言;最广泛个生态。
Kotlin:修复了 Java 个许多问题;有 JetBrains 个出色支持;有从 Java 移植到 Kotlin 个好个公开案例。
Python:系统管理最流行个语言;出色个分析工具;好个 Web 框架;勿过被 Google 放弃,改用 Go。
Ruby:有史以来最好个开发者体验;最好个 Web 框架;最友善个社区;勿过非常慢;打包有眼难。
Rust:最好个新语言;强调零抽象;强调并发;勿过生态相对较小;而且对某眼编译器加速有刻意个限制,比方直接内存访问必须明确标成 unsafe。
TypeScript:给 JavaScript 加上类型;出色个转译器;开发者越来越强调从 JavaScript 移植到 TypeScript;有 Microsoft 个有力支持。
阿拉认为,虚拟机有一套阿拉现在勿需要个取舍,比方为提供运行时能力而增加个复杂度。
阿拉相信,阿拉个核心决策由两个横切个顾虑驱动:
要最快个运行速度搭最紧密个系统访问,阿拉会选 JavaScript 搭 C。
要接近最快个运行速度搭接近最紧密个系统访问,阿拉选 TypeScript 搭 Rust。
荣誉提名给虚拟机语言搭 Web 框架,要是阿拉想要虚拟机语言,阿拉会选:
Clojure 搭 Luminus
Java 搭 Spring
Elixir 搭 Phoenix
影响
前端开发者需要学 TypeScript。要是开发者主要经验是用 JavaScript,迭个学习曲线大概率比较容易。
后端开发者需要学 Rust。要是开发者主要经验是用 C/C++,迭个学习曲线大概率适中;要是开发者主要经验是用 Java、Python、Ruby 或者类似个内存托管语言,学习曲线会比较难。
TypeScript 搭 Rust 侪相对比较新。迭意味着许多工具还呒没迭眼语言个文档。比方,devops 流水线需要为迭眼语言配置,到现在为止,阿拉评估个 devops 工具里向,呒没一个有迭眼语言个默认例子。
TypeScript 搭 Rust 个编译辰光相当慢。其中有眼可能是因为语言比较新。阿拉可能想看看哪能缓解编译慢,比方按需编译、编译并发等等。
迭眼语言个 IDE 支持还勿普遍,也还勿是一流。比方,JetBrains 销售 PyCharm IDE,对 Python 有一流个支持,但是勿销售对 Rust 有一流支持个 IDE;JetBrains 可以用 Rust 插件,相对于 Python 语言支持,大概提供 80% 个 Rust 语言支持。
相关
相关决策
阿拉会努力做出搭迭眼语言一致个生态选择。
比方,阿拉想选一个对迭眼语言有好个能力个 IDE。
比方,对阿拉个前端 Web 框架,阿拉更加有可能决定选倾向于 TypeScript 个框架(比方 Vue),而勿是倾向于纯 JavaScript 个框架(比方 React)。
相关需求
阿拉整个工具链必须支持迭眼语言。
相关工件
阿拉预期可能会拿一眼机密导出到环境变量。
相关原则
量两趟,造一趟。阿拉拿一眼安全性放辣一眼速度前头。
运行时比编译辰光更加有价值。阿拉拿客户使用放辣开发者使用前头。
备注
迭里写任何备注。