自研编程语言
关于
我正在研发一门新的编程语言,希望能结合 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 的虚拟机已经非常优秀了,很难超越。
但如果能编译出不依赖虚拟机的原生程序,一方面在性能上会有很大优势,另一方面也能满足更多场景,比如“保证源码安全”。
为什么不直接做一个将 TS 编译成原生程序的编译器
从技术上,在保留 TS 所有语言特性的前提下,做一个高性能的原生程序编译器是不可能的。
复用 TS 的部分语法是有可能的,但为了编译成原生程序需要添加许多的限制,用户很可能会发现用 TS 的思维写代码,结果无法正常工作。所以,还不如一开始就告知用户需要切换新思维。
社区上确实有人在做将 TS 编译成原生程序的编译器,如果用户非常在意切换语言带来的学习成本,可以优先考虑其他产品。
语法应该越简单越好,还是语法糖越多越好
我认为:代码的可读性高于一切。
衡量可读性的标准就在于,一个从没学过这门语言的程序员,凭直觉就可以猜出这段代码的含义,那它的可读性就是优秀的。
因此,我认为语法设计应该遵循以下三个原则:
- 尽量不要发明其他主流语言中从未见过的新符号、新关键字、新语法糖。
- 对于已被多个主流语言采纳的语法糖和语言特性,则尽量保留。
- 尽量避免缩写单词,以防止误解。
开发新语言应该做哪些事情?
语言是一个商业产品,做语言也不是简单做一个编译器而已,以下内容都非常重要:
- 编译器:编译器还应提供许多 API,方便扩展。
- 标准库:让代码正常运行的基础框架。
- 调试器:支持断点调试、远程调试。
- 编辑器:提供语法高亮、智能补齐等一系列 IDE 特性。
- 包管理工具:包括依赖管理、打包发布功能。
- 文档:包括语言规范和教程文档。
- 社区生态:实际业务项目必然需要生态支持才能完成。
以上每一项都是非常耗费时间的,因此,没有几年时间,是做不出语言的。
我首次开发语言是在 2015,到目前已实际投入 2 年完整时间,目前已经有了一些进度,但离最终发布还有一段路程。
如果你对这个项目感兴趣,或有任何想法,欢迎直接留言评论(无需登录)。