首页 > 都市言情 > 这个吞金兽不好养 > 第三十二章 长夜漫漫

第三十二章 长夜漫漫(1/2)

目录

而这么长的时间里面,叶新晨也是在解决上面这个的尝试中,才发觉tcl这种语言先天不足。

因为一旦程序逻辑复杂,它那变量无需声明、变量无类型等等对初学者来说不可多得的“优点”就成了致命缺陷。

这会让人不得不付出比c/c++之类“正规语言”多得多的努力去跟踪去区分数据类型。

而且为了避免错误,叶新晨也不得不把数据类型也“打包”进数据,然后在程序入口写代码分辨它——尤其是,这些数据类型还是动态的,是从输入数据识别出来的;不结合输入谁都不知道某个数据在某个时刻会是什么。

这使得代码几乎无法静态分析;而测试用例很难覆盖每一条执行路线——不要忘了,这个程序“吃”进去的数据是多变的,几乎不可能列出所有情况。

这使得叶新晨又产生了一个想法。那就是,要给它增加一些功能,把专业语言的re dup、变量先声明后使用等等功能搞出来,使得出现类似高危行为时可以得到提醒甚至直接对相关不良行为报错。

当然,叶新晨是没有这么自觉的,只是叶新晨跟他们说了,他们立刻就私发了一个六万的悬赏让叶新晨帮忙!

原本叶新晨是不愿意的,因为那七天已经够累的了,晚上都熬到凌晨三四点,每天就睡三四个小时,这让叶新晨深刻的明白为什么程序员容易头秃了。

虽然叶新晨不愿意,但是奈何对面又把这个六万的悬赏又加了四万……

嗯,叶新晨觉得这个功能也不是那么难,熬夜那就熬夜呗……

所以叶新晨也是立刻就进入状态了,tcl号称一切都是字符串,这甚至可以把系统库函数/运算符/关键字都给rena掉,然后自己写一个替代品。

这给了它的用户极大的自由度。

比如itcl就是用命名空间模拟的面向对象语法——这种语言仍然是面向过程的;但你可以自己定义一个css关键字(实质上是一个过程),把它变得和一个真正的面向对象语言几乎一模一样。

叶新晨首先盯上的是它的过程/函数声明关键字proc。

在这种语言里,你声明一个函数fun,格式就是

&nc &n{

&ndy

}

它看似一个关键字;但tcl里一切都是字符串,因此这个proc实质上是个函数,它接受函数名、参数列表、函数体三个参数……

&nc改名叫sysproc,自己写了个proc;这样当用户声明一个函数/过程时,他的声明将以字符串格式先传给他。

这样子的话叶新晨就可以做一些修改,把一些逻辑插进用户编写的代码中,然后再把修改后的代码传给sysproc。

通过这种方式,叶新晨就接管了tcl的一切;然后修改了它的异常/返回流程,识别出“用户未捕捉的异常”。

毕竟叶新晨是记录了每个函数在某次被调用时、在调用链上所处的层级。尤其接近顶层尚未捕获就会影响到当前测试用例、当前测试套甚至引起整个程序过早退出,这些都是要记录的。

现在,当程序出错时,如果通过异常处理程序解决了问题、允许程序继续执行了,那么叶新晨就不做任何动作。

但如果没有处理异常、使得测试失败甚至程序退出,那么叶新晨就能在执行下一条语句之前把整个调用链打印出来——从函数调用关系到每个函数的局部变量内容、再到异常传递路径,巨细靡遗。

这个设计相当于函数返回时会多执行几条语句,把局部变量等信息保存在内存中;只要程序不崩溃,那么这些信息就自动丢弃;而一旦程序要崩溃,它就会写到磁盘文件中——叶新晨自己搞了个日志滚动机制,专门记录最近十

本章未完,下一页继续

书页 目录
好书推荐: 雄起北亚 我在动物园的直播生活 木匠王爷 我和邓肯同年秀 诸天之天外降临者 万界入侵,老子眼睛都不眨一下 足球应该像我这样踢 我梦里有大佬 三国之上将邢道荣 超级反套路系统
返回顶部