在过去一个多月时间里,我大部分时间都在做一个 Ruby 的静态分析叫做 RubySonar。它使用与 PySonar2 类似的技术,不过针对 Ruby 的语义进行了很多调整。现在这个分析器已经能够支持 Sourcegraph 的 Ruby 代码搜索和浏览。这比起之前的效果是一个很大的进步。
程序语言与……
程序语言的设计类似于其它很多东西的设计。有些微妙的地方只有用过更好的设计的人才能明白。现在我就简要介绍一下我自己的体会。
程序语言与微波炉
有的程序语言就像左边的,现在中国市场上流行的微波炉。布满了花哨的一年都用不到一次的专用菜单,却连最基本的 0-9 数字键都没有。输入个时间都要费脑筋组合一下,按键位置不顺手,不能一次按到位,而且还不能达到需要的精度。
我和权威的故事
每个人小时候心里都是没有权威的,就像每个人小时候也都不相信广告一样。可是权威就像广告,它埋伏在你的潜意识里。听一遍不信,听两遍不信,……,直到一千遍的时候,它忽然开始起作用了,而且这作用越来越强。
PySonar2 开源了
丘奇和图灵
丘奇(Alonzo Church)和图灵(Alan Turing)是两位对计算机科学具有最大影响力的人物,然而他们却具有非常对立的观点和相差很多的名气。在我长达16年的计算机科学生涯中,总是感觉到自己的思想反反复复的徘徊于这两个“阵营”之间。丘奇代表了“逻辑”和“语言”,而图灵代表着“物理”和“机器”。在前面的8年中,我对丘奇一无所知,而在后面的8年中,我却很少再听到图灵的名字。他们的观点谁对谁错,是一个无法回答的问题。完全投靠丘奇,或者完全投靠图灵,貌似都是错误的做法。这是一种非常难说清楚的,矛盾的感觉,但是今天我试图把自己的感悟简要的介绍一下。
PyDiff - Python 结构化程序比较工具
在之前的一篇博文里,我介绍了 ydiff,一个通用的结构化程序比较工具。其实在设计 ydiff 之前,这个工具是用 Python 实现的,并且只处理 Python 程序。在设计了 ydiff 之后,我发现其实我不想费很多精力来写 Python 的 parser,所以对 Python 的支持就日渐疏忽了。后来我把那块代码放在了 ydiff 的 repo 里面(叫做 pydiff.py),然而几乎没有人注意到它。
原因与证明
证明
我在 Cornell 的时候经常遇到这样的问题,那就是教授们一上课就在黑板上写长篇的“定理证明”,全体同学认认真真在下面抄笔记,就连只有十来个人的小课也是那样。有些写字速度慢的人就不得不带上小型录音机,把教授的课全都录下来,要不就是之后去借别人的笔记来抄。
ydiff - 结构化的程序比较
ydiff 是我的一个开源项目,用以探索一种全新的程序比较以及版本控制系统。
也许我根本不应该给它起名叫“ydiff”,让人感觉它只不过是对 diff 的微小改进。然而,ydiff 跟 diff 是有本质区别的。它们的区别在于,diff 只是对程序进行基于“文本”的对比,它根本不对程序进行 parse。而 ydiff 含有完整的针对程序语言的 parser,在得到了 AST 之后,才对 AST 进行“结构化的比较”。
混合开发笔记
思念的极致·其四
有人说,陪伴,是最长情的告白。
那么我觉得,等待,或许就是最极致的思念了吧。
前几天我看了部关于思念与等待的动画短片,虽然故事简单,却感人肺腑。看到这题,觉得与主题十分契合,我就来跟大家聊聊这部动画吧。
片名《父与女》,豆瓣得分9.2分,并获得了第73届奥斯卡金像奖最佳动画短片奖。