出去玩,在阳朔过的新年,随便发点吧。

我们知道,C++继承了C语言的语法,并且号称完全兼容。实际玩下来,C标准自己也不怎么统一,说基本兼容大家是没异议的。这个给C++带来了无限的好处,从一开始,C++的用户数量和其他语言就不在一个数量级上。《C++语言的设计和演化》一书中说,作者设计出来后没多久,基本没有做宣传,就有无数人给他打电话,用户数量飙升。作为一个新出的语言,即使是Go也没有如此的待遇,这就是继承了C的好处。

有好处就有包袱,C++兼容C,出现的包袱也很大。想做GC?想使用智能指针?那就没法兼容C(具体不细说)。此外里面有无数的问题是因为“需要兼容C”而变成一个四不像的。再后来,为了在语言上更进一步,Java继承和吸收了C++的部分语法。这给Java带来好处,也带来问题。

继承一个东西的好处,就会带来一定的包袱。这个也同时体现在Zope社区和Python社区里面。Zope3把2直接推倒重来,导致了用户纷纷出走(当然还有别的原因)。从而出现目前Python

Web框架满天飞,各自为战的局面。而Python3则是不完全兼容Python2,导致目前上面的可用库依然不足。在Python3.2的时候,几乎是被迫的做了一些前向兼容,来换取用户可接受的过渡。同样,前几天我在说Django的演进的时候,也说过。如果我要做一个jinja版本的Django出来,大家接受度如何?当然,这不代表你无法在Django中使用jinja,不过发行版中不会作为标配。

还有什么语言继承和革新的事情?大家不妨想想。自己做的时候,对照一下,谨慎取舍。