最近研究 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

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

你编译出来的不是二进制,计算机能理解个逼啊?

你写的程序不是二进制程序? 傻逼!

没上过大学就别瞎逼逼。
FrankHB
2016 年 8 月 17 日
@serial 噫,原来龙书能钦定啥叫编译器啊……这玩意儿 GB 文献引用是[S]还是[P]?这种玩具定义一个 Smn 定理就打趴了。
就按你愿意的缩小外延扯 the stream of characters 吧,你把 characters 脑补成啥了?随便一个 short 类型的值算不算 character ?跟你 bb 的 01 又有几毛钱关系?
serial
2016 年 8 月 17 日
@FrankHB

你爹写的尾递归版本归并排序,自己 TMB 去体会: https://github.com/tulayang/tail-call-merge-sort/blob/master/sort-es6.js
wizardforcel
2016 年 8 月 17 日
@serial

[ 你编译出来的不是二进制,计算机能理解个逼啊? ]

你知道 typescript 和 coffescript 嘛??真是孤陋寡闻。

[ 你爹写的尾递归版本归并排序,自己 TMB 去体会 ]

体会啥??体会你把尾递归写成“ [parse(), parse(), parse()] ”嘛??
serial
2016 年 8 月 17 日
@FrankHB

你是不是你 MB 脑残? the stream of characters 是人类写的代码, 0 1 是编译器最终翻译后输出的二进制序列。

[ the stream of characters ] ===> [Compiler] ===> [ 0 1 sequences ]

傻逼一个。
FrankHB
2016 年 8 月 17 日
我还以为回复被吃了……原来换页了没显示出来。

@serial 还打肿脸充胖子。跟一个不懂 C 瞎 bb “指针就是地址”的即视感……

你写程序难道直接写 0101 ?你还总是抢编译器生成二进制代码的活?你的程序不艹成二进制就没人能看?你理解程序还需要计算机替你先理解?(意思是你连个独立的 code review 都做不了,有个球用啊……)没实现出编译器设计语言的都是傻缺?我撸了个编译成 CPU 内部状态的编译器就是不要求 target 你个 01 要求用户艹你个什么字符流,你行你咬我啊?

就算是生成二进制代码,谁 tm 给你保证会完整保留源程序的语义?讨论语言 bb 艹这种实现有卵用。或者你干脆分不清什么是“程序”吧?

终于怂到没话可说丢码跑了?没注意到你这又在打自己脸了?

不指望你是 Belleve 或者能撸 ANF 和 delimited continuation 什么的,搞个 CPS 什么的吓唬围观群众都不敢了么? bb 编译器如何如何,拿 ES 偷懒结果撸了个排序……想证明什么都扯不清,也是 6 。
serial
2016 年 8 月 17 日
@wizardforcel

傻逼, typescript coffescript 都出来了。哥再给你普及,它们是运行在解释器,解释器是个二进制程序。写你 M 的逼呀。屁都不懂,还逼逼。
FrankHB
2016 年 8 月 17 日
@serial 又在自己打脸了。“人类写的代码”?计算机到底认识不认识你个 source code ?更不用说抛开 FSF 的 zz 私货场景以外 source code 本来就可以是二进制形式,你告诉我你在编译什么卵?

还有谁 tm 告诉你代码就得是人写的?就这点三脚猫认识居然还有脸拿 Lisp 给自己脸上糊啥?
FrankHB
2016 年 8 月 17 日
@serial 笑死了……解释器是个二进制程序都出来了。。。。不管实现,哪家 ES 钦定你这里是以“二进制程序”的形式跑的,没二进制程序就嗝屁了? Evaluation tower 哭晕在厕所……
serial
2016 年 8 月 17 日
@FrankHB

> 你写程序难道直接写 0101 ?你还总是抢编译器生成二进制代码的活?你的程序不艹成二进制就没人能看?你理解程序还需要计算机替你先理解?

> “人类写的代码”?计算机到底认识不认识你个 source code ?更不用说抛开 FSF 的 zz 私货场景以外 source code 本来就可以是二进制形式,你告诉我你在编译什么卵?

> "解释器是个二进制程序都出来了"

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

