【最近忙成狗了,很久没有更新公众号了。本篇翻译,要感谢AlecHe的支持】
这是一篇译文。
原文链接:https://2ality.com/2020/10/js-plus-other-languages.html
原文标题:Writing JavaScript tools in other languages – a new trend?
正文开始
最近我们发现,用非JavaScript的语言来构建的JavaScript工具越来越多。这篇博文列举了一些例子,并解释了不用JavaScript的原因。
1. 一些例子
我在Twitter上询问了大家喜欢用什么非JavaScript语言来构建JS工具,这是一些大家提及到的工具:
Build工具和编译器:
- esbuild - Go: JavaScript打包和压缩的工具。它可以将JavaScript和TypeScript的代码进行打包,用于Web的分布式部署
- swc - Rust: JavaScript/TypeScript的编译器
- Google Closure Complier - Java: 用于JavaScript的检查和优化
检查代码风格和格式化:
- RSLint - Rust: JavaScript的代码风格检查器
- Flow - OCaml: JavaScript的静态类型检查器
- dprint - Rust: 代码格式化平台
命令行管理工具:
- Fast Node Manager (fnm) - Rust: Node.js的版本管理器
- Volta - Rust: 管理JavaScript的命令行工具,例如node,npm,yarn
2. 为什么用其他语言
用非JavaScript语言(或者是编译成JavaScript)有什么好处呢?
- 它们可以编译成本地二进制文件从而可以有更快的启动时间
- 本地的二进制文件也通常比JavaScript代码运行得更快
- 许多语言可以使同步编程变得更加容易
另外,许多非JavaScript语言现在可以被编译成WebAssembly,这使二进制文件几乎可以和JavaScript一样方便并且能够很好地和JS集成。
考虑到每个语言都有自己的特性,一个非JavaScript语言也可能更好地适应某一个特定的任务。比如,OCaml/ReasonML,Haskell,和其他的函数式编程语言可以支持代数数据类型,可以帮助处理像在分析和编译范式语言时用到的抽象语法树这样的数据结构。
2.1 使用JavaScript的优势
使用JavaScript也有优势:
- 更容易找到工具的贡献者:从一方面来说,熟悉非JS语言的程序员对于构建JS相关的工具比较不感兴趣。另一方面,非JS语言对于JavaScript程序员来说也是一种障碍。
- 你可以“内部测试” - 把这个工具的源代码用于测试这个工具。使用工具的源代码进行测试可以使你更加明白你对于这个工具的需求是什么。
- JavaScript有一个丰富完善的的生态系统,有许多语言定义,文档,优秀的工具,以及许多库(通过npm安装管理)。
- 对于函数式编程来说,TypeScript并不像特定的语言一样优雅,但也和它差不了多少并且还有JavaScript的生态系统支持。比如,差别联合类型比代数数据类型稍微麻烦些,但是有着许多一样的有点(比如编译时间的详尽性检查)。
如果追求高性能,AssemblyScript可能是一个选择:它是一个更加严格的TypeScript版本,并且可以被编译成WebAssembly。