我写了一个TypeScript虚拟机。

我写了一个TypeScript虚拟机: Tser。
Github地址:tser-project/tser

安装使用

$ brew tap tser-project/tser && brew install tser;

$ tser ./input.ts;

为什么要创造Tser?

TypeScript(TS)是一个伟大的发明,让我们在复用JS生态的同时拥有了静态类型语言的开发体验。
TS本质是一门预编译语言,编译到JS后再使用JS虚拟机执行,由于强依赖于JS,也因此无法摆脱JS的一些顽疾,比如执行效率。而TS本身是静态类型语言,拥有确定的数据类型标记,只是在转义为JS时丢失了类型标记;如果我们能直接执行TS程序,而不是先转义为JS再执行,这些数据类型标记可以为程序带来很大的性能提升。

我们来看一组性能对比数据,仅对比fib(42)在各个虚拟机或语言中的性能表现(并不能完全依此来作为性能评价标准;测试条件:同一设备同一状态,编译过程均未使用任何优化)。

语言 虚拟机 执行耗时(ms)
TypeScript deno 4150
JavaScript v8 / node 3859
TypeScript Tser 2035
C++ -- 2106

TS技术发展很快,业界已经有越来越多的项目使用TS开发和重构;抛开眼下去看TS技术的发展,它的终点会在哪里?会一直停留在一个预编译语言上吗?当TS生态发展越来越健全,是不是还有必要完全依托于JS的生态?业界会不会诞生一个真正的TS虚拟机(Deno并不是)?如果业界有一个稳定且高性能的TS虚拟机,对TS生态是不是一件好事,会不会将TS推向一个新的高度?

这些问题思考了很久。

<u>TS应该无法取代JS的生态,但是在某些领域,TS可以脱离JS生态而独立存在;TS虚拟机是独立TS生态的基石,可以让TS在这些领域有明显优于JS的运行时表现,并为这些领域带来实际的业务收益。</u>

Tser能做什么?

Tser编译性能相对不高而运行时性能高,更适合独立后台服务、Serverless等场景。如果语法支持完善,可以运行绝大部分现有的使用TS编写的后台服务时,这些服务可以因此获得很大的性能提升。

Tser目前能做的事情还非常少,因为语法支持很不完善,仅能支持一些简单脚本的执行,比如应该能够支持一些简单的云函数场景。

Tser技术原理

Tser前端依托于Antlr来生成的语法解析器,然后进行语法树的生成与遍历;后端依托于LLVM建设,将TS代码编译为LLVM IR,并使用其JIT引擎立即执行IR。

业界雷同产品: AssemblyScriptStaticScript

Tser语法支持

变量

支持var let const, varlet相同。

基础类型

类型 字节 (in 64bit) 支持
boolean 1 ✔️
number 4 ✔️ 同int32
int32 4 ✔️
int64 8 ✔️
float 4 ✔️
double 8 ✔️
string -- ✔️ 暂不支持运算

运算符

运算符 支持
+ - * / % ✔️
++ -- ✔️
+= -= *= /= %= ✔️
< > <= >= ✔️
== === != !== ✔️ =====目前没有区别
&& ✔️
! ✔️
? : ✔️
() ✔️
. ✔️

逻辑控制语句

语句 支持
if else ✔️
while do while ✔️
for ✔️
switch ✔️
continue ✔️
break ✔️

函数

支持绝大部分函数功能,函数嵌套,暂不支持闭包和函数参数。

Class

Class支持继承、多态,支持Class组合,支持静态属性与静态方法,不支持方法重载;Class继承和多态使用类似虚拟表的方式来支持,多态支持方法和属性。

内置对象

目前内置对象支持力度非常低,仅用于测试。

内置对象 方法
console debug log info warn error
Date now

暂不支持

module 内置对象Event LoopGC等等。

贡献Tser

Tser是一个巨大的工程,很难用一己之力完成。Tser现在还是一个baby,更希望它能起到一个抛砖引玉的作用,能聚集起一些有能力的人来一起建设。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345