很偶然的一個想法,在從北京回成都的高鐵上:我想要一個計算器。于是在火車上花了十來個小時,完成了一個模型:能夠處理+-*/的優(yōu)先級,以及“()”,比如:1+(3+2)*4。這已是一年前的故事了;之后支持了函數(shù),便成為了一門語言(雖然是腳本)。先后經(jīng)過數(shù)次根本性地修改,便成為了現(xiàn)在本文的主角:一個基于棧的,支持過程式、函數(shù)式、面向?qū)ο笕N風(fēng)格的,擁有垃圾收集器的編譯型腳本語言——Xmas。
一、Xmas是什么?
首先她是“圣誕節(jié)”的簡稱,用以紀(jì)念多年前,還在看涼宮春日的憂郁時的自己(也是通過其,我第一次知道Xmas,涼宮曾將其畫在活動室的窗戶上)。
起先,她只是一顆可以執(zhí)行的抽象語法樹,并且沒有自己的完整的運(yùn)行時,很多功能都依賴于宿主系統(tǒng)(C++);后來,她有了自己的字節(jié)碼,便得以從宿主系統(tǒng)獨(dú)立出來,編譯器、虛擬機(jī)、垃圾收集器是各自獨(dú)立的系統(tǒng);現(xiàn)在,加入了lambda、面向?qū)ο蠛?,一堆語法糖接踵而至,也有了一個更加高效和健壯的GC。
究其根本,其僅僅由以下單元命令組成(以后會大量用到):
push ->入棧 pop ->出棧(實(shí)際中并沒有這個操作)set ->修改值(參數(shù)、變量)+-*/% ->操作符call ->函數(shù)調(diào)用ret ->函數(shù)返回goto ->無條件跳轉(zhuǎn)(如break)jump ->有條件跳轉(zhuǎn)(如if、while)
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動安全 [無線安全]玩轉(zhuǎn)無線電——不安全的藍(lán)牙鎖 2017-07-26
- 消息隊(duì)列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標(biāo)分割】 2017-07-26
- 詞向量-LRWE模型-更好地識別反義詞同義詞 2017-07-26
- 從棧不平衡問題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實(shí)現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解 2017-07-26
- 阿里移動安全 Android端惡意鎖屏勒索應(yīng)用分析 2017-07-26
- 集合結(jié)合數(shù)據(jù)結(jié)構(gòu)來看看(二) 2017-07-26