自研编程语言

关于

我正在研发一门新的编程语言,希望能结合 TS 和 Go 的优点:

  1. 能编译成无依赖的原生可执行程序,性能高。
  2. 和 JS/TS 一样简单、高效。

语法很像 JS/TS,既可以写前端,也可以写后端,帮助用户具备“全栈”能力。
和 Node.js 不同的是,用这个语言写的后端是原生级别的性能,比 Java 还快。

语言暂时命名为 T 语言,最终的代码长这样:

  1. for (var i = 0; i < 10; i++) {
  2. print(fn(i))
  3. }
  4. function fn(x, y = 1) {
  5. return x < y ? fn(y, x) : 1
  6. }

为什么要做编译语言,而不是脚本语言

脚本语言意味着需要开发虚拟机或执行引擎,而 JS、Java 的虚拟机已经非常成熟了,很难做出新优势。

唯一有可能让用户放弃 JS、Java 的理由就是新语言不依赖虚拟机了。
这样一方面在性能上会有很大优势,另一方面也能满足更多场景,比如“保证源码安全”。

做编译语言,竞争对手就只有 C++/Rust/Go 等少数语言了。
这门语言将更重视 JS 用户的体验。

为什么不直接做一个将 TS 编译成原生程序的编译器

从技术上,在保留 TS 所有语言特性的前提下,做一个高性能的原生程序编译器是不可能的。

复用 TS 的部分语法是有可能的,但为了编译成原生程序需要添加许多的限制,用户很可能会发现用 TS 的思维写代码,结果无法正常工作。所以,还不如一开始就告知用户需要切换新思维。

社区上确实有人在做将 TS 编译成原生程序的编译器,需要有意避开竞争。

语法应该越简单越好,还是语法糖越多越好

代码的可读性高于一切。

那什么是可读性?一个从没学过这门语言的程序员,凭直觉就可以猜出这段代码的含义,那它的可读性就是优秀的。

因此,语法设计应该遵循以下三个原则:

  1. 尽量不要发明其他主流语言中从未见过的新符号、新关键字、新语法糖。
  2. 对于已被多个主流语言采纳的语法糖和语言特性,则尽量保留。
  3. 尽量避免缩写单词,以防止误解。

开发新语言应该做哪些事情?

语言是一个商业产品,做语言也不是简单做一个编译器而已,以下内容都非常重要:

  1. 编译器:编译器还应提供许多 API,方便扩展。
  2. 标准库:让代码正常运行的基础框架。
  3. 调试器:支持断点调试、远程调试。
  4. 编辑器:提供语法高亮、智能补齐等一系列 IDE 特性。
  5. 包管理工具:包括依赖管理、打包发布功能。
  6. 文档:包括语言规范和教程文档。
  7. 社区生态:实际业务项目必然需要生态支持才能完成。

以上每一项都是非常耗费时间的,因此,没有几年时间,是做不出语言的。
我首次开发语言是在 2015,到目前已实际投入 2 年完整时间,目前已经有了一些进度,但离最终发布还有一段路程。

如果你对这个项目感兴趣,或有任何想法,欢迎直接留言评论(无需登录)。