上回分解
好吧,我是一个标题党,哈哈。下面是正题。
前两个星期,突发奇想,想完成一个解释器——去年就开始抱着一本书在学,奈何学到tokenizer 就发现写不下去了,我根本不知道parser和evaluator阶段该做什么,照猫画虎写完了tokenizer,颇有成就感,奈何想继续写下去的时候,无从着手。
转眼来到今年,又捡起没写完的tokenizer, 这次,在强大的ai的帮助下,欸,没想到居然写到了evaluator,功能加了一个有一个,写完这个还想要哪个,欸,谁想到,写着写着,框架已成,现在代码规模达到了五千多行,功能也挺丰富,下面是ai的评价:
开心,哈哈!
功能
说了这么多,有啥功能吗? 和js, python有啥区别哦? 听我细说。 功能
控制结构 | 函数上 |
---|---|
for in 遍历列表 | def(){}类型的函数 |
for(idx: 1..10){} | 匿名函数 |
loop(cond){} 循环 | lambda函数 |
match(expr){} 结构 | 箭头函数 |
if(expr) x :y 三目运算符 | 高阶函数 |
switch分支结构 | 位置参数、命名参数传递、默认参数 |
函数嵌套 、闭包 |
数据类型 | |
---|---|
number | 小数和整数 |
string | 使用双引号包裹 |
bool | True 和False |
object{} | {} |
list | [] |
考虑支持enum, set等 |
类 | |
---|---|
支持方法调用 | 公开或者私有方法 |
属性赋值 | 私有属性或者公开属性 |
支持权限访问 | 只有public和private |
支持 static关键字 | 使用类名进行访问 |
支持接口约束类 | 遗憾,不支持多态,不好写 |
支持继承 | 继承父类的public类型的属性和方法 |
instanceof关键字 | 不能跨越继承关系进行检测 |
其他:
1, 模块机制:支持自定义模块和导入,实现还不完善
2, 异常机制:try catch finally, 这里借助Python的异常类来完成我的异常捕捉
3, 内置库: 复用python的 math random os等模块的方法,同时复用 dict list及其string类型的一些方法,比如 replace() contains() keys()等方法,加速项目完成
4,const 关键字
5, 模板字符串 “hi: ${var_name}”
6,使用 # comment # 进行单行或者多行注释
7, 对象解构, list解构赋值: 参考 js 和python
8,动态类型
...
还有什么特性推荐的呢佬,需要你的建议 😘😘😘
下面给几个代码片段:
for 语法, 借鉴rust的 1..10机制, getXXX方法()是复用random库的结果, 作为内置库的一部分:
简单的try catch机制
if () x :y 三目运算
强大的回调和lambda:
定位
没有定位哈哈。 越强我越高兴,地表最强就是我的臆想😂。
展望
按照ai给的建议,现在面临几个棘手的问题:
1,语法支持:没写过vscode插件,现在只能纯文本写代码(大哭😭),准备学习vscode插件开发,靠
2, 线程问题: 没有线程支持,简直就是一个废物
3,速度问题: python写的,确实慢了一些,重写怕是累死人——其实是下次就不知道能不能写出来了,哈哈。
其实是想蹲一个佬,看得上这门语言的话,能不能写个插件,我真不会写,哈哈。 后续会期待这么语言更加完善。 屏幕前的彭于晏,你有什么想法和建议呢?