我是清华软院22班的王程鹏。在本次Popush开发过程中,负责承担在Popush中添加Haskell文件选项,并且保证其可以正常运行。当初接到这个任务时,觉得有点像天方夜谭,远远超过了个人的能力。在后来的开发过程中,有了李映辉同学的帮助,同时也可以和其他组的同学沟通,这些都为我们任务的完成提供了积极有利的因素。
这次优化开发,第一个难点在于如何正确配置好Popush。某天下午刘博格同学开始配Popush,很高效率地在三、四个小时之后配好了Popush。彭友在Linux下也配好了Popush。他们配置工作的顺利进行为我们的工作的开展打下基础。
在Popush网站上注册后登陆,发现其支持多种语言,可以在连接好外接编译器后,将Popush中的代码放入外接编译器中编译运行。开始时,我们发现了只要安装好对应语言的编译器,并将编译器的路劲放进系统的环境变量中,便可以在Popush平台中运行代码。这点启发了我和同伴。刚开始时我尝试在前端看一些图片或者分析一些相应,但最都没有头绪。上面的启示说明:不同的语言在后端处理的方式一定是等同的,很大程度上会用数组或者case语句描述。带着这个想法,我们开始逐个文件查找,直到找到models文件夹下的runner.js文件,在里面找到了期待已久的大段case语句,接着在里面加上包括haskell的语句块。
但是,这样做并没有完全解决问题,haskell程序还是不能正常运行。后来发现在data.js文件中需要将hs添加到app.RunableExt中。这样在链接好本地编译器之后,便可以在Popush中编译haskell程序了。不过我们发现,原来的程序只能编译,不能在Popush中不能输入,这对于Haskell这样的函数式语言来说,这样的平台几乎没用,因为函数需要输入函数名称和参数才能发挥作用。我们把这个bug反映给助教,之后助教给的回复是Popush这个版本原有的bug。Yeah,这个bug是我们小组最先发现的,这与我们细致、严谨的态度都是密不可分的。
之后映辉还添加了hs文件的头像,使得界面更漂亮,这是我们超出任务完成的模块。在功能测试上,我们测试了C和C++的调试和运行,Ruby、Haskell、Python、Java的运行,以及文件的新建与删除。通过这些实践,我们大致弄清楚了Popush中的编译原理。首先根据文档的后缀名分清楚是否是可执行的文件。若是,则在运行的时候链接入对应的编译器,并将结果显示在下发的控制台上。消除Popush版本上的bug后,也可以在控制台上输入。
总体来说,这次优化开发很顺利,没有遇到太大的困难,但是也遇到一些小问题。吼吼,Popush优化结束咯!!!