Fleurer’s Stack VM
Posted on 二月 3rd, 2010 in 备忘 | 14 Comments »
http://github.com/Fleurer/fsvm
尝试用C写的堆栈机,好像烂尾了 – -!
只是个运行时,无视了语法分析。随便写的东西也没什么规划,编写的时候就郁闷不知道哪部分该归分析器那部分该归vm,也不知道现有的部分能不能真用到解释器上,于是华丽地烂尾~只实现了20来条指令,可以递归可以闭包,不过不能算乘法…囧,很简陋啦~
好像是第一次写C,不会make就先凑合了rake – -! 对C不熟悉,满地的Segmentation Fault对我们只会用printf调试的菜鸟太残酷了…用了那个保守式的gc库Boehm GC,面对满地的malloc而无free不清楚泄漏起来会怎样…囧
本来是对C++那套OO无爱,想单用struct和函数也可以OO么。于是用了C,然后就后悔了:我不想重新实现hashmap之类的东西,C++那stl多好…T_T。倒也找到了个C的泛型库khash,不过宏终究不如模板来的好看…现在想来,信息学奥赛acm中用C的那些同学做题的时候都是自己实现一遍各个数据结构么?
拿段伪代码:
def main: sum(10) def sum(i): if (i==0) : return 0; else: return(i+sum(i-1));
放到fsvm下大约是这样:
int test_rec(){ Op op_main[]={ OP_PUSH_NUM, 10, OP_PUSH_CONST, 0, //"sum" OP_PUSH_VAR, OP_CALL, 1, OP_RET }; Op op_sum[]={ OP_PUSH_CONST, 0, //"i" OP_PUSH_VAR, OP_POP_TMP, 0, //store i OP_PUSH_TMP, 0, //push i OP_PUSH_NUM, 0, OP_EQ, OP_NOT, // i!=0? OP_BRANCH, 3, OP_PUSH_NUM, 0, OP_RET, //else OP_PUSH_TMP, 0, OP_PUSH_NUM, 1, //1 OP_SUB, OP_PUSH_CONST, 1, //"sum" OP_PUSH_VAR, OP_CALL, 1, //sum(tmp[0]-1) OP_PUSH_TMP, 0, OP_PRINT_STACK, OP_ADD, //tmp[0]+sum(tmp[0]-1) OP_RET }; Env *env=fnew_env(NULL); Proto *p_main = fnew_proto(op_main, 0); fset_const(p_main, 0, fstr("sum")); Func* f_main=fnew_func(p_main, env); Obj o_main=ffunc(f_main); Proto* p_sum=fnew_proto(op_sum, 1); fset_const(p_sum, 0, fstr("i")); fset_const(p_sum, 1, fstr("sum")); Func* f_sum=fnew_func(p_sum, env); Obj o_sum=ffunc(f_sum); fbind_var(env, "sum", o_sum); fio_puts(fcall(0, f_main)); return 0; }
创建函数的那几个函数我自己也看着别扭…不过写C还是老实点好 >_<
14 Responses
这个干吗的?
@Kingsamchen 可以做语言的运行时。jvm也是堆栈机,这个要简单太多了
@swd 莫非是运行时编译……
@Kingsamchen 呃,只是个解释字节码的运行时。编译的没写…囧
@swd 厄,要是编译器就牛X了
才发现这个隐秘的所在。
@wangweinoo1 被逼上梁山啊
你真是什么都会。。。
我怀疑哪来这么多时间折腾
@ABitNo 囧,人类蛋疼的时候什么都做得出来哈哈哈
信息学奥赛acm中用C的那些同学做题的时候都是自己实现一遍各个数据结构么?
OI的话,主要数据结构和算法那是要烂熟于心的,我就是不会所以没能拿一等奖。
又想到我的保送未遂 T_T
@davelv 杯具,默哀下…
用C++的话可不可以套stl中的算法呢? >_<
你直接用STL的算法和数据结构也没有任何问题啊
这样的话用C++的同学岂不比C的同学占便宜… >_<
OI中对C++的使用是有限制的。。。
Leave a Reply
Feed
About
To live and not to breathe, Is to die In tragedy.
To run, to run away. To find what you believe.
-Green Day
Category
Tags
Achieve
Meta
Comment
链接表