最近研究 python 的一个小失落

2016 年 8 月 1 日
 SlipStupig

python 有一个很-O 选项我一直很好奇这个选项是干嘛的, help 写的是:

 -O     : optimize generated bytecode slightly; also PYTHONOPTIMIZE=x
-OO    : remove doc-strings in addition to the -O optimizations

python 优化选项可以产生更小的 bytecode 文件,我试着选了一下,确实小了一点,但是对性能提升并没有什么用,后来看官方邮件是这么回复的:


> Py_NoSiteFlag = 1...assuming you don't need to load site.py 
>
>     for example:</br>
>
> extern int Py_OptimizeFlag;
> extern int Py_NoSiteFlag;
> ...
> if( !Py_IsInitialized() ) {
>     Py_OptimizeFlag = 2;
>     Py_NoSiteFlag = 1;
>     Py_Initialize();

最后结论是 python 优化选项并没有什么用,想加速换 pypy

33572 次点击
所在节点    Python
268 条回复
serial
2016 年 8 月 17 日
@dzhou121

> 你的意思无非是说所有的编译器(compiler)最终都要生成能够给机器执行的"code",但是请问 Java 的 compiler 生成的 Java Bytecode ,能够给机器直接执行吗?

问的好,这也同时揭示了 Java 为什么那么慢。 Java JIT ,虚拟机,首先要摆出了,这就是 Java 慢的最直接原因。

Java 生成中间代码后,传递给 VM ,然后由 VM 进行边解释边运行。 Java 和 C 、 C++ 不同,就在于其一部分需要虚拟机的解释器来运行。

VM 和其解析器,正是二进制进程运行在后端。
dzhou121
2016 年 8 月 17 日
@serial

所以啊,就不要二进制来二进制去,没有任何意义,你写程序的时候肉眼看到的是 text , compiler 读进去的还是字符的 binary
FrankHB
2016 年 8 月 17 日
@serial

> 十进制,你 TMB 怎么不用呢?

奇怪了,用不用关你鸟事?

因为你以为计算机都不用二进制以外的玩意儿,所以用了的都不算计算机?你这逻辑 6 翻了。


> 不懂就不要逼逼。你哪个老师高速你他们直接组装 0 1 序列给计算机运行?

老师?组装?你咋不说历史上的计算机是你下的蛋里蹦出来的呢?

> 这是电子工程、计算机科学规范设定的。一群爹告诉你就是这么映射的,记住了么,脑残孩子。

又在扯什么鬼了。

规范?你的引用呢?出处?谁指定的?谁有义务遵守?

拿技术标准打你你倒有脸不痛不痒扯起“规范”了。

> 话说,你知道 TMB 与非门什么意思吗?不知道,赶紧百度。

话说你知道门是啥意思吗……知道的话为什么还会纠结这玩意儿干什么吃的呢?

> 一大波设计编程语言的大师,告诉你为了自然语言的方式,记住了吗?

哪个大波大师?我咋没听说过?是不是成天吹汉语编程什么的?

先替你做一些排除法: Dennis Ritchie 、 James Gosling 、 Guido van Rossum 、 Rob Pike ,这几个人是比较名不副实的,即便如此他们也没拉下脸来扯什么“为了自然语言”。

自然语言这种先天不存在设计的玩意儿能用是因为用户基本上都能赔个几十年进去。否则,照着糊 DSL 效率都未必满足需求。我倒是记得前些天有 NLP 业内人士表示放弃乱七八糟的自然语言才是解决处理困难的出路。

你还有脸把向后进看齐当成目的了?

> 笑死人了。你家的解释器怎么跑动的?我挺奇怪,你家的解释器,不是二进制的,而且一直在跑着。

笑死人了,你脑子灵活性还比不上二进制实现的机器啊……

难怪会有那么 zz 的理论……

> 最后,有空花钱去上个成人大学(电子电路的三极管、放大器、与非门都不懂,还搞计算机,丢人):

你是不是看到能选择被 PN 结挂婊所以才百度了些似是而非的东西偷懒往这个方向吹啊……因吹死挺,看你大脑复杂性连个结电容都放不下的样子,也真是难为你了。
FrankHB
2016 年 8 月 17 日
@serial 别 bb 了, Java bytecode 不是你亲家二进制 spec 嘛,这也咬?
@dzhou121 JVM 有硬件实现: https://en.wikipedia.org/wiki/Java_processor
虽然这掩盖不了 JVM 在 ISA 的角度上某些方面设计得比较渣渣,也否认不了 JVM 一开始的设计没打算适应硬件实现。
ashchen
2016 年 8 月 17 日
绝不碰 python
lxy
2016 年 8 月 17 日
这么多天过去了,葱球仍在战斗呀 ( ⊙ o ⊙ )
littleshy
2016 年 8 月 17 日
默默把系统里的 python 卸载了……
wizardforcel
2016 年 8 月 17 日
@serial

[ typescript coffescript 翻译后生成的 JavaScript ,你家的机器能运行?你 TMB 没有解释器能运行? ]

我家的机器不能运行不代表不能编译。编译出来 js 不代表不用解释。

那我问你包含几个 phase 才叫“编译器”??谁给你钦定的包含所有 phase 才叫“编译器”??

[ 一大波设计编程语言的大师,告诉你为了自然语言的方式,记住了吗? ]

自然语言能写程序??笑死爹了。一篇自然语言文章能分析出正面和负面就不错了。

[ 十进制,你 TMB 怎么不用呢? ]

你用脑袋思考问题的时候不用十进制用二进制??

[ Java 生成中间代码后,传递给 VM ,然后由 VM 进行边解释边运行。 ]

即时编译运行( jit ), java 如果不上 jit ,会跟 py 一样慢。

[ 笑死人了。你家的解释器怎么跑动的?我挺奇怪,你家的解释器,不是二进制的,而且一直在跑着。 ]

非二进制的计算机上跑二进制的解释器??又混淆模型和实现。

人类完全可以手动模拟来解析一段简单的代码,你说人类也是二进制??
serial
2016 年 8 月 17 日
@FrankHB

> 因为你以为计算机都不用二进制以外的玩意儿,所以用了的都不算计算机?你这逻辑 6 翻了。

不用二进制的玩意,明显被淘汰几十年了,傻白。

------------------------------------------------------------

> 规范?你的引用呢?出处?谁指定的?谁有义务遵守?

哈哈,说明你没上过大学呗,教科书、各个计算机大牛的书,买来看看。记得买老外的,特别是贝尔实验室的。傻白。

------------------------------------------先替你做一些排除法: Dennis Ritchie 、 James Gosling 、 Guido van Rossum 、 Rob Pike ,这几个人是比较名不副实的,即便如此他们也没拉下脸来扯什么“为了自然语言”。 --------------------

> 话说你知道门是啥意思吗……知道的话为什么还会纠结这玩意儿干什么吃的呢?

笑喷我了,“门” ...

-------------------------------------------------------------------------------------------------------

> 先替你做一些排除法: Dennis Ritchie 、 James Gosling 、 Guido van Rossum 、 Rob Pike ,这几个人是比较名不副实的,即便如此他们也没拉下脸来扯什么“为了自然语言”。

这些人在手写 0 1 咯? 你还真是傻白。麻烦你把计算机原理先搞懂。

--------------------------------------------------------------------------------------------------------

> Java bytecode 不是你亲家二进制 spec 嘛,这也咬?

Java bytecode 只是中间代码,不是给计算机运行的,傻白。懂? Java bytecode 还要经过虚拟机,又是二进制解释器,解释到二进制序列。傻白。
serial
2016 年 8 月 17 日
@wizardforcel

> 我家的机器不能运行不代表不能编译。编译出来 js 不代表不用解释。
> 那我问你包含几个 phase 才叫“编译器”??谁给你钦定的包含所有 phase 才叫“编译器”??

这是规范,一个编译器模型的架构。傻逼。

> 自然语言能写程序??笑死爹了。一篇自然语言文章能分析出正面和负面就不错了。

脑残到极品了, if else 不是自然语言,难道是火星语言。

> 非二进制的计算机上跑二进制的解释器??又混淆模型和实现。
> 人类完全可以手动模拟来解析一段简单的代码,你说人类也是二进制??

你知道代码是什么?人类写的代码是人类可以看懂的语言,编译器翻译出来的是机器可以看懂的。你,屁都不懂。
azh7138m
2016 年 8 月 17 日
livc
2016 年 8 月 17 日
卧槽 误入战场…撤!
srjzcar
2016 年 8 月 17 日
看大神们还在辨...真学习了~
mind3x
2016 年 8 月 17 日
@FrankHB 他既然敢于把 TypeScript 的 compiler(或 transpiler)钦定成"Code Generator",这场仗注定你赢不了的啊……

比如什么『 Java bytecode 只是中间代码,不是给计算机运行的,傻白。懂? Java bytecode 还要经过虚拟机,又是二进制解释器,解释到二进制序列』,我要是举出来能直接运行 Java bytecode 的 ARM Jazelle ,他大概又会说 ARM 也是解释器不是 CPU 吧...
miniwade514
2016 年 8 月 17 日
这仗打得……电影票都省了
incesa
2016 年 8 月 17 日
中午的时候还 190 多楼呢 下午下班一看 我去 第三页都 20 多个回复了。。楼主你赚翻了啊[doge]
hehehas
2016 年 8 月 17 日
一个 pythoner 开始担忧未来了
hehehas
2016 年 8 月 17 日
看了各位的 github (如已有)感觉就知道胜负了
muziyue
2016 年 8 月 17 日
菜逼瑟瑟发抖,根本看不懂你们在吵啥
Arnie97
2016 年 8 月 17 日
以下各条均节选自 @serial 的精彩发言,我只做搬运,不做评论。

> 也真操了,这种傻逼说起话来还觉得自己挺懂一样。我再给你普及一下:计算机不只只用二进制 0 1 ,而且只懂加法,不懂减法、乘法、除法。
> 你连起码的计算二进制原理都没搞懂,大学还没别业呢?
哥告诉你个常识:纯位图是 TM 人类写的解析器 --- 解析一个文本到协议规范的二进制流。计算机只认 TM 的二进制 0 1 , understand ?
> 脑残到极品了, if else 不是自然语言,难道是火星语言。


> 有道理就讲出来,没道理就别 BB 。说一堆无用的废话 P 话,只能显得你很 LOW 。
> 怎么举报这个傻 B

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://study.congcong.us/t/296233

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX