不久前,当我学习Javascript时,我研究了Javascript:好的部分,我特别喜欢关于坏和丑陋部分的章节.当然,我并不同意所有内容,因为总结编程语言的设计缺陷在某种程度上是主观的 - 尽管如此,我想每个人都会同意这个关键字with
在Javascript中是个错误.尽管如此,我发现阅读此类评论很有用:即使有人不同意,也有很多需要学习的地方.
是否有博客文章或一些描述Python设计错误的书籍?例如,我猜有些人会认为缺少尾调优化是一个错误; 可能还有其他值得学习的问题(或非问题).
Fab*_*olm 33
您要求提供链接或其他来源,但确实没有.信息分布在许多不同的地方.究竟是什么构成了设计错误,您是否只计算语言定义中的语法和语义问题,还是包括平台和标准库问题以及具体实现问题等实用主题?从性能的角度来看,你可以说Python的动态是一个设计错误,因为它使得很难做出直接有效的实现,并且使得用代码完成,重构的IDE变得困难(我并不是说完全不可能)和其他好东西.与此同时,你可以争论动态语言的优点.
也许一种开始考虑这个问题的方法是查看从Python 2.x到3.x的语言变化.有些人当然会争辩说,print
作为一种功能是不方便的,而其他人则认为这是一种改进.总的来说,没有那么多变化,而且大多数都变得非常小而微妙.例如,map()
以及filter()
返回迭代器而不是列表,range()
行为就像xrange()
习惯了,和dict
方法,如dict.keys()
回报的观点,而不是名单.然后有一些与整数相关的变化,其中一个重大变化是二进制/字符串数据处理.它现在是文本和数据,文本始终是Unicode.有几种语法上的变化,但它们更多地是关于一致性而不是改进整个语言.
从这个角度来看,似乎Python已经在语言(语法和语义)级别上设计得非常好,因为至少2.x. 您总是可以争论基于缩进的块语法,但我们都知道这不会导致任何地方... ;-)
另一种方法是查看替代Python实现正在尝试解决的问题.它们中的大多数以某种方式处理性能,一些解决平台问题,一些语言本身添加或更改以更有效地解决某些类型的任务.Unladen swallow希望通过优化运行时字节编译和执行阶段来显着加快Python的速度.Stackless通过添加微线程和tasklet等构造,允许双向tasklet通信的通道,协同或抢先运行tasklet的调度,以及挂起和恢复tasklet执行的序列化,为高效,高度线程化的应用程序添加功能.Jython允许在Java平台上使用Python ,在.Net平台上使用IronPython.Cython是一种Python方言,它允许调用C函数并声明C类型,允许编译器从Cython代码生成有效的C代码.Shed Skin将隐式静态类型带入Python,并为独立程序或扩展模块生成C++.PyPy在Python的子集中实现Python,并更改一些实现细节,如添加垃圾收集而不是引用计数.目的是允许Python语言和实现开发由于更高级别的语言而变得更加高效.Py V8通过V8 JavaScript引擎桥接Python和JavaScript - 您可以说它正在解决平台问题.Psyco是一种特殊的JIT,可以为当前正在处理的数据动态生成特定版本的运行代码,这可以为您的Python代码提供加速,而无需编写优化的C模块.
其中,可以通过观察PEP-3146来了解Python的当前状态,其中概述了Unladen Swallow将如何合并到CPython中.这个PEP被接受了,因此Python开发人员判断目前最可行的方向是什么.请注意,它解决的是性能,而不是语言本身.
所以我真的要说Python的主要设计问题在性能领域 - 但这些基本上是任何动态语言必须面对的挑战,并且Python系列语言和实现正试图解决这些问题.至于直接设计错误,如Javascript中列出的错误:好的部分,我认为"错误"的含义需要更明确地定义,但您可能想要查看以下的想法和意见:
S.L*_*ott 32
是否有博客文章或一些描述Python设计错误的书籍?
是.
它被称为Py3K向后不兼容的变化列表.
从这里开始:http://docs.python.org/release/3.0.1/whatsnew/3.0.html
阅读所有Python 3.x发行说明,了解有关Python 2中的错误的更多详细信息.
Dan*_*man 21
我对Python的最大痛苦 - 以及在转向3.x时没有真正解决的问题 - 是标准库中缺乏适当的命名约定.
例如,为什么datetime
模块包含一个本身叫做的类datetime
?(更不用说为什么我们有独立datetime
和time
模块,但也是一个datetime.time
类!)为什么是datetime.datetime
小写,但是decimal.Decimal
是大写?请告诉我为什么我们在xml
命名空间下面有那么可怕的混乱:xml.sax
但是xml.etree.ElementTree
- 那里发生了什么?
试试这些链接:
http://c2.com/cgi/wiki?PythonLanguage
http://c2.com/cgi/wiki?Python问题
小智 5
经常让没有经验的开发人员感到惊讶的是候选人的错误.这是一个默认参数:
http://www.deadlybloodyserious.com/2008/05/default-argument-blunders/
归档时间: |
|
查看次数: |
11460 次 |
最近记录: |