你蠢比一样的话语,充分暴漏了你确实没上过大学。

谁会直接写 0101 ?人类写字符代码,编译器解释成 0 1 二进制序列。

还 “你的程序不艹成二进制就没人能看”,看你 MB 呀,二进制是给机器运行的。你给你爹看二进制?给你讲过了,二进制 0 1 直接映射到与非门 0 1 电平。--- 这当然得原谅我没给你这小学生普及一个常识:与非门是由高和低两个电平的,和 0 1 在语义正好相当。

编译,是为了让你用自然语言的方式编写逻辑,然后为这些逻辑生成复杂的 0 1 序列,交给机器运行。懂了吗?傻逼。

解释器不是二进制程序吗?哎哟,原来你家的解释器不是二进制程序跑的呀!千古奇葩!!!就你这句“哪家 ES 钦定你这里是以“二进制程序”的形式跑的”,就足以说明你屁都不懂。

还是那句话,把编译器的原理好好 TMB 搞懂了:

[ the stream of characters ] ===> [Compiler] ===> [ 0 1 sequences ]
serial
2016 年 8 月 17 日
@FrankHB

原来你家的解释器不是用二进制跑的呀,牛逼,下边是你这脑残脱着它跑的吧。
wizardforcel
2016 年 8 月 17 日
@serial

浏览器能直接解释 ts 和 coffee ??(手动滑稽)
FrankHB
2016 年 8 月 17 日
@serial 逗比再次自己打脸。

不过在此之前我觉得先澄清一下为什么的对大学特别有怨念的样子……你没上?

嘛,反正地图炮撂在这里:上过大学也好没上过大学也好,九成九的童鞋 C 的水平都是辣鸡,也不够格断言什么叫编译器而什么都不是。(的确大学不太可能会把 EINAC 并不是用十进制的列入考点……)

> 谁会直接写 0101 ?人类写字符代码,编译器解释成 0 1 二进制序列。

开始人来疯了。没编译器之前发明出体系结构的和手写 shellcode 的被你开除出人类阵营了?

Excuse me ……编译器“解释”?

> 还 “你的程序不艹成二进制就没人能看”,看你 MB 呀,二进制是给机器运行的。

这边做安全的没见了打死你算你运气。

> 你给你爹看二进制?给你讲过了

还有 Intel® 64 and IA-32 Architectures Software Developer ’ s Manual 的表给爹看 MB 咯?照你的逻辑,我附近貌似有很多你爹……

> 二进制 0 1 直接映射到与非门 0 1 电平。

跟你说了几遍了不懂别 bb 。且不说你“映射”这种不靠谱的描述有多少水分,谁告诉你能映射就该映射?映射到高低电平就要与非门?或非门不行?
该不会你数字逻辑电路就知道个××门吧……被锁存器还是 PN 结拍死,选个方向吧。

> 这当然得原谅我没给你这小学生普及一个常识:与非门是由高和低两个电平的,和 0 1 在语义正好相当。

二元逻辑谓词和真值一起炒冷饭……你是留级的时候跳过高中了?

> 编译,是为了让你用自然语言的方式编写逻辑,然后为这些逻辑生成复杂的 0 1 序列,交给机器运行。懂了吗?傻逼。

谁告诉你“为了”“自然语言”的方式了。

谁告诉你编译目标就是 01 了?真是奇怪你哪来的脸皮扛得住现成的物理实现睁眼说瞎话。

> 解释器不是二进制程序吗?哎哟,原来你家的解释器不是二进制程序跑的呀!千古奇葩!!!

你的脑子是二进制程序还是你的脑子拙计到跑不动一个解释器?

> 还是那句话,把编译器的原理好好 TMB 搞懂了:

还是那句话,不懂的不用瞎 bb 。说你不懂啥叫编译器一点都不冤枉。

算上你怂了缩了的,这楼里暴露的你显然不懂或者想装懂而露马脚的东西看样子包括但不限于:数理逻辑、计算机发展史、计算机组成原理、数字逻辑电路、集成电路设计、体系结构设计、程序语言理论、 C 语言、 Lisp 。

