为什么python是一个非常不好的语言

cai posted @ 2012年12月15日 15:23 in 思维碎片 with tags python 糟糕 垃圾 高级语言 , 4715 阅读

一直以来我都表达 python 是个糟糕语言的观点,但是没有深入的解释。

计算机一直都是“工具”,意味着我们是拿它干活的,也就是所谓的提高生产力。

 

指挥计算机干活的重要工具就是编程语言。计算机并不是训练来干活的,是编程来干活的。编程语言的效率有2个指标:编写干活指南的效率和机器人执行的效率。

 

在人力成本低于硬件的时候,人追捧的是执行效率。

人力成本越来越高的时候,人开始追求编程的效率。

人自然是希望一个语言能两头兼顾。可惜的是 python非但没有带来执行效率(这是python不追求的,所以姑且不算缺点),连它拼命牺牲执行效率希望换来的开发效率事实上也一点没有。

 

执行效率:首先,执行效率和语言本身高级不高级是没有任何关系的。执行效率的高低只关系到冗余操作的多寡。这也是“优化”的基础,去除冗余操作。

冗余操作的多寡通常有3个因素影响到:1 编译器的效率  2 程序员的水平 3 语言本身的累赘

但是衡量一个语言本身效率的,事实上应该是最后一个 "语言本身的累赘",这个才是编译器永远无法改进的,程序员水平再高也无能为力的。

不幸的是,python是一个本身的累赘非常多的语言。而累赘最少的语言,应该算是C++语言了。所有C++用到的功能,没有一个是可以在别的语言用更低的代价实现的。当然,有的语言压根就没有C++提供的功能,必须自己模拟。模拟的代价和C++提供的是一样的,水平不够的人来模拟只能获得更烂的结果。

当然 ,python是个高级语言,语法糖多点,性能烂就接受一下吧!毕竟开发效率高呢(?)

接下来我们说编程的效率。编程效率主要是受5个因素影响:语法是否自然,语义是否凝炼,文档或者或教程多不多,库是不是丰富,开发环境好不好。不用说python的文档还是很多的,但是显然没有c++多。各种粗制滥造的c++教程铺天盖地,算了,这是c++的坏处。误人子弟的教程太多。库当然是C++最丰富了。python还面临着 python3 和 python2 的分裂。

 

开发环境和库一直是C++的优势。不用说 Visual C++这种重量级公司出的IDE ,还有 kdevelop , eclipse CDT 这些免费开源的IDE。自动完成和代码提示让你写代码的时候非常轻松。相比之下 , python 就没有好的IDE了。

当然,接下来是程序员最关心的,语法是否自然,语义是否凝炼。python 的语义自然是很多的,一条语句能相当于写几千行 C 代码。这也是人常说的,语法糖多。可惜的是,C++一样有高级语法糖,而且代价很低!比python低太多了。在这一点上,python没有优势,只有劣质。python的语法糖是以牺牲性能换来的,而C++在不损失性能的同时提供了语法糖。

 

至于语法自然不,仁者见仁智者见智了。对于大多数C学过来的人来说, 自然是C++的语法简单。当然,前提是不使用模板这种高级货。真的用模板的话,模板是属于用起来简单,写起来难的语法糖。我们自然可以选择把困难留给 boost,快乐留给自己。所以这点上 C++没有输。何况python还不支持模板。

 

那么开发效率到底是 C++高还是 python呢?

差不多!

那执行效率呢? 

C++和python不是一个档次的,没法比。

 

好了,单从这点已经 python 完败。不过我想说的还不是这个。

 

如果真的有语言像python那样慢,我觉得对得起它的性能的,就必须拿出像样的功能,这个功能包括

 

语言级的并行能力,语言级的多进程能力 (等等,这不就是shell么!),语言级的SIMD能力(语言级的矩阵运算支持)

语言级的复杂数学公式计算能力  ,内置的标准各种算法(STL笑而不语,不过我要的还不止STL),描述性语义(而非指令性语义)

 

我要求的这些,是高级语言需要具备的,而 python 统统没有,连 shell 都能占上一些!

 

 

 

 

Avatar_small
依云 说:
2012年12月15日 16:13

C++ 难学(难入门也难精通。Python 入门简单)
shell 更难学(精通对一般人几乎不可能)
:-)

哦对了,C++ 还和 Haskell 一样难以编译通过,编译器错误里长长的类型声明占了绝大部分。clang++ 的高亮做得挺好,可惜 C++11 的 GNU 变种的支持有 bug 不知道修正没有。要 C++11 是为了 auto 关键字,GNU 变种忘记了是什么原因。

哦对了,Python 不支持模板是因为它不需要支持模板。当然,动态的同时也带来的性能损失。

Avatar_small
Garfileo 说:
2012年12月17日 17:20

呃?

想当年你个也是差不多这样黑过 c++

也许再过两年,你个又觉得 python 粉好勒

doyle 说:
2012年12月20日 12:13

c++开发效率和python差不多……这是我今天看到的最好的笑话。谢谢让我开心一整天。

Avatar_small
rca 说:
2013年1月29日 09:38

债这里萌萌系黑过它的嘛,还系跟着 linus 屁股后面黑

http://microcai.is-programmer.com/posts/35907.html

风之小祈 说:
2016年1月09日 19:13

何况python还不支持模板

我来类比一下

何况汽车还不支持吃草

请让我笑一会儿...


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter