fish lang是一门基于函数的,可定制语法的编程语言。
为什么要设计fish这门语言
目前的编程语言语法都是固定死的,无法很容易的移除一种语法。fish语言一切语法由函数定义,语言只提供一个函数的定义/调用过程。
fish语言的语法
print if a b c
如果函数a为真输出函数b的结果,否则输出函数c的结果。
loop a b
循环调用函数b,函数a的返回值次。
当然,上文中出现的loop,if,print等函数为系统函数,我们可以通过取消注册的方式,取消这个函数的注册。
我们可以看一个更复杂的代码。
print if a b c d e
我们分解一下这个代码。
代码逆向入栈,从顶到底部为print,if,a,b,c,d,e
虚拟机调用print函数,print需要一个参数,if出栈,
if需要3个参数,a,b,c出栈。
运行a,假设a需要一个参数,d入栈,
运行d,假设d无需参数,向exa写入true,
if发现exa为为true,b入栈,c被抛弃,
运行b,假设b需要一个参数,e入栈,
运行e,假设e无需参数,向exa写入字符串hello world的地址,
print发现exa指向为hello world,输出hello world。
fvm
Fvm是fish lang的虚拟机,当然现在只是一个原型,大概由一个栈组成,一个函数表,一组变量寄存器组成。
目标
小型的,嵌入式的脚本语言。用于路由服务,引导和链接宿主的函数。
特征
- 可自定义语法
- 运行速度快
- 安全