自研编程语言
关于
我正在研发一门新的编程语言,希望能结合 TS 和 Go 的优点:
- 能编译成无依赖的原生可执行程序,性能高。
- 和 JS/TS 一样简单、高效。
语法很像 JS/TS,既可以写前端,也可以写后端,帮助用户具备“全栈”能力。
和 Node.js 不同的是,用这个语言写的后端是原生级别的性能,比 Java 还快。
语言暂时命名为 T 语言,最终的代码长这样:
for (var i = 0; i < 10; i++) {
print(fn(i))
}
function fn(x, y = 1) {
return x < y ? fn(y, x) : 1
}
为什么要做编译语言,而不是脚本语言
脚本语言意味着需要开发虚拟机或执行引擎,而 JS、Java 的虚拟机已经非常成熟了,很难做出新优势。
唯一有可能让用户放弃 JS、Java 的理由就是新语言不依赖虚拟机了。
这样一方面在性能上会有很大优势,另一方面也能满足更多场景,比如“保证源码安全”。
做编译语言,竞争对手就只有 C++/Rust/Go 等少数语言了。
这门语言将更重视 JS 用户的体验。
为什么不直接做一个将 TS 编译成原生程序的编译器
从技术上,在保留 TS 所有语言特性的前提下,做一个高性能的原生程序编译器是不可能的。
复用 TS 的部分语法是有可能的,但为了编译成原生程序需要添加许多的限制,用户很可能会发现用 TS 的思维写代码,结果无法正常工作。所以,还不如一开始就告知用户需要切换新思维。
社区上确实有人在做将 TS 编译成原生程序的编译器,需要有意避开竞争。
语法应该越简单越好,还是语法糖越多越好
代码的可读性高于一切。
那什么是可读性?一个从没学过这门语言的程序员,凭直觉就可以猜出这段代码的含义,那它的可读性就是优秀的。
因此,语法设计应该遵循以下三个原则:
- 尽量不要发明其他主流语言中从未见过的新符号、新关键字、新语法糖。
- 对于已被多个主流语言采纳的语法糖和语言特性,则尽量保留。
- 尽量避免缩写单词,以防止误解。
开发新语言应该做哪些事情?
语言是一个商业产品,做语言也不是简单做一个编译器而已,以下内容都非常重要:
- 编译器:编译器还应提供许多 API,方便扩展。
- 标准库:让代码正常运行的基础框架。
- 调试器:支持断点调试、远程调试。
- 编辑器:提供语法高亮、智能补齐等一系列 IDE 特性。
- 包管理工具:包括依赖管理、打包发布功能。
- 文档:包括语言规范和教程文档。
- 社区生态:实际业务项目必然需要生态支持才能完成。
以上每一项都是非常耗费时间的,因此,没有几年时间,是做不出语言的。
我首次开发语言是在 2015,到目前已实际投入 2 年完整时间,目前已经有了一些进度,但离最终发布还有一段路程。
如果你对这个项目感兴趣,或有任何想法,欢迎直接留言评论(无需登录)。