震惊! 两个星期,我究竟干了什么!

249 阅读3分钟

上回分解

好吧,我是一个标题党,哈哈。下面是正题。

前两个星期,突发奇想,想完成一个解释器——去年就开始抱着一本书在学,奈何学到tokenizer 就发现写不下去了,我根本不知道parser和evaluator阶段该做什么,照猫画虎写完了tokenizer,颇有成就感,奈何想继续写下去的时候,无从着手。

转眼来到今年,又捡起没写完的tokenizer, 这次,在强大的ai的帮助下,欸,没想到居然写到了evaluator,功能加了一个有一个,写完这个还想要哪个,欸,谁想到,写着写着,框架已成,现在代码规模达到了五千多行,功能也挺丰富,下面是ai的评价: image.png 开心,哈哈!

功能

说了这么多,有啥功能吗? 和js, python有啥区别哦? 听我细说。 功能

控制结构函数上
for in 遍历列表def(){}类型的函数
for(idx: 1..10){}匿名函数
loop(cond){} 循环lambda函数
match(expr){} 结构箭头函数
if(expr) x :y 三目运算符高阶函数
switch分支结构位置参数、命名参数传递、默认参数
函数嵌套 、闭包
数据类型
number小数和整数
string使用双引号包裹
boolTrue 和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库的结果, 作为内置库的一部分: image.png

简单的try catch机制 image.png

if () x :y 三目运算
image.png

强大的回调和lambda: image.png

定位

没有定位哈哈。 越强我越高兴,地表最强就是我的臆想😂。

展望

按照ai给的建议,现在面临几个棘手的问题:
1,语法支持:没写过vscode插件,现在只能纯文本写代码(大哭😭),准备学习vscode插件开发,靠
2, 线程问题: 没有线程支持,简直就是一个废物
3,速度问题: python写的,确实慢了一些,重写怕是累死人——其实是下次就不知道能不能写出来了,哈哈。

其实是想蹲一个佬,看得上这门语言的话,能不能写个插件,我真不会写,哈哈。 后续会期待这么语言更加完善。 屏幕前的彭于晏,你有什么想法和建议呢?