# README
duan_map_lisp
lisp是list模型,也就是S表达式列表式模型,忽然突发奇想到如果是用Map模型替代lisp的list模型,仿lisp是不是能创造出一个更好的语言?于是,有了这个项目。
暂时先写个编译器,编译器感觉没写好,代码暂时没放出来,命名为dl语言。 又多了一种lisp方言→_→
入门教程: 因为底层使用GO语言写的,数据类型机制等等是仿照Go语言的模型,强类型语言,自动类型推导。感觉弱类型脑子容易乱,毕竟是个编译语言,弱类型编译效率会比较低。很多模型包啥的,参考go语言就好,教程也很多,总体代码量不大,直接读代码也能看明白。 因为想遵循数据即代码的原则,语法模型完全就是json,可以直接json解析的,嗯,语法解释器都不用写了→_→ 语法模型几乎完全是遵照(抄的)麦卡锡的lisp语言,熟悉lisp的同学入门会比较低。
lisp语言一致性极高,完全使用list的S表达式模型。但是在操作类似object的时候,效果就极差。 尤其熟悉JavaScript的朋友清楚,在JavaScript里,function,class,object,map可以是同一个概念。 class的属性,方法,类型,其本质就是map的key,value模型。object和class只是类型相关的区别。function在js中可以当做object使用。 这样的的设计足以体现map概念的强大,我设计这门语言最大的初衷,就是融合lisp的S表达式模型和js的万物皆map。
该语言并非纯函数式编程,允许副作用存在,允许变量修改,强类型语言,支持数据类型自动推导(其实是go支持),支持函数式编程,强大的完整宏,特色的正则展开宏语法机制。 因为可解释可编译(编译器代码暂时未放出,感觉代码没写好,我想用go/build重写一下),还是强类型编译器好控制。 参数不会自动声明,使用前必须先声明再使用。自动声明虽然方便,但是我玩嵌入式的,我有代码洁癖。我很讨厌莫名其妙多出来一堆垃圾。 通过go语言的plugin机制,可扩展加载第三方库依赖,go语言能加载的依赖通过中间件机制我都能加载。 代码与数据之间可相互转换,也就跟lisp一样,写的代码可以写代码,写的代码可以写自己,可根据数据传入不同代码可自我进化。
PS: 疫情影响,最近的长假比较多,闲来无事我结合lisp语言,go语言,js语言和json数据格式,自创了一套编程语言,欢迎大家拍砖,亲们点个星再走哈~~~ 毕竟刚出炉,新鲜的。教程基本没有,标准库还不全。按照lisp家族的尿性,核心语法模型应该基本不再会变了,有bug另说。 标准库正在写的路上,没什么标准库整体来说,还不好用。 异常管理机制还没写,代码执行状态现在(基本)就两种,要么成功,要么崩溃。暂不支持执行状态判断,嘛~有空了加上~ 老话讲,程序猿学习各种编程语言,编写各种代码的过程,就是重新开发lisp的过程。我这也算是冲着最终目标来了吧~ github地址
PS: 请注意AGPLv3版权协议,违规必究→_→ 有想加入开发teem的发邮件哈。 [email protected]
Makefile命令:
make all 编译项目,得到解释器。 make generate 编译预处理,生成代码。 make build 在预处理处理过的情况下,编译项目。 make test 暂时是个作废的功能,预留测试命令。 make examples 执行examples文件夹里的所有测试样例。 make clean 删除编译的二进制结果 make dist_clean 删除编译的二进制结果,删除预处理生成的中间文件,删除清空lib目录的第三方插件。