wcsjtu 最近的时间轴更新
wcsjtu

wcsjtu

V2EX 第 254827 号会员,加入于 2017-09-17 16:25:07 +08:00
wcsjtu 最近回复了
@secondwtq 非常感谢。 目前我们是打算用 Python 写业务逻辑,然后转 C++。 完全禁用了 Python 的动态特性,所以可以把 Python 看做静态语言。subtyping 问题, 能够用强制类型标注的手段解决么?

大佬给的这三个链接信息量非常大, 我去好好阅读下。
@secondwtq 多谢大佬。

1. 我理解,像

```python
def foo(x):
y = x.双十一
```
这样的代码, 确实推断不出来 y 的类型。但是如果有上下文,或者有类型标注, 应该还是推出来吧。

2 . 我理解`x.y`和`x[y]`应该是比较类似的, 如果知道了 x 的类型, 那么`x.y`或者`x[y]`也就比较好推断了。 但是如果`x`类型未知,是不是应该把`getattr`/`getitem`操作记录 HM 的方程里面, 等 unify x 时再去真正执行`getattr`/`getitem` ?

3 . subtyping 好像是比较麻烦,如果在语法层面,把类继承禁用,是不是就没有 subtyping 的问题了呢?

4. 我去学习一下 Typeclass ,Row Polymorphism
@Austaras 多谢大佬,我去学习下什么是 row polymorphism
@Austaras 大佬能给个搜索关键字吗, 我不是 PL 背景出身……行业黑话看不懂啊
@pisc 多谢大佬。我们之前做了一个"Python" ==> C++的 transcompiler 。 但是没有静态检查,导致 Python 代码有问题不能在 Python 层发现, 得编译生成的 C++代码才知道。 没有类型信息,一些 high level 的优化也没办法做。所以想着 HM 能不能解决我的问题。

这里的"Python"是一个 Python 非常小的子集,只支持非常小部分的语法、类型和标准库。其中类型只有 str/int/float/complex/list/dict/tuple/deque/set 和 `dataclass`。 所以做类型推导应该没那么难.....

我没有系统学过 PL 方面的知识, 所以想找些 demo ,我去参考一下, 再照着写……
64 天前
回复了 hhhhhh123 创建的主题 程序员 Python 读取 500M .pkl 文件,却用了 8 G 内存
getsizeof 不会递归统计内存,你得到的只是最外层容器的内存占用值。自己写个函数去递归统计吧,这样的数据才是相对准确的
64 天前
回复了 a784066538 创建的主题 Python Python 多层 for 循环性能如何提高
@xsourse 这种情况,numba 没用的,绝对是负优化。
65 天前
回复了 a784066538 创建的主题 Python Python 多层 for 循环性能如何提高
思路一:修改逻辑, 不要用 for 循环
思路二:实在要用 for ,改成 C/C++循环, 可以使用 mypyc 编译该部分代码, 也可以用 cython 编译。mypyc 有语法要求, 性能稍微好一点。cython 可以直接编,性能比较差,但是还是远比 Python for 循环好

我们团队搞了一个专门为 Python 业务逻辑加速的编译器,性能吊打 cython/mypyc/pypy , 可惜不能开源.......
71 天前
回复了 jeeyong 创建的主题 Python 如何提高 Python 数组操作性能.
应该是代码里出现了大量的 for 循环,以及大量的__getitem__/__setitem__操作才慢的。numpy.ndarray 的随机读取性能确实不如 builtins.list 。因为`ndarray[i]` 需要 new 一个 PyLongObject 出来,而`builtins.list[i]`只需要 refcnt++。

楼主这个问题, 如果用 numpy 的话, 就得摆脱面向过程的思想, 用函数式来做。numpy 的 broadcast 机制应该能实现楼主想要的功能。需要稍微学习一下。

如果不想用 numpy 的话, 只能用预编译或者 jit 方案来加速了。 既然楼主已经试过 numba 了, 我推荐另一个工具 pythran. 性能与 numba 差不多, 但是比 numba 好用
@ipwx 这个是可以做的。 就是麻烦点。 其实有点像 msgpack 这种, 只不过它没办法索引。 需要自己改造, 在 msgpack 中加上地址的元信息, 给索引用。 最好是 str/int/... 这些类型都按照 Python 的格式存储, 只是不要 PyObjectHeader 。这样读表时, 就只需要新建 header ,然后再引用表中的数据即可。 原理就是这样, 但是很麻烦,不想自己搞
关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2930 人在线   最高记录 5497   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 34ms · UTC 09:03 · PVG 17:03 · LAX 01:03 · JFK 04:03
Developed with CodeLauncher
♥ Do have faith in what you're doing.