很偶然的一个想法,在从北京回成都的高铁上:我想要一个计算器。于是在火车上花了十来个小时,完成了一个模型:能够处理+-*/的优先级,以及“()”,比如:1+(3+2)*4。这已是一年前的故事了;之后支持了函数,便成为了一门语言(虽然是脚本)。先后经过数次根本性地修改,便成为了现在本文的主角:一个基于栈的,支持过程式、函数式、面向对象三种风格的,拥有垃圾收集器的编译型脚本语言——Xmas。
一、Xmas是什么?
首先她是“圣诞节”的简称,用以纪念多年前,还在看凉宫春日的忧郁时的自己(也是通过其,我第一次知道Xmas,凉宫曾将其画在活动室的窗户上)。
起先,她只是一颗可以执行的抽象语法树,并且没有自己的完整的运行时,很多功能都依赖于宿主系统(C++);后来,她有了自己的字节码,便得以从宿主系统独立出来,编译器、虚拟机、垃圾收集器是各自独立的系统;现在,加入了lambda、面向对象后,一堆语法糖接踵而至,也有了一个更加高效和健壮的GC。
究其根本,其仅仅由以下单元命令组成(以后会大量用到):
push ->入栈 pop ->出栈(实际中并没有这个操作)set ->修改值(参数、变量)+-*/% ->操作符call ->函数调用ret ->函数返回goto ->无条件跳转(如break)jump ->有条件跳转(如if、while)
延伸阅读
学习是年轻人改变自己的最好方式