Python2到Python3的迁移让Python社区苦不堪言,但是只有Python社区有这样的分裂吗?绝不是,其实很多语言都面临着迁移的问题,而且有的语言的升级换代堪称整容,整容的模板就是Python。
1、JavaScript 5 升级到 JavaScript 6
这样说其实不太准确,JavaScript的语言标准叫做ECMAScript,所以确切地说就是ECMAScript5升级到ECMAScript6.
这次升级带来的主要特性有Symbol, Proxy, Reflect, Set, Map, Iterator, for...of, Generator, Promise,异步操作和Async, Class, Decorator, Module.
大家注意看橘黄色的部分,是否有一种Python3.6的即视感呢?接下来我们看一下ES6和Python3在类定义上面的对比:
何其神似啊~JS社区目前遇到的情景和几年前的Python是一样的,语言推出新标准,但是社区及工具链的迁移需要数年的时间,祝他们好运~
2、swift 2 升级到 swift 3
swift 的升级相比于JS和Python的升级,其实是相对小的升级,但是它仍旧是和2不兼容的!swift 函数和属性的命名很多继承了Objective-C“又臭又长”的特点,一个简单的函数调用画风都是这样的:
let content = listItemView.text.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewline
CharacterSet)
这次升级在大量的API中去掉了无用冗余的部分,上边这句话就变成了下面这样:
let content = listItem.stringValue.trimming(.whitespaceAndNewlines)
虽然在Pythoner看来还不够简洁,但是对于swift粉们已经是一个重大的解脱了。在小编看来,这句话应该继续简化一下,变成这样:
let content = listItem.string.trim("\S+")
对于Swift和Objective-C的语法,小编只有一句评价:“No Zuo No Die.”
3、C++ 11的逆天改善。
C和C++都是静态语言的老大哥,谁也没有想到C++老大哥会在版本11中做出如此多跟得上潮流的改进。
首先是逆天的auto关键字
auto i = 1;
auto d = 1.0;
auto str = "Hello World";
auto ch = 'A';
这样定义,变量i会自动被声明为整数,d被自动声明为浮点数,多么智能啊!希望下一个版本能把auto这个关键字也取消,反正本来用处也不大,直接i = 1就好了。
其次是逆天的lambda表达式
C++支持lambda表达式,太潮了!一个例子:
auto func1 = (int i) { return i+4; };func1(6)
为什么我觉得写起来比Java还简单一点?速度又快,写起来又简单,没有天理(⊙o⊙)啊!
还有很多其他新潮的特性,C++的这次升级让不少人眼前一亮。
总结陈词
可以看出,编程语言更新换代是非常正常的一件事,没有一门语言是稳如泰山、从不改变的。而改进的方向恰好是向着越来越Pythonic而改进。这个现象不是巧合,是由于Python在设计时的哲学决定的。Python设计的哲学能够让大多数人认同,就像普世价值能够被大多数人认同一样,所以随着时间的推移,编程语言渐渐都会Python化,这就是编程语言的进化。
Python哲学
优美胜于丑陋
明了胜于晦涩
简单胜过复杂
复杂胜过凌乱
扁平胜于嵌套
间隔胜于紧凑
可读性很重要
即使假借特例的实用
性之名,也不违背这些规则
虽然实用性次于纯度
错误不应该被无声的忽略
除非明确的沉默
当存在多种可能时,
不要尝试去猜测
应该
有一个,最好只有一个,明显能做到这一点
虽然这种 方式可能不容易,除非你是python之父
现在做总比不做好
虽然过去从未比现在好
如果这个实现不容易解释,那么它肯定是坏主意
如果这个实现容易解释,那么它很可能是个好主意
命名空间是一种绝妙的理念,应当多加利用