而这么长的时间里面,叶新晨也是在解决上面这个BUG的尝试中,才发觉TCL这种语言先天不足。
因为一旦程序逻辑复杂,它那变量无需声明、变量无类型等等对初学者来说不可多得的“优点”就成了致命缺陷。
这会让人不得不付出比C/C++之类“正规语言”多得多的努力去跟踪去区分数据类型。
而且为了避免错误,叶新晨也不得不把数据类型也“打包”进数据,然后在程序入口写代码分辨它——尤其是,这些数据类型还是动态的,是从输入数据识别出来的;不结合输入谁都不知道某个数据在某个时刻会是什么。
这使得代码几乎无法静态分析;而测试用例很难覆盖每一条执行路线——不要忘了,这个程序“吃”进去的数据是多变的,几乎不可能列出所有情况。
这使得叶新晨又产生了一个想法。那就是,要给它增加一些功能,把专业语言的coredump、变量先声明后使用等等功能搞出来,使得出现类似高危行为时可以得到提醒甚至直接对相关不良行为报错。
当然,叶新晨是没有这么自觉的,只是叶新晨跟他们说了,他们立刻就私发了一个六万的悬赏让叶新晨帮忙!
原本叶新晨是不愿意的,因为那七天已经够累的了,晚上都熬到凌晨三四点,每天就睡三四个小时,这让叶新晨深刻的明白为什么程序员容易头秃了。
虽然叶新晨不愿意,但是奈何对面又把这个六万的悬赏又加了四万……
嗯,叶新晨觉得这个功能也不是那么难,熬夜那就熬夜呗……
所以叶新晨也是立刻就进入状态了,TCL号称一切都是字符串,这甚至可以把系统库函数/运算符/关键字都给rename掉,然后自己写一个替代品。
这给了它的用户极大的自由度。
比如iTCL就是用命名空间模拟的面向对象语法——这种语言仍然是面向过程的;但你可以自己定义一个class关键字(实质上是一个过程),把它变得和一个真正的面向对象语言几乎一模一样。
叶新晨首先盯上的是它的过程/函数声明关键字proc。
在这种语言里,你声明一个函数fun,格式就是
procfun(arg){
#body
它看似一个关键字;但TCL里一切都是字符串,因此这个proc实质上是个函数,它接受函数名、参数列表、函数体三个参数……
叶新晨也是把系统的proc改名叫_sys_proc,自己写了个proc;这样当用户声明一个函数/过程时,他的声明将以字符串格式先传给他。
这样子的话叶新晨就可以做一些修改,把一些逻辑插进用户编写的代码中,然后再把修改后的代码传给_sys_proc。
通过这种方式,叶新晨就接管了TCL的一切;然后修改了它的异常/返回流程,识别出“用户未捕捉的异常”。
毕竟叶新晨是记录了每个函数在某次被调用时、在调用链上所处的层级。尤其接近顶层尚未捕获就会影响到当前测试用例、当前测试套甚至引起整个程序过早退出,这些都是要记录的。
现在,当程序出错时,如果通过异常处理程序解决了问题、允许程序继续执行了,那么叶新晨就不做任何动作。
但如果没有处理异常、使得测试失败甚至程序退出,那么叶新晨就能在执行下一条语句之前把整个调用链打印出来——从函数调用关系到每个函数的局部变量内容、再到异常传递路径,巨细靡遗。
这个设计相当于函数返回时会多执行几条语句,把局部变量等信息保存在内存中;只要程序不崩溃,那么这些信息就自动丢弃;而一旦程序要崩溃,它就会写到磁盘文件中——叶新晨自己搞了个日志滚动机制,专门记录最近十次崩溃信息,并不会无限侵占磁盘空间。
通过这个东西,再付出微不可察的时间代价,叶新晨给所有TCL程序增加了coredump功能。
这显然是个重大利好。
这就是为什么他们为什么愿意花费十万请叶新晨也帮忙做这个功能。
不过毕竟刚刚完成了另一个悬赏,所以晚上的时候叶新晨也不会立刻扎进去,他要好好的休息一个晚上,也就是今天晚上他不想熬夜了。
看着躺在床上看着综艺节目的王晓雪不时的发出清脆的笑声,叶新晨突然觉得世界还是很美好,比代码那个世界好的多。
“老公,我们是不是存款又多了?”一旁的王晓雪注意到了叶新晨的目光,也是将手机中的综艺节目按了一个暂停键。
前七天,王晓雪一直看在眼里,毕竟叶新晨每天都是凌晨三四点才睡觉,而且下班一回来除了吃饭洗澡的功夫,基本上都是埋在了代码里面。
连和她聊天的时间都寥寥无几,不过王晓雪虽然没有学过程序,但是也知道一直在忙碌着程序代码的叶新晨是不能够打扰到,因为聊着天代码容易写错,最重要的是万一一个失误,脑海中的思路没有了,那才是真正的坑爹了!
也因此,王晓雪这七天也就是烧烧饭,洗洗碗,然后刷刷剧要么看会儿综艺节目。
现在看到叶新晨终于是有时间了,也是转过身来,叶新晨将胳膊放在了王晓雪的头底下,王晓雪像个小兔子一样缩到了叶新晨的怀里面。
“嗯,又多了,我们差不多有四十二万了。”叶新晨自己说出这个,都觉得有些不可思议,而且还有个十万悬赏的功能叶新晨也能做出来,相当于在结婚之前,叶新晨手里能够有五十二个达不溜!
这放在一个多星期前谁敢相信?
总共就八天时间,赚了这么多,是个普通人都觉得牛笔卧槽666呢!
“嗯。”王晓雪像个小猫咪一样答应了一声,然后又说道,“那你接下来就不要去接了吧,好好的休息几天吧,我们已经有四十多万,其实已经够了。”
“毕竟身体最重要,而且今天已经是二十七号了,还有几天我们就离职了,也没必要这么拼了。”王晓雪摸了摸叶新晨的脸庞,笑了笑。
叶新晨盯着王晓雪的面孔,脸上露出了坏笑,“长夜漫漫……”