开源了

By guenchi at 2018-02-06 • 0人收藏 • 178人看过

作者:王垠


经过 Google 的许可,我现在将 PySonar 第二版本开源,就叫 PySonar2 吧。代码可以在我的 GitHub 下载:

https://github.com/yinwang0/pysonar2

经过一阵子考察之后,我发现 PySonar2 仍然是当今最先进的 Python 静态分析器。其分析的深度和准确程度其实超过了所有的 Python IDE (包括 PyCharm 3.0 在内)。PySonar2 做的是跨过程,具有精确控制流的分析,而现在最好的 Python IDE 仍然是局部过程分析。

PySonar2 的工作原理却极其简单,说白了就是:写一个 Python 解释器,然后想办法让它“停机”。实际上这个简单的方法超过了一些程序语言研究者花几十年做出来的“艰深理论”。比如 Olin Shivers 及其学生们的 control-flow analysis 系列 20 多年来的成果,当我看他们的论文的时候,发现他们其实在解决一个自己(不小心)造出来的问题。我一开头什么都不知道,全凭自己感觉出发,所以就没有走上那条不归路 ;-)

另外,其实给 Google 的代码里有一个很“严重”的 bug,导致算法成为指数时间复杂度,所以他们其实仍然在用第一版的代码 ;-) Sourcegraph.com 使用的也是第一版的代码。在 Coverity 的时候,我从他们的代码里面也发现同样的问题,对某些 benchmark 运行时间太长。最后被我两行代码修好了(虽然找到这两行代码花了好几天)。

最近重新燃起了对 PySonar 代码的兴趣。经过修改两行代码之后,这个性质与 Coverity 完全一样的 bug 被消灭掉了。然后又发现一些逻辑细节和数据结构性能上的问题,也逐渐修补了。现在它能够处理整个 Python 2.5, 2.6, 2.7 的标准库和类似 Django 的项目,只需要3分钟的样子。我惊喜的发现能够检索到的名字比第一版多很多。界面还算比较友好吧,但是有待提高。欢迎喜欢美工的人士参与合作。

因为 Python 语言的复杂性,而且由于我其实不是 Python 程序员,我相信 PySonar2 里面肯定还有一些细节没有照顾到(虽然最主要的部分是没问题的)。如果发现问题,请开启 GitHub 的 issue。

另外,同样的原理其实可以应用到所有的语言分析里面。在将来我希望开发出通用的代码分析器,能够处理多种语言。


登录后方可回帖

登 录
信息栏

Scheme中文社区

推荐实现 ChezScheme / r6rs / r7rs large
theschemer.org
Q群: 724577239

精华导览

社区项目

包管理器:Raven
HTTP服务器:Igropyr (希腊火)
官方插件:vscode-chez

社区目标:

完善足以使Scheme工程化和商业化的库,特别是开发极致速度的Web服务器和ANN模块。

一直以来Scheme缺少一个活跃的中文社区,同时中文资料的稀少,导致大多数因为黑客与画家和SICP而接触Scheme的朋友,在学完SICP后无事可做,不能将Scheme转换为实际的生产力。最后渐渐的放弃。
同时Chicken等实现,却因效率问题无法与其他语言竞争。本社区只有一个目的,传播Scheme的文明之火,在最快的编译器实现上,集众人之力发展出足够与其他语言竞争的社区和库。


友情链接:

Clojure 中文论坛
函数式·China


Loading...