- 论坛徽章:
- 5
|
回复 49# OwnWaterloo
我觉得这个课题其实有点用。
关键在于应用场景。人家不是真的想给Python加静态类型H&M神马的。不是的,他是做工具。哪些呢?
- 全文token搜索神马的(比如foo被哪些函数给调用了)
- 代码语义高亮(啥是函数?啥是变量?)
- 静态标记代码bug
- 代码补全(这个可能性都比较小,然而是这个课题能做到最好玩的)
那么,充其量最终分析的结果,可能就只是定性一下“foo是个函数”这种。然而如果遇到这种情况怎么办?
if rand() == 1:
foo = lambda: 1
else:
foo = 1
foo到底是不是函数呢?对于1和2应用,其实是不管的,这是一个“使用方协议”,即,假设代码是对的,然后直接在使用的地方(foo(1)神马的)标记。如果不对扔异常神马的,这个东西估计也是看不出来的。
对于最好玩的3和4怎么办呢?宽容分析。上面的代码,证明foo属于一个“类型包”,这个包是(long, func[()->long),总能够分析出一个标识符对应的类型包。有两个特殊包:nil和any,nil代表这个变量根本没被用到(完全不知道类型),any代表类型是任意(比如根据输入决定),同时我们还可以把一些特征放入类型包。比如callable类型包,或者compareable类型包等等。那么假设遇到了这样的情况:
max(|
这时补全就可以直接搜索所有具备<功能的,这里看得到的变量。找到了最好,找不到补全失败也没什么吧?
我觉得这还是应用场景的问题,人家是做工具,不是做编译器。 |
|