有意见的可以继续跳,虽然可能别人会介意你的嘴脸太碍事。

> [ the stream of characters ] ===> [Compiler] ===> [ 0 1 sequences ]

这种民科理论看到的不要上当就是。
FrankHB
2016 年 8 月 17 日
手滑…… EINAC 并不是用十进制→ EINAC 并不是用二进制而是用十进制……
serial
2016 年 8 月 17 日
@wizardforcel @FrankHB

把 TMB 这几个名词搞清楚,彩笔们:

Lexical Analyzer , Syntax Analyzer , Semantic Analyzer , Intermediate Code Generator , Machine-Independent Code Optimizer , Code Generator , Machine-Dependent Code Optimizer ; characte stream , token tream , syntax tree , target-machine code 。

All these ---> Phases of a compiler.


@wizardforcel

我就坐等着你这傻逼爆料 “ typescript coffescript 编译成 JavaScript ” 呢。

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

2. typescript coffescript 翻译成 JavaScript 的程序叫做 Code Generator ,或者是 Intermediate Code Generator (中间代码生成器)。懂? 傻逼。今天给你普及这么多知识,你还不赶紧跪舔。
dzhou121
2016 年 8 月 17 日
@serial

整个就是各种概念一知半解, 通篇 binary code 和 machine code 混淆不清,

> 还 “你的程序不艹成二进制就没人能看”,看你 MB 呀,二进制是给机器运行的。
你的意思无非是说所有的编译器(compiler)最终都要生成能够给机器执行的"code",但是请问 Java 的 compiler 生成的 Java Bytecode ,能够给机器直接执行吗?
dzhou121
2016 年 8 月 17 日
@serial

>> typescript coffescript 翻译成 JavaScript 的程序叫做 Code Generator
All these ---> Phases of a compiler.

你自己也承认 Code Generator 也可以叫 compiler, 那请问 compiler 出来的都是二进制吗?自己打脸不是
serial
2016 年 8 月 17 日
@FrankHB

> EINAC 并不是用十进制→ EINAC 并不是用二进制而是用十进制
谁告诉你“为了”“自然语言”的方式了。

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

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

> 没编译器之前发明出体系结构的和手写 shellcode 的被你开除出人类阵营了?

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

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

> 跟你说了几遍了不懂别 bb 。且不说你“映射”这种不靠谱的描述有多少水分,谁告诉你能映射就该映射?映射到高低电平就要与非门?或非门不行?

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

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

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

> 谁告诉你“为了”“自然语言”的方式了。

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

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

> 你的脑子是二进制程序还是你的脑子拙计到跑不动一个解释器?

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

真是个傻白,一点进程常识都没有。

把编译原理记住了,

[ the stream of characters ] ===> [Compiler] ===> [ 0 1 sequences ]

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

最后,有空花钱去上个成人大学(电子电路的三极管、放大器、与非门都不懂,还搞计算机,丢人):
serial
2016 年 8 月 17 日
@dzhou121

> 你自己也承认 Code Generator 也可以叫 compiler, 那请问 compiler 出来的都是二进制吗?自己打脸不是

别乱盖帽子,我何时 “承认 Code Generator 也可以叫 compiler ”。你难道看不清楚我写的吗:

Lexical Analyzer , Syntax Analyzer , Semantic Analyzer , Intermediate Code Generator , Machine-Independent Code Optimizer , Code Generator , Machine-Dependent Code Optimizer ; characte stream , token tream , syntax tree , target-machine code 。

All these ---> Phases of a compiler.

Code Generator  仅仅是编译器其中一个 phase 。自己数数,上面多少个 phase 。编译器的 phase 多个,扫描、语义检查、语法检查、中间生成、中间优化、目标生成、目标优化、...
dzhou121
2016 年 8 月 17 日
@serial

> 没编译器之前发明出体系结构的和手写 shellcode 的被你开除出人类阵营了?
不懂就不要逼逼。你哪个老师高速你他们直接组装 0 1 序列给计算机运行?

你知道曾经有过打孔编程?就是直接组装 0 1 序列给计算机好么
https://en.wikipedia.org/wiki/Punched_card

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

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

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

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

© 2021 V2EX